The document reads fine. Root cause identified, timeline reconstructed, five action items listed at the bottom. Everyone nods on the call. Then three months later the same incident happens again, and someone opens the old postmortem and finds four of those five action items were never touched.
This isn't a rare failure — it's the default outcome. Postmortems are excellent at explaining what happened and terrible at changing what happens next. The gap isn't analysis quality. Teams are usually pretty good at diagnosing why the database fell over or why the deploy went sideways. The gap is that the fixes live in a Google Doc nobody reopens, owned by "the team," due "soon."
What follows is a worksheet designed to close that gap specifically. Not a better root-cause method. A better conversion method — turning findings into owned, scheduled, verified work that actually reduces recurrence.
Why the action items always rot
Look at how the last five minutes of a postmortem usually go. The facilitator is tired, the incident's already resolved, and there's a hard stop because the next meeting is starting. Someone says "we should add retries to that service," someone else agrees, it gets typed into the doc, and the meeting ends. Nobody assigned it. Nobody defined what "done" looks like. Nobody put a date on it.
That's the whole problem in miniature. Three specific failure modes show up over and over:
-
No single owner. "The platform team will handle it" means nobody handles it. Shared ownership is a synonym for no ownership.
-
No acceptance criteria. "Add retries" could mean anything from a one-line config change to a full circuit-breaker redesign. Without a definition of done, the fix stays permanently ambiguous, which makes it easy to skip.
-
No scheduled check. The action item goes into a backlog and immediately loses to every feature request and customer escalation that shows up the next morning. It never resurfaces because nothing forces it to.
There's a fourth, quieter reason: postmortems try to fix everything. A messy incident generates twelve possible improvements, all of them get written down, and the sheer volume guarantees paralysis. Twelve unowned items convert worse than three owned ones. The unprioritized list is where good intentions go to die.
The core idea: timebox the analysis, then force conversion
Two moves fix most of this.
Stop losing track of your priorities.
Workyly helps you organize, assign, and track every task efficiently.
- Centralized task management
- Real-time collaboration
- Intelligent workflow automation
No credit card required
First, timebox the postmortem itself. Give the analysis a hard 45-minute ceiling. The reconstruction and root-cause discussion expand to fill whatever time you give them, and past a certain point you're not learning more — you're just re-litigating the timeline. Cap it. The last 15 minutes are reserved for conversion, and they're non-negotiable.
Second, nothing leaves the room without an owner, acceptance criteria, and a verification date. If an idea can't get those three things attached in the meeting, it doesn't become an action item. It goes into an "ideas" section with no follow-up obligation. This sounds harsh but it's the only thing that keeps the real list short and credible.
This is the same philosophy behind a good retrospective-to-action system that guarantees follow-through — capture is cheap, conversion is where the value lives. Postmortems just have higher stakes because the thing you failed to fix will page you again at 2 a.m.
The worksheet, section by section
Here's the structure. It's one page. Deliberately.
Top block: the incident facts
Keep this tight — it's context, not the point of the exercise.
-
Incident ID and one-line summary
-
Detection time vs. resolution time (this gives you your real "how long did it hurt" number)
-
Customer/operational impact in plain terms
-
Primary contributing factor (not five factors — the one that, if absent, would have prevented this)
That's it for the diagnosis. If your team can't agree on a single primary factor, list two, but stop there. The worksheet is not the place for a forensic novel.
Middle block: prioritized fixes
This is the heart of it. You brainstorm candidate fixes, then you cut the list before assigning anything. Score each candidate on two axes:
| Axis | Low (1) | Medium (2) | High (3) |
|---|---|---|---|
| Recurrence-reduction | Barely moves the needle | Prevents a variant of this | Prevents this class of incident |
| Effort to implement | Days of work | A few days | Hours to a day |
Multiply recurrence-reduction by ease-of-implementation (invert effort — a 1-day fix scores higher than a week-long one). Take the top 3. Maximum. Everything below the cut goes into the ideas note.
Most postmortems over-invest in the comprehensive fix and under-invest in the cheap one that stops 80% of recurrences. A quick alert threshold change often beats a three-week architecture rewrite in terms of recurrence-reduction per hour spent. Force yourself to see that by scoring it.
The scoring table is a forcing function. Without it, teams default to writing down whatever the most senior person in the room cares about most.
For each surviving fix: owner + acceptance criteria + date
Every one of your top-3 fixes gets a row with:
-
Owner — a named human. Not a team, not "TBD." If the right owner isn't on the call, you assign a placeholder owner whose job is to hand it to the real one within 48 hours and confirm the handoff.
-
Acceptance criteria — a testable statement of done. "Retries added" is not acceptance criteria. "Service X retries failed calls to Y up to 3 times with exponential backoff, verified by a forced-failure test in staging" is.
-
Verification date — a specific 30-day and, where relevant, 60-day check. Not "next sprint." A calendar date.
Bottom block: the verification schedule
At the bottom, list your 30-day and 60-day checks with the exact questions you'll answer:
-
30-day Is the fix implemented and merged? Did it meet acceptance criteria? (Yes/No — if no, why, and what's the new date?)
-
60-day Has the incident (or a close variant) recurred? If yes, the fix didn't actually address the root factor, and this goes back to analysis.
The 60-day recurrence check is the part almost everyone skips and the part that actually tells you whether you fixed anything. Implementation is not the same as prevention. You only know you prevented recurrence by watching for it and confirming its absence.
Here's a quick visual of the worksheet workflow.
Use it to guide the conversion steps.
A realistic walkthrough
A mid-sized ops team runs a small logistics platform — a couple dozen engineers, order volume in the low thousands per day. Their payment reconciliation job silently failed one weekend, and roughly 90 minutes of orders got stuck in a limbo state before anyone noticed. Support fielded a burst of "where's my confirmation" tickets and the team spent Monday cleaning up.
Their postmortem, run the old way, would've produced something like: add monitoring to the reconciliation job, refactor the job for idempotency, improve support runbooks, add a dashboard, alert on stuck-order counts, review the whole payment pipeline. Six items, all reasonable, all unowned, all "later."
Run through the timeboxed worksheet, the scoring cut it to three:
-
Alert on stuck-order count > 20 for 10 min. High recurrence-reduction, low effort. Owner: on-call lead. Acceptance: alert fires in staging when a synthetic stuck order is injected. 30-day check.
-
Add a heartbeat + failure alert on the reconciliation job. High reduction, low-medium effort. Owner: named backend engineer. Acceptance: job posts heartbeat every run; missed heartbeat pages within 15 min. 30-day check.
-
Support runbook for stuck orders. Medium reduction, low effort. Owner: support lead. Acceptance: documented steps, one support rep resolves a test case using only the runbook. 30-day check.
The idempotency refactor and full pipeline review went into the ideas note and became normal backlog candidates — not fake action items pretending they'd get done this quarter.
At the 30-day check, two of three were done and verified. The runbook slipped a week and got a new date. At 60 days, no recurrence. A small list that actually shipped, and a confirmed absence of the thing that hurt them.
The old way would have shipped maybe one of six items and nobody would have checked whether the incident came back.
The follow-through mechanism
Writing verification dates down is useless if nothing surfaces them on the day. This is the operational failure that kills the whole system: the worksheet is perfect and then the 30-day check just never happens because it lives in a doc.
The dates have to become real tickets with due dates and assignees the moment the postmortem ends — not "captured somewhere," but scheduled in whatever system your team actually looks at every day. Some teams handle this manually with a standing calendar reminder for whoever owns incident hygiene. Others wire it into their workflow tooling so the 30/60-day verifications get created automatically and land on the owner's board.
Create the 30-/60-day verification tickets immediately so they surface on the owner's task board and can't be quietly forgotten.
That's genuinely where lightweight automation earns its place — not doing the thinking, just making sure the check reappears on the right day so a human can't quietly forget it. The judgment stays human; the remembering gets offloaded.
Either way, the rule is the same: a verification date that isn't on someone's actual task list is a verification date that won't happen.
This pairs naturally with a delivery risk triage worksheet approach — same discipline of owners and scheduled follow-up ritual, applied before incidents rather than after.
When this makes sense — and when it doesn't
Use the full worksheet when:
-
The incident had real customer or revenue impact
-
The same class of problem has happened before, or plausibly will
-
Multiple teams touched the failure and ownership is genuinely unclear
Skip the heavy version when:
-
It was a one-off, low-impact hiccup with an obvious, already-shipped fix. A two-line note is fine. Forcing a full worksheet on trivial incidents trains people to hate the process, and a process people hate gets skipped.
This is a bad fit if your team can't or won't enforce the timebox and the three-item cut. Half-applying it — keeping the worksheet but letting the list balloon back to twelve unowned items — gives you all the ceremony and none of the benefit. Either commit to the discipline or don't bother.
The one thing to get right
If you take a single change from this: never let a fix leave the room without a named owner and a calendar date for verification. Everything else — the scoring, the acceptance criteria, the two-block layout — is refinement. That one rule is what separates a postmortem that reduces recurrence from a postmortem that just documents it.
Most teams already know their action items don't get done.
They just don't have a mechanism that makes not-doing-them visible. The 60-day recurrence check is exactly that — it drags the unfinished fix back into daylight and asks, plainly, did this happen again?
A "yes" is not a failure of the worksheet. It's the worksheet doing its job — telling you the fix wasn't real, before the next 2 a.m. page tells you the same thing louder.
Ready to boost your team's productivity?
Join 5,000+ teams using Workyly to streamline workflows, improve communication, and deliver projects faster.