The After-Action Report: Thirty Minutes, Five Sections, and the 48-Hour Deadline
TL;DR
Every fire ends twice. Once when the alert clears, and once when someone writes down what changed because of it. Most small teams skip the second ending — which is why the same outage comes back every quarter wearing a new timestamp. The fix is not a committee: it's a one-page after-action report, finished within 48 hours, in thirty minutes, with five sections. Here's the template, the policy rules that make it happen, and a worked example.
The two numbers that decide everything
If you wait a week to debrief, the timeline decays into a vibe — people remember the argument, not the sequence. If the debrief has no timebox, it becomes a two-hour blame session nobody schedules twice. So:
- Within 48 hours, the person who was on call (not the manager) opens the AAR file. They were closest to the facts.
- Thirty minutes, hard stop. If it needs longer, that's the signal a full postmortem is warranted — separate document, separate session.
- Blame is a defect. "We didn't have the spare imaged" is fixable. "Dave forgot" is a lawsuit-shaped dead end. Every human error is a system error wearing a name tag.
- No owner + no date = not an action item. "Improve monitoring" is a wish. "Sarah: add disk alert at 80% — due Friday" is an action.
- The next AAR starts by reading the last one. Two minutes on the previous fix list. This closing of the loop is the entire difference between a learning organization and one that documents failure professionally.
The five sections
| # | Section | Question | Feeds |
|---|---|---|---|
| 1 | The gap timeline | Supposed vs. actual, with times | First page of any future postmortem |
| 2 | The keep list | What worked that isn't written down | Edits into runbooks — wins get codified |
| 3 | The fix list | What failed, owner + date per line, max 5 rows | The weekly review chases these |
| 4 | Root cause, no blame | Why the gap existed at all | Stops you fixing symptoms |
| 5 | What we're changing | Every document touched, linked | Proof of life: if nothing changed, nothing was learned |
Section 5 is the one teams skip, and it's the proof of life. Even one linked edit — a line added to your first-30-minutes checklist — is the AAR paying rent.
Why "ask why twice" beats five-whys theater
One clause per fix row, written as "the system allowed X," not "person Y did X." Ask "why" twice and stop. No disk alert existed → why 1: monitoring was scoped during a migration and disk was out of scope → why 2: nothing periodically audits monitoring coverage against the baseline. Now the fix is "quarterly coverage audit," not just "add one alert." If your second why lands on a person's name, you asked it wrong — rephrase until it lands on a process or an absent safeguard.
A worked example
AAR-2026-09-12 — production disk full, 08:40–09:52. Impact: 12 minutes of failed checkouts, 9 tickets, 1 refund.
- Gap: no alert existed; on-call laptop lacked the VPN profile; failover never rehearsed under real disk pressure; status page posted 12 minutes late.
- Keep: support texted the on-call directly when tickets spiked — now codified in the escalation row of the severity matrix.
- Fix (owner, date, lands in): disk alert by Sep 16 → monitoring checklist; VPN provisioning step by Sep 15 → provisioning checklist; load-failover drill by Oct 1 → drill schedule; pre-staged status drafts by Sep 14 → status page templates.
- Cause, no blame: monitoring coverage never audited; provisioning predates the VPN change; drills only rehearsed the happy path; status drafts don't exist until written live.
- Changing: four documents, linked, dated. The next AAR opens by checking these four items.
Total effort: about thirty minutes, most of it copy-pasting from the timeline and chat logs. Compare with the alternative — the same incident recurring in December on the payment page instead of the app, with everyone re-deriving the same four conclusions under pressure.
Paste-in starter: the action tracker
Keep each AAR as aar-YYYY-MM-DD-shortname.md next to your other ops docs. The only table that must stay machine-readable is the fix list:
id,area,failure,root_cause,fix,owner,due,lands_in,status
1,monitoring,"no disk alert; 500s were first signal","coverage never audited vs baseline","add 80% warn / 90% crit alert",sarah,2026-09-16,server-monitoring-checklist,open
2,access,"on-call laptop lacked VPN profile","provisioning predates VPN change","add VPN step + quarterly spot-check",mo,2026-09-15,new-laptop-provisioning-checklist,open
3,drills,"failover unrehearsed under load","drills test happy path only","Q4 drill runs failover with disk pressure",ana,2026-10-01,drill-schedule,open
4,comms,"status page 12 min late","drafts written live","pre-stage investigating+mitigating drafts",sarah,2026-09-14,status-page-communication-template,open
One CSV per AAR, four lines, statuses flipped to done by the Friday review. Organizations that seem eerily calm during emergencies aren't luckier — they've done thirty honest minutes after every fire, for longer than you have.
AAR vs. postmortem vs. weekly review
- AAR (this): any fire, drill, flop, or scramble → 30 minutes, one page → keep/fix lists + linked edits.
- Postmortem: Sev-1, customer data, revenue impact → half a day, evidence-first → root-cause chain, owner-signed actions.
- Tabletop retro: after each drill → 20 minutes on the drill script → scenario edits that feed the next AAR.
- Weekly review: every Friday, 15 minutes → chases the AAR's open items; adds nothing new.
If your team writes beautiful postmortems for major incidents but nothing for small fires, you're capturing maybe 10% of the learning. The 90% lives in the thirty-minute reports nobody wrote.
The full template — including the gap-timeline table, the worked example, and the AAR-vs-postmortem line — lives on the After-Action Report Template page in the HIVE80lab ops-notes collection, alongside the incident timeline, postmortem, and drill-schedule templates it plugs into.
Top comments (0)