Technology Stack


Our technology choices have been driven by a desire for reliability and no surprises. We believe a production system is the last place you want excitement, and don’t want to work out-of-hours fixing things. This means we’ve gone for tried and tested runtimes, languages and deployment methods, but used them in imaginative ways so they’re as productive as anything else available.

This has paid off. We’ve only had a few minutes downtime in all the years we’ve been hosting applications for our customers, and it’s quick and easy to build new features and extend existing capabilities.

We’ve taken a polyglot approach, using the best language and approach for each task, with the majority of the application running on the JVM. The platform is mainly written in JRuby, Java and JavaScript, with our custom object store implemented as C++ extensions to PostgreSQL. Our infrastructure and deployment tools are written in Python.

Our products and client specific customisations are implemented as server-side JavaScript plugins, which script the rest of the platform. As we build custom applications, we refactor to extend the platform, making future development even easier and faster.

We host the application on our own hardware for control and performance, and because our customers have strict security requirements. We have automated deployment, using Puppet controlled by our own deployment scripts. We can bootstrap a new server or development VM in minutes, with cryptographic assurance that we’re running the code we intend to run. Deploying a new version is one command to publish it, and another command to deploy it, and we release a new version every few days.

But the thing we’re most proud of is the quality of our work. We’ve treated every single bit of feedback and support request as a bug report, and fixed it. This dedication to quality and the user experience mean our users are delighted with our work, don’t need to call us for help, and are a pleasure to work with.