Runbooks vs Automation: When to Write Instructions and When to Just Automate It
There's a particular meeting that happens on most engineering teams eventually. Someone proposes writing a runbook for a recurring manual task, and someone else says, why are we writing instructions for a human to follow when we could just automate this instead. Both people are usually right, just about different situations, and the team that can tell the difference tends to waste a lot less time than the one that treats every operational task as either "automate it" or "document it" by default.
The Real Question Isn't Automation Versus Documentation
I used to think of this as a binary choice. It isn't. The actual question is whether a task is stable and well understood enough to automate safely, or whether it still requires enough judgment that a human genuinely needs to be in the loop, at least for now. Runbooks are what you write for that second category, and automation is what eventually replaces the runbook once the task has been done manually enough times that its edge cases are actually known.
Skipping straight to automation on a task nobody fully understands yet is how you end up with a script that quietly does the wrong thing at 3 a.m. because it hit a scenario nobody anticipated.
Why Premature Automation Is Its Own Kind of Technical Debt
There's a specific failure mode I've seen play out more than once. A team automates a deployment step early, before anyone's really sure what all the failure scenarios look like. The automation works fine for months. Then something unusual happens, an edge case the automation wasn't built to handle, and because there's no runbook anymore, no human process to fall back on, the team is left debugging a black box under pressure instead of following known steps.
This is part of why containerized, consistent environments matter so much before you start layering heavy automation on top. When your deployment target behaves predictably every time, automation has a much smaller surface of unexpected scenarios to handle badly. The case for building that consistency first is laid out well in this piece on docker before deployment automation, and it's a sequencing argument worth taking seriously, not just a general best practice.
Good Runbooks Are Written for the Person Who's Panicking
A runbook that assumes calm, careful reading isn't actually useful during an incident, because nobody reads calmly at 2 a.m. with an outage in progress. The best runbooks I've seen are blunt, numbered, and free of unnecessary context. Step one, step two, step three. Explanations of why can live somewhere else, linked if someone wants them later, but the runbook itself should be something a half asleep engineer can follow without having to think too hard.
Infrastructure Changes Deserve Their Own Version of This Debate
The same tension shows up in how teams manage infrastructure changes. Some teams document a manual process for updating configuration. Others fully automate it through a reconciliation system that applies changes directly from version control. Once a team has enough confidence in a specific category of infrastructure change, the second approach tends to be considerably more reliable than a human following a written procedure, since it removes the chance of a step being skipped or performed slightly wrong under time pressure.
This shift, from manually documented infrastructure changes toward fully automated, Git driven reconciliation, is really a maturity curve more than a single decision, and it's explored well in this comparison of gitops as automated infrastructure discipline, which is worth reading as a roadmap for when your team's manual runbooks are ready to become genuine automation.
Security Runbooks Are the Last Thing You Should Fully Automate
Security incident response is one area where I'd push back on rushing toward full automation, even when the technology genuinely allows it. Automatically rotating credentials or isolating a compromised system sounds appealing until you consider the cost of the automation getting it wrong, locking out legitimate access during an actual crisis, or missing context a human would have caught immediately.
There's a reasonable middle ground here, automating detection and initial triage while keeping a human explicitly in the loop for consequential response decisions. This balance is discussed thoughtfully in this comparison of devsecops and where human judgment stays essential, which is a useful reference for teams tempted to automate security response faster than their confidence in the automation actually warrants.
Who Decides What Gets Automated, as Teams Grow
In a small team, this decision happens informally, whoever's closest to the pain decides whether to write a runbook or build automation. That informality stops scaling once an organization has many teams independently making similar decisions, often inconsistently, sometimes duplicating automation efforts that could have been shared.
Centralizing this decision making, or at least the underlying tooling, within a dedicated platform function tends to produce more consistent, better tested automation than each team building their own version independently. This organizational shift is covered in more depth in this comparison of platform engineering and shared automation, which is worth a read if your organization has multiple teams quietly maintaining nearly identical runbooks or scripts without realizing it.
A Rough Rule of Thumb
If I had to boil this down to something simple, it would be this. Write a runbook first, for anything new or poorly understood. Watch how it actually gets used over a few real occurrences, incidents, deployments, whatever the task is. Once the steps have stopped surprising anyone, once the edge cases are genuinely known, that's when automation earns its place. Automating too early just moves the uncertainty from a human following imperfect instructions to a script failing silently in ways nobody's watching for.
Final Thought
Neither runbooks nor automation are inherently the more mature choice. The maturity is in knowing which one a given task actually needs, right now, and being honest when a task you automated early is actually still generating enough surprises that it needs a human back in the loop for a while longer. That kind of honesty is harder to practice than it sounds, but it's usually what separates a team that trusts its own pipeline from one that's quietly afraid of it.