Probably one of the most powerful questions we can ask ourselves and one another. 3 letters, or one syllable is all it takes to unlock enlightenment, understanding, empathy, sorrow, love.

It seems to be human nature to react or respond to things we don’t understand or care for with our gut response (the why here would be interesting, but for another time).

When we respond with our gut, we miss opportunities. Opportunities to learn, grow, solve a colleagues problem, lift a burden and to understand.

Why is one of the fundamental mechanics of teamwork and collaboration, without it we can’t…


Amplify+AppSync with a Custom DynamoDB Resource

Amplify makes building apps easy, annotate your GraphQL schema with @model and Amplify will happily generate you a DynamoDB table you can Query/Mutate/Subscribe too…

What about when you have a DynamoDB Table created outside of Amplify? Maybe through CDK or CloudFormation (or just the console)? Or in other words, how do you Bring Your Own Database to Amplify?

The good news is, Amplify has you covered with Custom Resources, in this post, I’m going to walk you through it.

Firstly, have a quick read of Overwrite & customize resolvers in the Amplify docs, it’s almost there but not quite comprehensive…


An iPad running Playtime Island being used by a child.

For the past five years BBC Children’s & Education have been building interactive games and experiences with JavaScript and HTML5. This enables us to ship games to any platform with a modern web runtime. We work with agencies to commission new games and experiences for the many brands that we have.

We have around 300+ games, some of which are distributed via our five mobile apps on iOS and Android and others are embedded across www.bbc.co.uk.


Newsround is one of the key propositions within BBC Children’s as a go-to news service for children.

Over the past 6 months we’ve transitioned Newsround away from a legacy, on-premise technical stack over to a serverless, cloud based infrastructure.

In this post I’m going to talk about the technical strategy behind migrating Newsround to the cloud and how we maximised re-use, reduced duplication, fostered collaboration, and shipped an entire product on a serverless platform from the ground up.

World Service Newsround prior to migration

For the past 3 years Newsround has been operating as a site hosted on our World Service platform, a part of BBC…


Asymptotic notation is a set of languages which allow us to express the performance of our algorithms in relation to their input.

There are three main notations for expressing the performance of algorithms, put simply they are:

  • Big-O — The worst case (upper bound).
  • Big Omega — The best case (lower bound).
  • Theta — The upper and lower bounds.

In this post I’m going to focus on how we can prove Big-O — as we often want to plan for the worst case running time of software, rather than the best.

Big-O through code

Lets take the following Python example which takes an…


Let’s talk about some of the internals of git and how it stores and tracks objects within the .git directory.

If you’re unaware of what the .git directory is, it’s simply a space that git uses to store your repositories data, the directory is created when you run git init. Information such as binary objects and plain text files for commits and commit data, remote server information and information about branch locations are stored within.

The key concept throughout this entire article is very simple — pretty much every operation you do in git creates objects with a bunch of…


Web optimisation is important; it’s how we make our websites fast — which in turn keeps our users happy and helps us to maintain a good SEO profile.

The way in which we build and optimise websites is driven by the foundation of data communication across the web: HTTP — the Hyper Text Transfer Protocol.

The first documented version of HTTP was HTTP/0.9 dated back to 1991. We’re now 25 years on and HTTP/2 is here. Nearly all major browsers support it and have done for some time.

In this article let’s talk about the state of web optimisation, the…


Let’s take a crash course on how we can build HTTP/2 ready applications in Node.js.

Firstly, many clients and browsers are not planning on implementing the ability to use HTTP/2 over plain-text, even though this is in the protocols specification. This notion comes as a wider community effort to move towards a more secure and encrypted internet by default.

For us however, this means if we intend on using HTTP/2 in production, we must supply a valid TLS certificate!

If you wish to use a valid TLS certificate which is signed by an authority and not self signed, I recommend…


Web servers supporting HTTP/2 can take advantage of a couple new features introduced as part of the new specification designed to improve how we deliver content over HTTP, and as a result, significantly improve the end user experience of our applications!

This article is based of H2O, a modern and fast HTTP/2 & HTTP/1 web server.

The main two features I’m going to cover here are Prioritisation and Cache-Aware Server-Push.

HTTP/2 is very different in implementation and design to that of HTTP/1.

HTTP/2 is a binary protocol which uses streams and frames in order to exchange data, every request made…


Moving directories is easy, on any command line flavour, it’s hardly the most complex command. The real trick is remembering where that all important directory is you need to get back to when you’ve moved up, down and sideways in your file system!

Have no fear, pushd and popd are here! Yep, command line directory systems have stacks too (obviously).

If you’re not familiar with what a stack is, or how it works, it’s simply a data structure, like a stack of plates. You place a plate on top of the stack, you take the plate off the stack, you…

Jacob Clark

Head of Platforms @ UK Home Office

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store