Most incident postmortems are written for the wrong audience. They get polished for leadership, scrubbed for customers, or filed away in a wiki nobody opens until the next audit. The one reader who actually matters—your future self, staring down a similar outage at 3 a.m.—gets a document that conveniently leaves out the messy bits you’ll desperately need. A trustworthy postmortem isn’t a report card. It’s a survival manual, written by the person who just lived through the failure.
At Gray Haven Lab, we treat postmortems as operational artifacts, not bureaucratic checkboxes. The goal is straightforward: produce a record honest enough to be useful six months later, when memory has faded and the same alert starts screaming again. This article walks through the structure, the tone, and the specific questions that turn a routine write-up into something you can genuinely rely on.

Start with the Raw Timeline, Not the Summary
Most templates open with an executive summary. Skip it. Your future self doesn’t need a sanitized overview; they need a chronological sequence of what actually happened, false starts and dead ends included. A trustworthy timeline captures the moment someone first noticed something was off, the exact command that made things worse, and the point where the team realized the original diagnosis was wrong.
Write the timeline in plain language, with timestamps in UTC. Include actions that seemed reasonable at the time but turned out to be mistakes. If someone ran a database migration on the wrong cluster, record it. If the on-call engineer muted the alert because they assumed it was a false positive, record that too. These details aren’t blame; they’re context. Six months later, that context is what keeps you from repeating the same error.
A useful timeline answers three questions for each entry: What did we observe? What did we believe at that moment? What did we do in response? This format exposes the gap between perception and reality—which is where most incidents live.
Describe the System State, Not Just the Symptoms
Plenty of postmortems fixate on user-facing symptoms: “checkout latency spiked to 12 seconds.” That’s necessary but not enough. Your future self needs to understand the internal state of the system when the failure hit. Which circuit breakers were open? What was the queue depth on the message broker? Were there any kernel panics or OOM kills on the application hosts?
Include concrete data: graphs, log excerpts, metric snapshots. If you use a monitoring stack like Prometheus and Grafana, embed the exact queries you ran during the investigation. The query that finally surfaced the root cause is especially valuable. A year from now, you won’t remember the PromQL syntax you improvised at 2 a.m. Having it in the postmortem means you can run it again immediately when similar symptoms appear.
Also document what you couldn’t see. Were there gaps in your observability? Did you lack metrics for a particular service? Did logs rotate too quickly? These blind spots are as important as the data you had. They tell your future self what instrumentation to add before the next incident.

Separate Root Cause from Contributing Factors
The phrase “root cause” is misleading. Most incidents have a trigger event and a set of conditions that made the trigger catastrophic. A single misconfigured firewall rule might be the trigger, but the contributing factors could include spotty monitoring, a deployment process that lacked rollback testing, and an on-call rotation that left the responder exhausted.
Write the root cause as a specific, verifiable statement: “The primary trigger was a change to the production load balancer configuration that removed the health check endpoint for the payment service.” Then list contributing factors separately. This separation keeps the postmortem from collapsing into a single scapegoat and helps your future self recognize the systemic weaknesses that still need attention.
Be precise about timing. If a certificate expired, include the exact expiration date and the date it was last renewed. If a cron job failed silently for three weeks before causing visible damage, document that delay. These details are easy to forget and hard to reconstruct later.
Record the Recovery Steps Exactly as They Were Performed
Recovery procedures written from memory are unreliable. During an incident, you might run a series of commands in a specific order, with particular flags, against a specific host. Afterward, you’ll be tempted to summarize: “We restarted the service and cleared the cache.” That summary is useless to someone facing a similar failure. They need the actual commands, the hostnames, the file paths, and the order of operations.
If you have a recovery checklist, compare what you actually did against what the checklist prescribed. Did you follow it? Did you deviate? If so, why? This comparison is one of the most valuable parts of a postmortem because it reveals whether your runbooks match reality. We’ve written about this before in Write the Recovery Checklist Before You Need It. A checklist written during calm hours is only as good as its performance under pressure. The postmortem is where you close that feedback loop.
Include the exact commands, the host they were run on, and the user context. If you had to bypass a safety check, document that decision and the reasoning behind it. Future you will need to know whether that bypass is still safe or whether the underlying condition has changed.
Map the Impact Honestly
Impact statements in postmortems often get watered down. “Some users may have experienced brief delays” is a phrase that erodes trust. If 12% of requests failed for 47 minutes, say so. If the failure cascaded into a dependent service and caused a secondary outage, document that chain. Your future self needs to understand the blast radius to prioritize fixes and to recognize early warning signs next time.
Quantify impact in terms your team cares about: error rates, latency percentiles, revenue loss, data corruption, and support ticket volume. If the incident triggered a pager storm, note how many alerts fired and which ones were actually useful. Alert fatigue is a real operational risk, and postmortems are the best place to track it.
Write Action Items That Prevent Recurrence, Not Just Detect It
A common postmortem mistake is generating action items that only improve detection: “Add alert for X condition.” Detection matters, but it isn’t prevention. Your future self needs action items that reduce the likelihood of the failure happening again. If a bad configuration deploy caused the outage, the action item should be a deployment safety check, not just a faster alert when the deploy breaks things.
Each action item should be specific, assigned to a person, and given a deadline. Vague items like “improve monitoring” or “review error handling” will sit in a backlog forever. Instead, write: “Add a pre-flight check to the payment service deploy script that validates the health check endpoint is reachable. Owner: J. Chen. Due: 2025-03-15.” Your future self can scan the list and immediately see what was fixed and what was deferred.
Link action items to the contributing factors they address. If a contributing factor was “no alert existed for certificate expiration,” the corresponding action item should be “implement certificate expiry monitoring for all public-facing endpoints.” This traceability shows that the postmortem drove real change, not just documentation.

Include a “What We Would Do Differently” Section
This is the most personal part of the postmortem and the one your future self will read first when a similar incident begins. It’s not about process changes or tooling. It’s about tactical decisions made under pressure. “We would fail over to the secondary region immediately instead of spending 20 minutes debugging the primary.” “We would check the database connection pool before assuming the issue was in the application layer.” “We would escalate to the network team after 10 minutes instead of 45.”
These statements are judgment calls, not root causes. They capture the intuition you gained the hard way. Write them as direct instructions to yourself. The tone should be: “If you see X, do Y immediately. Do not wait for Z.” This is the operational wisdom that standard postmortem templates leave out.
Document the Human Factors Without Blame
Incidents happen within a human system: who was on call, how tired they were, what other incidents were competing for attention, whether the primary responder had context on recent changes. These factors aren’t excuses; they’re conditions that affect decision-making. A postmortem that ignores them is incomplete.
Describe the on-call engineer’s workload at the time of the page. Were they already handling another incident? Had they been woken up multiple times that night? Was there a handoff gap between shifts? Include the number of alerts that fired and which ones were actionable. This data helps future teams adjust rotations, escalation policies, and alert thresholds.
Write about human factors with the same neutral tone you use for technical details. “The responder had been awake for 19 hours and was managing two other P2 incidents” is a factual statement, not a criticism. It explains why a decision that looks obvious in hindsight wasn’t made at 3 a.m.
Structure the Document for Fast Retrieval
A postmortem that takes 20 minutes to read won’t be read during an incident. Your future self needs to extract the critical information in under two minutes. Use clear headings, a table of contents if the document is long, and bold text to highlight commands, queries, and key decision points.
Put the most actionable information at the top: the trigger, the recovery commands, and the “what we would do differently” list. The detailed timeline and contributing factors can follow. Think of the document as a reference card first and a narrative second.
If your postmortem tool supports tags, use them consistently. Tag incidents by affected service, failure type (e.g., “certificate-expiry,” “database-overload,” “deploy-regression”), and severity. These tags let your future self quickly find all postmortems related to a specific database issue or a particular alert pattern.
Review the Postmortem with the People Who Were There
A postmortem written in isolation is unreliable. Memory degrades quickly, especially after a high-stress incident. Within 48 hours of resolution, gather everyone who participated in the response—including those who were paged but didn’t actively contribute—and walk through the draft together. This review catches errors, fills gaps, and surfaces perspectives the primary author missed.
During the review, ask specific questions: “Did I capture the sequence correctly?” “Was there a moment when you considered a different approach?” “What information did you wish you had at the time?” These prompts generate details that a solo writer can’t reconstruct. The review also serves as a team debrief, which has its own psychological value after a stressful event.
If your team maintains a shared operational knowledge base, link the postmortem to relevant entries. For example, if the incident exposed a weakness in your database failover procedure, link to the runbook that needs updating. This turns the postmortem into a living document that actively improves your operational practices.
FAQ
How long should a postmortem be?
Long enough to be useful, short enough to be read under pressure. For a typical production incident, aim for 800–1500 words. Complex, multi-hour outages may require more detail, but always put the critical recovery information in the first section. If someone only reads the first 300 words, they should still get the trigger, the fix, and the key lesson learned.
Should postmortems be shared publicly or kept internal?
That depends on the incident’s scope and your organization’s policy. Incidents affecting customers may warrant a public-facing summary, but the full operational postmortem—with internal hostnames, specific commands, and candid human factors—should remain internal. The public summary can be derived from the internal document, but the internal version must stay honest to be useful for future responders.
What if we never find the true root cause?
Some incidents are never fully explained. A service may recover spontaneously, or the trigger may be lost in a log gap. In these cases, document what you do know, what you suspect, and what monitoring you have added to catch the issue if it recurs. A postmortem that honestly says “we still don’t know what caused this” is far more valuable than one that invents a plausible but wrong explanation. The unknown is itself a critical piece of operational context.
How do we keep postmortems from becoming blame sessions?
Focus the document on the system, not the individual. When human actions contributed to an incident, describe the action and the context that made it reasonable at the time. Avoid names in the narrative unless they’re necessary for clarity about who holds specific knowledge. If your organization has a blame culture, the postmortem alone can’t fix it—but a consistently blameless postmortem practice can shift norms over time.
Conclusion
A postmortem you can trust is one that tells the truth about what happened, what you did, and what you learned. It’s written for the person who will be on call six months from now, staring at the same dashboard, feeling the same dread. Give that person the details you wish you had at the start of the incident. Give them the commands, the queries, the dead ends, and the moment of clarity. That’s the document they’ll actually read—and the one that will get them through the night.