What a good incident postmortem template looks like

An incident postmortem is not a report you write because someone asked for one. It is the only document a team produces after things go wrong that is actually read by the people it is meant to help, if it is built right. Most are not built right. They get written fast, filed away, and never opened again, because the template asked the wrong questions or asked them in a way that made people defensive instead of specific.
When we scope a build for a client, we look at how they run postmortems before we look at almost anything else in their engineering process. It tells us more about how a team will behave under pressure than their architecture diagrams do. A team with a clear, blameless postmortem habit tends to fix the same problem once. A team without one fixes the symptom, repeatedly, for years.
Here is what a postmortem template needs to do its job: four sections, in order, each earning its place.
1. The timeline
The timeline is the spine of the whole document. It is a plain, chronological list of what happened, in the order it happened, with timestamps. Not what someone thinks caused the incident. Not who is responsible. Just: at this time, this was observed; at this time, this action was taken; at this time, service was restored.
Resist the urge to summarize here. Write "14:02 UTC: deploy of payment-service v2.14 completed" and "14:09 UTC: error rate on /checkout climbs from 0.1% to 12%" as separate lines, even though the connection between them looks obvious in hindsight. The value of a full timeline is that it often reveals an earlier point where the incident could have been caught, one that the summary version would have skipped past.
A timeline with real timestamps also does something a narrative summary cannot: it lets a second reader, someone who was not in the incident channel, independently check whether the response was as fast as everyone remembers it being. Memory compresses time under stress. The clock does not.
2. Blast radius
Blast radius answers one question precisely: who and what was actually affected, and for how long. Not "the checkout flow was degraded." Instead: which regions, which percentage of requests, which customer segment, over what exact duration, and whether any data was lost or corrupted as opposed to just delayed.
This section is often the weakest part of a postmortem, because by the time the write-up happens, the team already moved on to the fix and nobody wants to go back and pull the exact numbers. That is exactly why it matters. Without a real blast radius, the severity of an incident gets set by how loud the complaints were, not by what actually happened, and that miscalibrates which incidents get investigated the deepest.
Blast radius also decides who needs to see the postmortem. An incident that touched one internal dashboard gets a different distribution list than one that touched customer billing.
3. Contributing factors
This is where most templates get the framing wrong, and it is worth spending the most care on. "Root cause" implies one single failure, traced back to one single point. Real incidents are rarely that. They are usually several ordinary conditions stacking on top of each other: a monitoring gap that had existed for months, a deploy that happened to land during a traffic spike, a retry policy that made a small backend slowdown into a full outage.
List every contributing factor separately, and resist collapsing them into one sentence. "The deploy caused the outage" is a summary, not an analysis. "The deploy removed a rate limit that had been silently protecting a downstream service from its own retry storm, and nobody knew the rate limit was doing that job" is a contributing factor a team can actually act on.
This is also the section where blameless framing earns its keep, which is the whole reason the practice exists in engineering. The Google Site Reliability Engineering book's chapter on postmortem culture states the goal directly: a postmortem should identify contributing causes without singling out any individual or team for blame, because you cannot fix a person, but you can fix a system. When someone believes their name is going to be attached to a mistake in a document that gets circulated widely, they describe events defensively. They round the timeline in their own favor. They leave out the moment they hesitated or guessed. A team that has made blameless framing real, not just stated as policy, gets a different answer: "I saw the alert, decided it looked like the usual noise, and did not check further," written by the person it happened to, because they trust that writing it down will lead to a better alert, not a bad mark against them.
That trust is not automatic. It gets built by what happens after the first few honest postmortems, when the follow-up is genuinely "let's fix the alert" and not a quieter version of blame.
4. Action items, with owners and dates
An action item with no owner is not an action item. It is a hope. "Improve monitoring on the payment queue" will still be an open bullet point in the same document a year later, because nobody's name is next to it and nobody's calendar has a date on it.
Every action item needs three things: a specific change, a single owner (a team is acceptable, a name is better), and a date. "Add a paging alert when queue depth exceeds 500 messages, owned by the platform team, shipped before the next release" is something you can check on later and something that either happened or did not.
Keep the list short. Five well-specified action items that actually get done outrun twenty vague ones that get triaged into a backlog and forgotten. If the contributing factors section surfaced ten possible fixes, that is a sign to prioritize, not to write ten action items.
What changes when generated code was involved
The four sections do not change. What changes is one specific question the timeline and the contributing factors sections both need to answer: at the point the problematic change was introduced, who reviewed it, and what automated check ran against it before it shipped.
This matters because AI-assisted development moves the failure point. The 2025 DORA State of AI-assisted Software Development report, based on survey responses from nearly 5,000 technology professionals, found that AI coding tools measurably increase individual output (21% more tasks completed, 98% more pull requests merged) while organization-level delivery metrics stay flat. The report's own warning is direct: speed without stability is just faster chaos. More code moving through the pipeline faster means more chances for a subtle mistake to reach production before anyone reads it closely enough to catch it.
There is a second effect worth naming plainly in the contributing factors section, because it is counterintuitive and easy to miss. A randomized controlled trial from METR found that experienced developers using AI tools on real tasks took 19% longer than developers working without them, and afterward estimated that the tools had made them 20% faster. If a postmortem's timeline shows a reviewer moving quickly through a generated diff, "they were rushed" is not automatically the honest contributing factor. "The tool created a feeling of speed that did not match the actual time spent reviewing" might be closer to true, and it points at a different fix: a slower, more structured review step, not a faster one.
This is why the way a team catches problems before they ship matters as much as how it writes them up afterward. In the work we do, the postmortem for an incident involving generated code always checks one thing first: did an eval, an automated check written from the specification, exist for this failure mode. If it did and it passed anyway, the check was wrong and that is a contributing factor to fix directly. If no check existed, that gap belongs in the action items with an owner and a date, the same as any other fix. Either way, the question resolves to the team's process, not to whether a person or a model wrote the line that failed.
A postmortem template does not prevent incidents. It decides whether the same incident happens once or keeps happening under a different name. The four sections and the blameless framing exist for the same reason: to get the true account onto the page instead of the comfortable one, so the fix that gets written down is the fix that actually holds.
Sources
- Google SRE Book: Postmortem Culture: Defines blameless postmortem practice and the reasoning that a postmortem should identify contributing causes without blaming individuals.
- DORA 2025 State of AI-assisted Software Development Report: Source for the finding that AI tools increase individual task and pull-request throughput while organizational delivery metrics stay flat.
- METR: Measuring the Impact of Early-2025 AI on Experienced Open-Source Developers: Source for the randomized trial finding that AI tool use made experienced developers 19% slower while they perceived themselves as 20% faster.

