DevOps Mindset

Module 07 of 12

Failure Is Normal: Blameless Postmortems

You cannot fix what people are afraid to admit happened. Blame doesn't prevent the next incident — it just guarantees you won't hear about it honestly.

10 min read

Every complex system fails eventually. That's not pessimism, it's a property of complexity: enough moving parts, interacting in enough unanticipated ways, over a long enough time, will eventually produce a combination nobody designed for. DevOps culture doesn't try to pretend this away with more process or more caution. It starts from accepting it as a fact and asks a more useful question: when the failure happens — not if — how do we make sure the organization actually gets smarter from it, instead of just finding someone to blame and calling it closed?

Why blame is actively counterproductive

Imagine an incident review where the explicit or implicit goal is figuring out whose fault it was. What happens to everyone's incentives in the room? The engineer closest to the mistake has every reason to minimize their own role, omit inconvenient details, or frame their actions in the most defensible light — not because they're dishonest, but because that's the rational response to a process that's about to assign them blame. The result is a postmortem document that looks thorough but is actually missing the most important information: the small, human, in-the-moment reasoning that led someone to believe their action was safe at the time.

That reasoning is exactly what you need in order to prevent a recurrence. "The engineer made a mistake" is never, by itself, an actionable finding — of course a human made a mistake, humans always eventually will. The actionable finding is *why the system made that mistake look reasonable in the moment*: a confusing dashboard, a missing safeguard, an ambiguous runbook, an alert that cried wolf so often it got ignored. Blame culture systematically hides exactly the information needed to fix those things, because admitting "I saw the warning sign and didn't think it mattered" is dangerous to say out loud in a blaming environment, and completely fine to say out loud in a blameless one.

Where this practice comes from

The term "blameless postmortem" entered mainstream DevOps vocabulary in 2012, when John Allspaw — by then CTO of Etsy, and one of the two speakers from the original 2009 Flickr deploys talk — published "Blameless PostMortems and a Just Culture" on Etsy's engineering blog. Allspaw built the idea on researcher Sidney Dekker's concept of a "Just Culture": a way of balancing genuine accountability with the recognition that punishing individuals for good-faith mistakes just teaches everyone to hide mistakes, not to stop making them. The post was influential enough that four years later Google codified the same approach in its Site Reliability Engineering book, and "blameless postmortem" became standard vocabulary across the industry.

The goal of a postmortem is not to find who to blame. It's to find what about the system — the tooling, the process, the safeguards, the information available in the moment — allowed a reasonable person to make a mistake that caused harm.

Case study: Knight Capital, $440 million in 45 minutes

Case Study

Knight Capital Group — August 1, 2012

Knight Capital was a major U.S. market-making firm. On the morning of August 1, 2012, it deployed a routine-looking software update meant to support a new NYSE trading program. The rollout went to eight production servers — but the deployment missed one of them, which was still running old, deprecated code that had been left in the codebase for years, disabled behind a flag that the new update accidentally re-activated. Within 45 minutes, that one server had placed millions of unintended trades, moving hundreds of millions of dollars, at a rate later estimated near $10 million a minute. By the time the system was manually shut down, Knight Capital had lost roughly $440 million — enough to threaten the survival of a 17-year-old firm before lunch. Investigators later found that Knight's staging/test environment didn't fully mirror all eight production servers, so the exact failure mode — old code left active on one specific unpatched machine — was never something the deployment process had been tested against.

Source: Henrico Dolfing, "Case Study 4: The $440 Million Software Error at Knight Capital"

It's tempting to read this story and look for the one person to blame — whoever ran the deployment that day. That instinct is exactly the trap this module is about. The engineer who deployed to eight of eight intended servers wasn't being careless in any meaningful sense; they followed the process that existed. The real causes were structural and had been accumulating for years before that morning: dead code was never removed from the production codebase, the deployment process had no automated verification that every server actually received the update, the staging environment didn't mirror production closely enough to catch this exact scenario, and there was no fast, automatic kill-switch — it took 30 to 45 minutes from the first alert to a full manual shutdown, and at $10 million a minute, that gap was the actual cost driver.

A blameless postmortem on this incident wouldn't stop at "someone forgot to deploy to one server." It would ask the more useful, more uncomfortable questions: why was it possible for a deployment to silently miss a server with no automated check catching it? Why did dead code sit in production for years, live enough to be reactivated by accident? Why did it take 30–45 minutes to detect and stop catastrophic, obviously-wrong trading activity? Every one of those is a fixable system property. "The deploy engineer should have been more careful" fixes nothing, because the next engineer, doing everything the same reasonable way, would hit the same gap.

One small changeeasy to isolate, fast to detectsmall blast radiusMany bundled changeshard to isolate, slow to detectlarge blast radius
Small, contained changes limit how much damage a single mistake can do — and how long it takes to detect.

What blameless actually means in practice

  • It does not mean no accountability. Blameless is about how the organization responds to a mistake, not about pretending the mistake didn't happen or that no one should ever be responsible for anything. Repeated, willful negligence is a different conversation from a good-faith mistake.
  • It means describing actions neutrally in the timeline ("the engineer ran command X, believing Y") rather than judgmentally ("the engineer carelessly ran command X").
  • It means the person closest to the incident is treated as the best source of information about it, not a suspect being interrogated — because they're the one who can explain what made the mistaken action look reasonable at the time.
  • It means the output is specific, actionable changes to the system (an automated check, a better alert, a changed default) — not a warning to "be more careful next time," which isn't a fix at all.

Think it through

Real situations, no single "correct" checkbox — reason about it first, then compare your thinking to ours.

Scenario 1

During an incident review, a manager asks, in front of the whole team, "Who ran the command that caused this?" The engineer who did it goes quiet and gives a vague, defensive answer. The meeting moves on without ever establishing what information was on their screen at the time or why the action seemed safe.

What did this postmortem process fail to capture, and why does it matter?

Scenario 2

A postmortem concludes with a single action item: "Remind engineers to double-check server lists before deploying." Six months later, a very similar incident happens again, on a different service, with a different engineer.

Why did this recurrence happen despite the action item being implemented (the reminder was, in fact, added to a checklist)?

Check your understanding

Answer all questions, then submit to see explanations.

1. Why does blame make postmortems less effective, according to this module?

2. Who first brought "blameless postmortems" into mainstream DevOps use, and building on whose research?

3. In the Knight Capital case, what was the deeper, structural root cause behind the $440 million loss?

4. Which of these is NOT what "blameless" means in a blameless postmortem?