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 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.