open atlas
↑ Back to track
Defensive Security BLUE · 02 · 04

Postmortems and learning

A blameless postmortem trades the name of who fumbled for the name of the system that let them. It exists to ship corrective actions with owners and dates — not a verdict. If it produces blame, it produced nothing.

BLUE Senior ◷ 18 min
Level
FoundationsJuniorMiddleSenior

Three weeks after a breach, you open the incident doc to find one line under “root cause”: “On-call engineer pushed a config change that disabled MFA on the admin SSO app.” The fix listed is “Reminded the team to be careful with SSO config.” Case closed. Eight months later it happens again — different engineer, same console, same flag, same dialog with no confirmation step and no review gate. The first postmortem found a culprit and called it a cause. It named a human and left the machine that let one click strip MFA from every admin untouched. That second incident was authored the moment the first review stopped at a name.

By the end of this lesson you’ll know why a blameless postmortem produces durable corrective actions while a blame-driven one guarantees the repeat — and what separates a “root cause” from the person who happened to be holding the keyboard.

Why blameless is an engineering choice, not a kindness

Calling a postmortem “blameless” sounds like an HR nicety. It isn’t. It’s the precondition for getting accurate data, and accurate data is the only input from which a real fix can be derived.

The mechanism is simple and brutal: people who fear punishment hide. NIST SP 800-61, the federal incident-handling guide, is built around a final phase — post-incident activity, the “lessons learned” — whose entire value depends on participants telling you what actually happened, in what order, with what they believed at each step. The instant the review can end someone’s quarter, that flow of truth dries up. The on-call engineer stops volunteering “I wasn’t sure the runbook was current, so I improvised,” and you lose the single most load-bearing fact in the whole timeline. You can’t fix a system you can’t see, and fear makes the system invisible.

So blameless is not “we forgive the engineer.” It’s “we assume any competent person, dropped into the exact same context — same tools, same alerts, same time pressure, same stale docs — could have made the same move.” That reframing is the whole trick. It converts the question from who is bad at their job (unanswerable, unfixable, and a lie — the person is usually your best engineer, which is why they were on-call) into what about the environment made the wrong action easy and the right action hard (answerable, and fixable in code, config, and process).

The senior tell is the verb. “The engineer forgot to scope the credentials” stops at a person. “The deploy tool defaulted to broad credentials and offered no warning when a change widened MFA scope” indicts a system you can change tomorrow. Same incident, two different futures.

Why this works

Why does blame feel so satisfying and work so badly? Hindsight bias. Once you know the outcome, the missed signal looks obvious — “how did they not see it?” — so the human error reads as the cause. But at decision time that signal sat in a wall of fifty other alerts, the dashboard was green, and the runbook was eighteen months stale. Blame is the brain pattern-matching a complex system failure onto a single nearby human because that’s cognitively cheaper than mapping the actual chain. It feels like an explanation. It explains nothing, and it fixes nothing.

Root cause is a chain, not a name

The phrase “root cause” misleads juniors into hunting for the one thing. Real incidents are a chain of latent conditions that lined up — what safety engineering calls the Swiss-cheese model: several holes in several layers happened to align, and the hazard passed through all of them at once. Stop at the first hole you find and you patch one slice while the rest stay open.

The discipline is to keep asking “and what allowed that?” until you reach conditions you can actually change — and to branch, because there is rarely a single line. Take the MFA incident:

  • MFA got disabled on the admin app. → Why? A config change flipped the enforcement flag.
  • Why did one change flip it? The console let a single operator toggle MFA enforcement with no confirmation and no second approver.
  • Why did nobody catch it for hours? There was no alert on changes to authentication policy — the SIEM logged it but no rule fired.
  • Why was the operator changing SSO config by hand at all? The documented path was broken, so manual console edits were the de facto runbook.

Notice none of the real causes is “the engineer.” They’re a missing confirmation gate, a missing four-eyes control, a missing detection rule, and a broken automated path. Each is a corrective action with an owner. The human is the last hole in the cheese, not the cheese. Map this against MITRE ATT&CK while you’re at it: tagging the incident’s techniques (here, Modify Authentication Process, T1556) tells you which detections you were blind to — and feeds the gap straight into your detection backlog instead of letting it evaporate.

Corrective actions: the only output that counts

A postmortem that ends with “we discussed it and everyone learned a lot” produced nothing. The deliverable is a list of corrective actions, and a corrective action that survives contact with reality has four properties, or it’s theatre:

  1. Specific — “harden SSO” is a wish. “Require a second approver and a typed-confirmation step for any change to MFA enforcement policy” is an action.
  2. Owned — a named person, not “the team.” Unowned actions are the ones still open at the next incident.
  3. Dated — a real due date, tracked in the same system as feature work (Jira, Linear), not buried in a doc nobody reopens.
  4. Verifiable — you can prove it shipped. “Added an alert” → there’s now a rule that fires on auth-policy changes, and you tested it with a synthetic change.

The hierarchy matters too. Actions that remove the failure mode beat actions that catch it faster beat actions that remind humans to be careful. “Reminded the team” is the weakest possible control because it relies on memory under pressure — the exact thing that already failed. Prefer eliminate (make the dangerous toggle impossible without approval) over detect (alert when it happens) over educate (tell people not to). Education is the floor, never the fix.

Pick the best fit

A config change disabled MFA on your admin SSO app and went unnoticed for hours. The postmortem needs a corrective action. Which is the senior choice?

Closing the feedback loop builds resilience

The point of all of this is the loop. NIST’s lessons-learned phase isn’t a closing ceremony — it feeds the next round of preparation. Each incident is a free, expensive lesson about exactly where your system is weak; resilience is the property of an organization that converts those lessons into permanent changes faster than new weaknesses appear.

That loop has teeth only if three things hold. The actions get tracked to done — an action item that’s still “open” at the next quarterly review is a corrective action that didn’t correct anything. The model gets re-run — the gaps you found (the missing alert, the broken automation) flow back into detection rules, threat models, and runbooks, so the system that handles incident N+1 is measurably better than the one that handled N. And the learning gets shared — the postmortem is read beyond the team that wrote it, because the same broken pattern (a privileged toggle with no gate) almost certainly exists in three other consoles you haven’t looked at yet.

Order the steps

Order the post-incident learning loop, from immediate aftermath to durable improvement:

  1. 1 Recover and confirm the incident is fully resolved before reviewing it
  2. 2 Run a blameless review: reconstruct the timeline from people who feel safe telling the truth
  3. 3 Trace root cause as a branching chain until you reach changeable systemic conditions
  4. 4 Write specific, owned, dated, verifiable corrective actions
  5. 5 Track actions to done and feed the gaps back into detection, threat models, and runbooks
Quiz

A postmortem lists root cause as 'engineer forgot to scope the deploy credentials' and the fix as 'reminded the team.' What's the core failure of this review?

Quiz

Why is psychological safety a prerequisite for an accurate root-cause analysis, not just a nice-to-have?

Recall before you leave
  1. 01
    Explain why 'blameless' is an engineering requirement for root-cause analysis, not just a kindness, and what reframing it forces.
  2. 02
    What makes a corrective action durable, and why is 'remind the team' the weakest possible one?
Recap

A blameless postmortem is an engineering instrument, not an HR ritual: it assumes any competent engineer dropped into the same context — same tools, alerts, pressure, and stale docs — could have made the same move, because that’s the only assumption that keeps people telling you the truth, and the truth is the data your fix depends on. Root cause is never a name; it’s a branching chain of latent conditions (the Swiss-cheese model), and you keep asking “and what allowed that?” until every branch lands on something you can change — a missing approval gate, a missing detection rule, a broken automated path. The only output that counts is corrective actions that are specific, owned, dated, and verifiable, ranked eliminate over detect over educate, with “remind the team” as the floor rather than the fix. Then you close the loop: track the actions to done, feed the gaps back into detections (tagged against MITRE ATT&CK) and threat models, and share the lesson, because resilience is the property of an org that turns expensive incidents into permanent changes faster than new weaknesses appear. The next time you read a postmortem whose root cause is a person and whose fix is a reminder, you’ll know you’re looking at the cause of the next incident, not the last one.

Practice

Start at the top. Tasks go easiest → hardest: recall a fact, apply it to a case, then a senior-level stretch. Open one, attempt it, then reveal.

recallapplystretch0 of 6 done

Something unclear?

Ask a question about this lesson. Questions are anonymous and go straight to the author to make the lesson better.

shortcuts expand
search
K
prev piece
k
next piece
j
cycle tier
t
this menu
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.