Incident postmortem
Written the day after, from what actually happened, without a villain. This skill drafts it so the responders only have to correct, not compose.
When to use
- After any incident with a status page entry or a paged responder.
- For near-misses, when the team decides it is worth learning from.
Input
The incident channel export (with timestamps), alerts, deploy log, the status page updates, and the monitoring numbers for impact (error rate, latency, affected requests or customers).
Sections
- Summary — three sentences: what users experienced, for how long, what fixed it.
- Impact — in user terms with numbers: requests failed, orders delayed, customers affected, and the time window. Money only if the input contains it.
- Timeline — reconciled across sources, in UTC, one line per event: detection, escalation, each hypothesis tried, mitigation, resolution. Mark gaps ("no activity 02:10–02:40").
- Contributing factors — plural, always. Not "root cause": the deploy, the missing alert, the runbook that was stale, the load pattern. Each one is a fact, not a judgment.
- What went well — detection time, a good call, a runbook that worked.
- Actions — each with an owner (role or name from the channel), a due date placeholder, and how we will know it is done. Split into prevent recurrence, detect faster, mitigate faster.
Rules
- Blameless means no names attached to mistakes. Names appear only as action owners and in the timeline as roles ("on-call", "deployer").
- Quote the channel for decisions ("02:14 on-call: rolling back 1.14.2") rather than narrating intent.
- Every number cites its source (alert, dashboard, log line).
- Mark what you could not establish as "unknown" — an honest gap beats a smooth story.
- Actions must be specific enough to close: "add an alert on webhook queue depth > 5 000 for 5 min", not "improve monitoring".
Output format
# Postmortem — checkout errors, 2026-08-14
## Summary
Between 01:52 and 03:07 UTC, 38% of checkout attempts returned 500 (≈ 2 400 attempts, 1 130 customers). Rolling back the 1.14.2 deploy resolved it.
## Impact
… (source: checkout error dashboard, orders table)
## Timeline (UTC)
01:52 deploy 1.14.2 completes (deploy log)
01:58 error-rate alert fires (PagerDuty)
02:03 on-call acknowledges
…
## Contributing factors
1. 1.14.2 changed the payment client timeout from 30 s to 3 s (PR #418); the provider's p95 is 4.1 s.
2. The canary stage was skipped — the deploy pipeline allows it with a flag, no review required.
3. The alert threshold (25% for 5 min) delayed detection by ~6 min.
## Actions
| kind | action | owner | done when |
| prevent | canary skip requires a second approver | deploy pipeline owner | flag change merged |
| detect | error-rate alert at 10% for 2 min on checkout | on-call lead | alert fires in a game day |
License
MIT