When the servers responsible for delivering an application to end users can be numerous or few at any given time respective of the current workload the application is experiencing, special concerns must be taken to ensure development doesn’t grind to a halt whenever the simplest of changes are ready for production. When the people responsible for said servers are few and concerned with what’s more important to them, serving end users, operations can’t grind to a halt because of an infrastructure upgrade.
Automation delivered from these issues; automation of development environment provisioning so that each developer involved with the project had an identical platform for his or her work, and automation of production environment provision so that infrastructure upgrades and complex deployments happened with the click of a single button. The former leveraged Vagrant, a virtual machine orchestration tool, to package all of the configuration and tools specific to the client’s environment into a single, easily distributed archive. The latter leveraged Cloudformation templates to describe ‘what’ the client’s architecture should be, forgoing ‘how‘ the architecture should come to be, the more laborious of the two. To tie the development and production together, each development environment included a customized Git command capable of deploying changes to production in a manner no different than the development team’s usual Git workflow.
Operational overhead often brought on by the sort of complex architectural decisions in this project were avoided with single-click deploys and homogeneous development environments. Development continued free of doubts about each developers’ configuration and platform, effacing the “Well it worked on my machine!” problem should someone’s work break in production. Operations gained 100% insight into the exact configuration of any element in the production stack at any given time by consulting the most recent template that deployed the stack. Infrastructure became versionable which helped diagnose and identify any infra-related issues by providing a veritable audit trail of infrastructure changes.