What belongs in a runbook nobody reads

The runbook that gets written and the runbook that gets used are different documents, and most teams only write the first one.
The written one describes the system. It has an architecture summary, a paragraph about why the queue was chosen, a diagram, and a numbered list of diagnostic steps that begins with "check the logs". It reads well. Somebody approved it in a pull request. It is a reasonable piece of work.
The used one gets opened at 3:14 in the morning by an engineer who was asleep nine minutes ago, on a phone hotspot, while a customer-facing page returns errors and a manager is typing "any update?" into a channel. That reader has about ninety seconds of usable attention before they abandon the document and start guessing.
Nearly nothing in the first document is useful to the second reader. So write for the second one.
Put the mitigation in the first line
Before the description. Before the diagram. Before any sentence that begins "this service is responsible for".
The first thing on the page should be how to make the damage stop, stated as an action. Turn off the feature flag. Route traffic back to the previous version. Scale the worker to zero. Disable the integration. Whatever the simplest fix is, name it, and say what it costs to use it, because the responder needs to know whether using that fix loses data or just loses a feature.
This ordering feels wrong to engineers, and I understand why. It puts the crude fix above the correct one, and it feels like encouraging people to act without understanding. But the responder is going to act without full understanding regardless, because that is what an incident is. The choice is whether they act on the documented simple fix or on their own improvised guess at half past three.
Understanding comes second. Stopping the damage comes first.
Give exact commands, not descriptions of commands
"Check the queue depth" is not a step. It is a task assigned to someone who is already overloaded.
The step is the command, in a code block, with the real host name and the real flags, ready to paste. If part of it varies, mark that part clearly and say exactly where the value comes from and what a normal value looks like. If a command needs credentials or a VPN, say so before the command rather than after the reader has tried it and got a permission error.
This is unexciting work and it is where most of the value is. Under pressure people retype commands wrong, misremember flag names, and pick the wrong environment. A runbook that removes typing removes a whole class of mistakes, including the worst one, which is running the right command against production when you meant staging.
Say how to know it worked
This is the step almost every runbook omits, and its absence causes the second mistake in most incidents.
The responder runs the command. Then what? Which graph should move, in which direction, and within how long? Is thirty seconds of no change normal, or does it mean the action failed? If nothing has changed after two minutes, what is the next thing to try?
Without that, you get an engineer staring at a dashboard, unsure whether to wait, run it again, or escalate. Running it again is often harmful. So write the confirmation signal next to every action: "error rate on the checkout dashboard should fall within about sixty seconds; if it has not moved after two minutes, the flag did not propagate and you should do X instead."
Name the people, and name the threshold
Every runbook should say who to wake and what each of them actually knows. Not a role, a person, with the specific area: "Priya knows the payment reconciliation job. Marcus set up the queue configuration."
Then give the condition that justifies waking them, in plain terms. Responders left to judge this themselves almost always wait too long, because nobody wants to be the person who woke a colleague over something small. If the document says "if customer data may have been written incorrectly, wake someone immediately regardless of the hour", the decision is already made and the responder is free to act.
What to cut
Architecture explanations. Design history. The reasoning behind the retry policy. Anything written to satisfy a reviewer rather than a responder. All of that is genuinely useful and belongs in a design document that someone reads on a Tuesday afternoon.
Also cut any step that says "investigate the root cause". That is a description of the entire job, written as if it were an instruction. If you know the likely causes, list them as specific checks with specific commands. If you do not, say honestly that this failure mode has not been seen before and here is who to call.
The reason to cut is not tidiness. Every extra paragraph pushes the useful line further from the top of the page, and position on the page is what matters most for a reader who is scanning rather than reading.
Test it the only way that works
Hand the runbook to someone who has never worked on that system. Break the thing in staging. Ask them to follow the document while you sit there and say nothing.
Every question they ask out loud is a defect. "Where do I find that dashboard?" is a defect. "Which environment is this?" is a defect. "Is this the same as the other queue?" is a defect. Twenty minutes of this finds more problems than a year of review comments, because a reviewer reads the document and a responder uses it, and those produce completely different failure lists.
Staying silent is the hard part. Every instinct will tell you to help.
Why this matters more on generated systems
Here is what changed, and it is the reason we keep returning to this topic.
A hand-written system depends on a lot of undocumented operational knowledge held in people's memory. Someone remembers that the retry limit is three because of a rate limit at a payment provider in 2024. Someone knows the nightly job is slow on the first of the month. That knowledge is easily lost and held by few people, and it is real.
On a largely generated system, that memory was never formed. Nobody sat with the retry logic long enough to build an intuition about it. The 2025 DORA report, drawn from around 5,000 respondents, found AI adoption relating positively to throughput and negatively to delivery stability, with the direct summary that "AI doesn't fix a team; it amplifies what's already there". A team whose operational knowledge was already held by one person, producing three times the change, now has three times as much to know and still only one person who knows it.
So the runbook stops being a convenience for whoever is on call. It becomes the only place the knowledge exists. Write it while the feature is being built, when someone still remembers what the failure modes were, rather than after the first incident teaches them.
The same argument appears in handing over AI-written software, and the wider version of the problem is in how to take over a codebase you did not write.
The part about going out of date
A runbook describing a system that changed six months ago is worse than nothing, because somebody will follow it. They will run a command against a service that was renamed, or disable a flag that no longer controls anything, and lose four minutes they did not have.
Three habits keep them accurate. Link the runbook directly from the alert that fires, so it is opened often enough for errors to appear. Review it in the write-up every time an incident uses it, while the gaps are still remembered. And delete runbooks for systems that no longer exist, without discussion.
Do not try to keep a large library current. Keep a small one current instead. Coverage of everything, accurate about nothing, is the state most documentation ends in, and it is worse than a short collection you trust. The related discipline for the checks themselves is in when evals give false confidence, which is the same failure in a different form: a document or a test suite that passes because nobody has questioned it.
Thanks to the on-call engineers who told us which runbooks they gave up on and at what point. It was almost always the same point, about four paragraphs in, when it became clear the document was going to explain the system before it told them what to do.
A runbook is an instruction to a frightened person, and it should read like one.
Related guide: Handing over AI-written software.
Sources
- 2025 DORA report announcement, Google Cloud: around 5,000 respondents; AI adoption relates positively to throughput and negatively to delivery stability, and amplifies a team's existing strengths and weaknesses.


