You rely on us, and we take that responsibility very seriously. Learn about our high-level software development and deployment processes below.
Behavior-Driven Development (BDD)
Before any code is produced, we write automated acceptance tests to ensure code is bug-free (or close to, at least!). Acceptance tests define, for each feature, who the feature is to be used by, the goal of the action being taken, the steps taken to complete the action, and the expected outcome. Put simply, these acceptance tests automate the process of testing our software just as an end user would use it, resulting in rock-solid, dependable software.
Continuous Integration and Code Staging
We use a dedicated Continuous Integration (CI) server to run our automated test suite. We have it configured to run the relevant tests any time a commit is pushed to our git repositories, as well as once daily. We keep a dashboard visible on a dedicated screen at all times, so we can see at a quick glance if any tests are failing. Once a build is ready and passing, it is deployed to a staging server where it can be tested by end users for final QA checks before going live.
We automate the configuration of our load-balanced cloud servers. Used in combination with auto-scaling tools, this allows new server instances to be spawned and automatically configured in minutes, allowing us to rapidly scale our infrastructure in the event of sudden growth to minimize slowness and downtime.
We deploy rapid updates to our software using an automated deployment tool that allows us to deploy code and database changes at the push of a button. Hot fixes and small tweaks are deployed daily and new feature releases every week or two.