Infrastructure as code: a practical guide
It comes up on almost every project, usually later than it should. This guide covers what infrastructure as code actually involves, where it usually goes wrong, and how to tell whether yours is in reasonable shape.
The bill is a design document: it tells you exactly what your architecture actually does. Nothing below assumes a large team or a large budget — most of it is a decision somebody has to make and then write down.
The reason this keeps coming up
Clicking around a console is not a reproducible environment. Where this goes wrong is almost never a lack of knowledge. It is worth deciding this deliberately rather than inheriting whatever the last person set up.
For most businesses the question is not whether this matters but how much of it is worth doing right now. That depends on what you are trying to achieve in the next few months, not on best practice in the abstract. None of that requires a large budget, only a decision and someone to own it.
What good looks like
Review infrastructure changes the same way you review code. Getting it slightly wrong is survivable. Ignoring it entirely is not. The teams that stay on top of it are the ones who put it on a calendar rather than a wish list.
Cloud work rewards teams who automate early and punishes teams who click through consoles. The version that works in practice is usually less elaborate than the version described in the guides.
Rebuilding from scratch should be a routine operation. That sounds obvious written down. It is still the thing most often skipped. Write the reasoning down alongside the decision, because the reasoning is what changes first.
A working checklist
If you want a quick read on where you stand, work through this. Anything you cannot answer confidently is where to start.
- Clicking around a console is not a reproducible environment
- Review infrastructure changes the same way you review code
- Rebuilding from scratch should be a routine operation
- Someone is named as the owner, not just assumed to be
- There is a date in the calendar to review it again
- The decision and the reasoning behind it are written down somewhere findable
- You could explain the current setup to a new hire in five minutes
Common failure modes
The most common failure is not doing this badly. It is doing it once, during a launch, and never revisiting it. Circumstances move, the setup does not, and the gap widens quietly until something breaks or somebody notices the numbers.
- It was configured during a launch and has not been touched since
- Different people in the business believe different things are true about it
- There is no way to tell whether the last change helped or hurt
- The only person who understands it has left, or is about to
Operability is a feature, and it has to be built rather than bought. That sounds obvious written down. It is still the thing most often skipped.
How we approach it
On our projects this gets handled during the build rather than added afterwards, because retrofitting it costs several times more than including it. We write down what was decided and why, so the next person to touch it is not guessing.
If you are working with someone else, the questions worth asking are simple: who owns this, how will we know it is working, and what happens when it needs to change?
What to do next
Pick the single item from the checklist above that would cause the most trouble if it turned out to be wrong. Fix that one, confirm it worked, then move on. Worth checking on your own setup before it becomes someone else's problem to fix.