GOV.UK - Not Your Father's Stack

I'm not sure what I was expecting the stack GOV.UK used at launch to look like. Maybe some messenger owls and lots of cobwebs? But not so at all. So much not so I thought any organization looking at their own stack for ideas could learn something from the considered choices of others.

The diversity of technologies used was surprising. They use "at least five different programming languages, three separate database types, two versions of an operating system." Some may think of this as a weakness, but they think it a strength:

The reason we operate such a diverse ecosystem is that we are focused on solving real problems. Our first task is to understand the problem or need we are solving and then to choose the best tool for the job. If we restrict ourselves to moulding the need to the tools we already have, then we risk not solving the initial problem in the best way possible for the user. By restricting software diversity or enforcing rigid organisational standards on a project, there is a possibility of descending into a cargo cult, where we simply repeat the same patterns and mistakes in everything we make.

This "use the best tool no matter what" policy is outlined in a blog post Benefits of diversity. The only choice that wouldn't be found in a modern startup is the use of Skyscape as their cloud provider. I'm assuming this has to do with legal issues around data sovereignty as this is government site, but otherwise it's all straight out of standard modern web practice: monitoring, dashboards, continuous release, polyglot persistence, distributed source code control, etc. Good to see a government getting it.

What stack are they using? (it's a direct copy so feel free to read the original)

Frontend:

The core of the servers:

Redirection:

  • nginx deserves an extra mention as it’s letting us do all our redirection
  • we’re using perl to manage and test our redirections
  • there’s some php to add useful links to the “gone” pages where DirectGov and Businesslink content has been retired
  • node.js was used to build a side-by-side browser for reviewing the redirections

Applications:

Databases and other storage:

Monitoring, managing and alerting:

  • We gather metrics from our apps with statsd
  • We collect logs with logstash
  • We monitor systems with ganglia
  • Graphite helps us make many, many graphs to understand what’s going on
  • Nagios tells us if we need to act on any of that data

Supporting Tools:

  • All our code is tested by Jenkins, which we also use to deploy it to servers
  • We track usage of the site with Google Analytics, using their API heavily to build dashboards
  • We occasionally use New Relic RPM for performance reviews
  • DNS is hosted by ja.net / Dyn
  • Email (internal alerts) sending via Amazon SES
  • Font handling and preparation with FontForge and FontTools
  • We keep on track and in touch using Google Apps, Pivotal Tracker and Campfire
  • Github helps us manage and discuss our code
  • Zendesk keeps the feedback flowing
  • We use jekyll & heroku for some of our prototyping
  • We’ve built all sorts of internal dashboards. They’re very much our playground and you can find them written in a mixture of Ruby, Clojure, Node.JS, and PHP