Improving our Development Process
Since I joined Gengo last year, we’ve made many improvements to the engineering process. At that time, there was no configuration management for our infrastructure (e.g., Puppet, Chef, etc.), almost no automated tests and no monitoring or visibility into service health. Bugs were often found by users, or discovered days after code was shipped. As the team grew, however, we decided to lay down some foundational changes to mitigate these problems.
To begin, we started using Chef to make our infrastructure more reliable. Chef manages server applications using “recipes” to describe the state that you want your server to be in: applications you want installed, services you want running, files you want written.
You can also use recipes to provision virtual machines with another cool tool called Vagrant. Vagrant is a very convenient wrapper for virtual machine providers (e.g., VirtualBox) and enables you to have a development environment up and running in a couple of commands. Before Vagrant, we had a single machine that all of our engineers shared, and creating a new development environment was an involved manual process. We like to give new engineers the ability to commit code as soon as possible, and Vagrant has helped us do that.
We’ve also modified the way we write code. Now, instead of trying to refactor an entire codebase all at once (a long and grueling process), we refactor in pieces in order to ship new features more often. We’re also using various front-end technologies that have allowed us to reduce redundancy and simplify our code, such as Backbone.js, Coffeescript, Sass and Grunt.
On the testing side, we’ve started using a tool called Travis-CI, which allows us to run tests on every pull request and merge. We only merge pull requests if the build passes: if the build fails, we figure out the root cause and fix it. This has helped us prevent regressions and reduce the amount of bugs significantly.
Overall, these changes have resulted in a more stable coding environment for Gengo developers, as well as speed and usability improvements for our users. As developers, we’re also much closer to continuous integration and service-oriented architecture.
Looking to the future, we have many plans to further improve our infrastructure and software development process. We’ll be writing acceptance tests using Selenium, using a tool like Etsy’s Deployinator to deploy more easily and frequently, experimenting with new programming languages such as Go.
We’re constantly working to improve the quality, scalability and reliability of our service, and we hope that Gengo users have a more enjoyable and responsive experience using our site as a result.