The so-called writings of Michael Gorsuch.

Automate Your Development Environments. Please.

[note: much of this is inspired from what I’ve learned from my peers at Heroku. If this sounds like your kind of place, we are hiring.]

Your team’s development environments should be managed by automated processes: you should be able to fabricate a clone of production in a manner of minutes. If your team has to invest days in the setup of an environment only to have everyone drift apart a few weeks later, you are probably doing it wrong.

Give strong consideration to employeeing the likes of Vagrant (or something similar) in your environment. If you rely on AWS, put something like CloudFormation to use.

Your production, staging, and development environments should be managed by something like Chef or Puppet (or something else, but whatever you do, don’t roll your own). No one-off machines. As much as I love the variety and differences among my peers, I find it intolerable in systems. And so should you.

If you do this, your development team will be able to walk in each morning and boot a complete development cloud. As each system boots, it will execute the same build procedures as used in production, thus allowing those procedures to be put to the test several times a day. Problems and bad practices will make themselves known quickly. Your development environment will be regularly refreshed, preventing the dreaded drift that plagues so many. Even better, you will be working on an environment that mirrors production, thus eliminating the very cause of most “cowboy” behavior.