NDC London 2019 was my first “big” conference representing tombola. It was a fantastic experience, and I would recommend attendance to anyone at tombola who is given the opportunity.

This year’s conference talks ran from 30th January until 1st February 2019; it included a large number of speakers, holding talks on a variety of topics that ranged from subjects that we, as developers, encounter each day, to the future direction of our field.

Opening Keynote

The opening keynote of the conference was presented by Hadi Hariri, a notable developer at JetBrains. Hadi talked about the ubiquity and availability of data in our connected world, and how we as service consumers, either willingly (and sometimes unknowingly) share our data. Such as, for example, through our daily interactions with social media, we provide a vast amount of data to service providers, who in turn may allow third parties to access that data to derive certain conclusions about us as individuals.

Many service providers offer their services for free, which on the face of it, it great for us as consumers. However, as Hadi highlighted in his talk, the “service” provided to consumers in this case is not the “product” being sold; it is in fact ourselves, or rather, our data, that is the “product” to be traded.

The keynote touched upon some Orwellian ideas around data misuse and the idea of our data being the product to be traded and sold. In the extreme, without full transparency and oversight of service providers, and individual control over data, our willingness to voluntarily share our information in exchange for “free” services could have the potential to result in a bleak future for our society. Hadi highlighted the social credit score that is currently being implemented by the Chinese government as an example of how data can be used by governments and organisations to control populations. Scary stuff!

The keynote was a fascinating opening talk for the conference, and certainly gave me plenty to think about.

Having listened to the talk for an hour or so, and having taken on-board the issues that were highlighted, almost all of the attendees (myself included) immediately decamped to the exposition hall to exchange their data for tons of “free” swag!

Day One

Two talks stood out most for me on the first day of the conference: the first was presented by Roy Derks titled “GraphQL will do to REST what JSON did to XML”; the second was a quick runthrough of CSS Grid, presented by Amy Kapernick.

Roy’s talk about GraphQL was of particular interest. I felt that his overview of the technology gave enough of an insight to envisage how GraphQL could have an immediate benefit to our API-driven project work at tombola.

GraphQL is a technology currently in use by a number of high-profile organisations, such as Facebook, GitHub, and Pinterest. The idea behind GraphQL is that it enables service consumers (e.g. client applications) to query a well defined data structure in order to retrieve only the data that is significant for that application.

In the current world of RESTful APIs, we define a service endpoints that return well defined data structures. Sometimes, however, a service must support multiple consumers: one consumer may require a certain subset of the data provided by the service, while another may require an entirely different subset. Over time the requirements of each respective consumer may change, requiring that the service expose more data than is necessary. This problem is typically solved by versioning the RESTful API, and is also the point at which problems may begin to occur. For example, the service codebase may become fragile or difficult to maintain, supporting multiple versions of the API over time may have ownership cost implications for the business, and deprecation of older versions of the API may cause difficulties across multiple services and applications.

GraphQL solves the RESTful API versioning problem by allowing the service to extend the data structure definition without breaking existing consumers. Moreover, since consumers only receive the data that is queried, they do not receive more data than is required for that application.

Amy’s talk about CSS Grid, while short, was interesting and seemed to be of immediate use and benefit for tombola front-ends.

Way back in the bad old days of building web front-ends, developers would employ the use of HTML tables to organise the layout of their pages, sometimes resulting in pages with tables nested within tables. Needless to say this would lead to an unmaintainable mess. Between then and now, things have progressed greatly; we’ve moved away from HTML tables for layout, to floating DIVs, to Flexbox, and now to CSS grid.

Flexbox is a great CSS tool that allows us to build flexible layouts that flow across the page, but can sometimes be cumbersome to use in order to create grid-style layouts. Amy’s talk showed how CSS Grid helps to solve this problem. CSS Tricks has a fantastic guide if you’re interested: https://css-tricks.com/snippets/css/complete-guide-grid.

Day Two

My standout talk for day two of NDC London 2019 was about the future .NET SPAs using Microsoft Blazor by Steve Sanderson.

Blazor allows us run .NET Core client-side in the browser on top of WebAssembly. The pre-release changes to .NET Core allow assemblies that target the .NET standard library to be natively compiled to WebAssembly (instead of MSIL), which can then be served to the client browser and executed locally. Coupled with the recent development of Razor Components (similar to Razor views that we use in our ASP.NET MVC applications), means that we will soon have the ability to build client-side applications using C#! With all of the the obvious advantages of having a single codebase that this entails, such as the ability to share code between client and server.

After Steve’s talk, I felt really excited about the possibilities of building new client-side applications with C# and eventually moving away from the JS stack.

Daniel Roth‘s talk “Introducing Razor Components in ASP.NET Core 3.0” was a great complement to Steve’s talk.

The second day of NDC was rounded off by Guy Royse‘s WebAssembly talk. WebAssembly is a stack based byte-code language that closely mimics the behaviour or machine executable code, but does so in the sandboxed environment of the browser. It is a platform that allows developers to write applications in languages such as C/C++, Rust, and C#, and execute that code in the browser.

Guy gave a thorough introduction to WebAssembly, and started by presenting the background and origins of Assembly as a language more generally, before moving on to argue the case for a WebAssembly language in the browser. He began his argument by highlighting a bunch of the oddities that JavaScript, the language traditionally used to develop client-side web applications (see https://medium.com/@daffl/javascript-the-weird-parts-8ff3da55798e for a sample of JS oddities). Following on from this, he described the code pipeline of a JS application, paying particular attention to the overhead that the browser has in order to execute a JS application: i.e. downloading source files, parsing, and finally execution. With WebAssembly, developers are able to overcome many of JavaScript’s oddities by leveraging the consistency and reliability provided by higher order languages, but also, the browser is able to forgo the parsing phase of compiled WebAssembly resources and instead execute them directly (it’s worth noting that the performance of applications that target WebAssembly is almost on-par with natively executed machine code!)

The talk ended with Guy writing a native WebAssembly application live on stage – a task not for the faint-hearted because (i) it was a live demo! and (ii) because writing applications natively in WebAssembly is difficult!

Day Three

The third day and final day of NDC London 2019 was a bit of a mixed bag, however, the standout talk for me was given by Scott Hanselman. I’m certain that there are many developers at tombola who are familiar with Scott Hanselman, or who may have read his blog.

Scott’s talk was much less about Microsoft’s tech stack, and much more about a problem very personal to himself. Scott Hanselman has been a type-I diabetic for most of his adult life, and as such, he must continually monitor his blood sugar levels. His talk started by describing the difficulties of living with diabetes, and about the products and services that a number of pharma companies provide in order to collect and analyse blood sugar levels. Whilst the these products can easily collect and analyse data from users, it seems that the pharma companies are not so keen on allowing users access to their data. In response to this, Scott and others in the community have developed software and created hardware “hacks” in order to access and analyse their data, so that more informed and accurate decisions based upon their blood sugar levels can be made.

Data captured from Scot’s blood analyser is processed by an app on his smartphone, which in turn, passes it to a backend service through a web API. This same API is then able to push out notifications to other connected devices and applications. For example, Scot had developed an app for his smartwatch that alerts him whenever a dip in his blood sugar is detected. He’d even written a powershell plugin that shows his blood sugar level in his command prompt!

Whilst Scot’s talk primarily focused around the difficulties of living with type-I diabetes, it did highlight some really interesting and innovative technological solutions to the problem, and definitely gave plenty food for thought.


There were a lot of good talks at NDC London 2019 (and some not so good one’s too). There were a number of topics covered that I felt could have the potential to be useful at tombola for new and existing projects in the short term, such as GraphQL, and others that I felt could be useful in the future, such as Blazor.