Skip to content

    System Design

    Runbooks, Incidents and Postmortems: Respond, Then Learn

    Run incidents with clear roles and severity, write runbooks a tired person can follow, and turn outages into owned, verifiable fixes via blameless postmortems.

    By Published 11 min read

    Share

    Standard lessonintermediateBackend System Design

    Before this: Alerting and On-Call

    What you'll learn: By the end of this lesson you will be able to decide when an event is an incident and how severe it is, assign the roles that keep a response coordinated, write a runbook a tired engineer can follow at 02:00, run a blameless postmortem, and write action items that have an owner and a verifiable end state, using ShopStream as the running example.

    A hospital does not improvise when a patient collapses. Someone leads, others do specific tasks, a checklist covers the first minutes, and afterwards the team reviews what happened without hunting for the person to blame. Software teams that handle outages the same way recover faster and fail less often for the same reason twice.

    Alerting and On-Call ends when a page reaches a human. This lesson starts there. Observability and SLOs and the ShopStream secure-operate stage mention runbooks and blameless postmortems in a sentence each; this lesson is the full treatment.

    Documentation pages read on 2026-11-08: Google SRE Book and Workbook chapters on incidents and postmortems, and the PagerDuty Incident Response documentation. Where a practice is one company's own policy, the text says so.

    The core idea

    An incident process answers three questions in advance: who decides, what do we do first, and how do we learn. The incident commander decides, the runbook says what to do first, and the postmortem turns the cost of the outage into system changes. The earlier you settle these, the less a stressed team has to invent.

    Three illustrations run through the lesson:

    • Minimal example: the runbook skeleton in the runbook section.
    • Realistic example: a ShopStream checkout incident at the evening peak.
    • Failure example: a runbook step that no longer works.

    Is this an incident, and how bad?

    The SRE Book chapter "Managing Incidents" gives a simple test: if any of these is true, treat it as an incident: you need to involve a second team in fixing it; the outage is visible to customers; the issue is unsolved after an hour of concentrated analysis. The SRE Workbook adds a rule: declare incidents early and often, because managed incidents are resolved faster.

    flowchart TD accTitle: Declare an incident accDescr: Three questions from the SRE Book decide whether an event becomes an incident. Any yes declares it. If unsure of the severity, assume the higher one and review it in the postmortem. E["An alert fires or someone reports a problem"] --> Q1{"Need a second team to fix it?"} Q1 -->|"yes"| D["Declare an incident, appoint a commander"] Q1 -->|"no"| Q2{"Visible to customers?"} Q2 -->|"yes"| D Q2 -->|"no"| Q3{"Unsolved after an hour of focused work?"} Q3 -->|"yes"| D Q3 -->|"no"| W["Handle as normal work, keep watching"] D --> S["Pick a severity; if unsure, take the higher one"]

    Figure 1. Declaring an incident. How to read this: any "yes" leads to declaration. Severity is chosen after, quickly, and corrected later.

    Severity says how much response an incident gets. PagerDuty's published scale, as an example of one company's policy, runs from SEV-1 (a critical issue that warrants public notification and executive liaison) to SEV-5 (cosmetic, a ticket for the owner). Anything above SEV-3 is a "major incident" with a coordinator and a call. Its guidance for doubt is useful anywhere: if you cannot tell whether it is SEV-1 or SEV-2, treat it as the higher one, and argue about the label in the postmortem, not during the incident. Define your own levels by customer impact and required response, not by cause.

    Roles: who does what

    The SRE Book's incident roles come from the Incident Command System:

    Role Responsibility Does not
    Incident commander (IC) Holds the high-level state, assigns roles and tasks, removes roadblocks, keeps the incident document Change the system; by default the commander holds every role they have not delegated
    Operations lead Applies operational tools to mitigate; the only group that modifies the system during the incident Decide priorities alone
    Communications lead The public face of the response: periodic updates to stakeholders, keeps the document current Debug
    Planning lead Longer-term items: file bugs, arrange handoffs, track divergence from normal Run the call

    PagerDuty's guidance agrees and is blunt: the commander coordinates, delegates remediation to subject matter experts, and does not check graphs or read logs. It also adds a scribe, a deputy and time-boxed task assignments.

    Incident roles around one shared incident documentCommander to Operations (tasks); Commander to Comms (status); Commander to Incident document; Planning lead to Incident documentCommander: decides, delegatesCommanderdecides,delegatesOperations: changes systemOperationschanges systemComms: updates peopleCommsupdates peopleIncident document: live timelineIncidentdocumentlive timelinePlanning lead: bugs, handoffsPlanning leadbugs, handoffstasksstatus

    Figure 2. Roles and the shared document. How to read this: all coordination goes through the commander, and the document is the single record of what is known and what was tried.

    Two practices keep this working. The incident document is the commander's most important artefact: editable by several people, it becomes the timeline for the postmortem. Handoff is explicit: the outgoing commander says "you are now the incident commander, okay?" and waits for a firm yes. The Workbook describes one long incident in which the engineers and commander rotated every four hours.

    What the response is trying to do

    The SRE Book's first priority is to stop the bleeding, restore service and preserve the evidence for root-causing. The Workbook is explicit that responders must prioritise mitigation above all else, because customers mostly want the errors to stop, and you need to know where the root cause is, not all of it, before you can act.

    stateDiagram-v2 accTitle: Lifecycle of an incident accDescr: An incident is detected, declared, mitigated, resolved and then reviewed in a postmortem, producing action items that are tracked to completion. If a mitigation fails the responders try another. [*] --> Detected Detected --> Declared: criteria met, commander named Declared --> Mitigating: tasks assigned Mitigating --> Mitigating: a step fails, try another Mitigating --> Resolved: users recovered Resolved --> Reviewed: postmortem written and reviewed Reviewed --> Closed: action items done Closed --> [*]

    Figure 3. From detection to closed action items. How to read this: the loop on "Mitigating" is normal. The incident ends at user recovery; the learning ends only when the action items are done.

    Mitigations are usually reversible and generic: roll back the last release, turn a feature flag off, shift traffic away from a failing region, shed load, scale out. Root-cause fixes come later.

    Runbooks

    A runbook is the documented first response to a specific alert or failure. Its reader is tired, rushed and may not own the service. The earlier lesson listed what it holds; here is a skeleton:

    Runbook: CheckoutFastBurn
    Owner: checkout team        Last verified: 2026-10-30 (game day)
    What this means: checkout errors exceed 1.44 percent (14.4x burn rate).
    Who is hurt: shoppers trying to pay.
    First checks (5 minutes):
      1. Was there a deploy or flag change in the last hour? Link: <deploy log>
      2. Which dependency is failing? Dashboard: <dependency errors>
      3. Is the error confined to one region? Dashboard: <errors by region>
    Mitigations (stop when errors drop):
      - Roll back the last release: <exact command or pipeline link>
      - Disable flag <name>: <exact command>
      - Fail checkout reads over to the standby region: <link, approval needed>
    Escalate to: <payments on-call> if the payments provider is failing.
    After: open an incident if not resolved in 15 minutes.

    What makes a runbook work:

    • One alert, one runbook, linked from the alert, with an owner.
    • Exact commands and links, not "restart the service".
    • Decision points, "if X, do Y, else Z", and a stop condition.
    • A verified date. An untested runbook is a guess; verify during a drill.
    • Automate what is rote. The SRE Book flags pages with rote, algorithmic responses as a red flag: a script can do those, and a runbook step that never changes is a script waiting to be written.

    Postmortems

    The SRE Book defines a postmortem as a written record of an incident, its impact, the actions taken to mitigate or resolve it, the root cause and the follow-up actions to prevent recurrence. It lists triggers: user-visible downtime above a threshold, data loss of any kind, an on-call intervention such as a rollback or rerouting of traffic, a resolution time above a threshold, and a monitoring failure, which usually means a human found the problem.

    The postmortem is blameless: it assumes everyone involved had good intentions and acted on the information they had. The SRE Book's line is that you cannot fix people, but you can fix systems and processes. Wording matters. "Engineer X ran the wrong command" invites defence; "the tool accepted a command with no confirmation" invites a fix. Removing blame, the Book says, gives people the confidence to escalate without fear.

    The Workbook's example template gives the structure: owner and status, summary and impact, root causes and trigger, detection, resolution, a timeline, lessons learned (what went well, what went poorly, where we got lucky) and action items.

    Action items are the point. The Workbook asks for a type, a priority, an owner and a tracking bug for each, and a verifiable end state: "improve monitoring" is vague, "alert when renewal fails for more than 10 minutes" can be checked. It notes that changing human behaviour is less reliable than changing automated systems, and recommends rewarding the closing of items, not just writing postmortems. The SRE Book adds that an unreviewed postmortem might as well never have existed, so review and publish.

    PagerDuty publishes its own cadence, as one example: postmortems for SEV-1 and SEV-2 incidents, a meeting within 3 calendar days for SEV-1 and 5 business days for SEV-2, lasting 15 to 30 minutes, with tickets limited to what matters. Pick numbers that fit your size and write them down.

    Choice Lighter process Heavier process
    Declaring Only for outages customers see Any need for a second team
    Roles Commander and one operator Commander, operations, communications, planning, scribe
    Postmortem Short summary and actions for SEV-1 and SEV-2 Full template for every incident and near miss
    Gain Little overhead Consistent learning
    Cost Misses cheap lessons Process fatigue

    The other side of this topic

    A front-end team meets incidents as bad releases and broken client behaviour, where the fix is a rollback or flag the client honours, and where communication includes a status page shoppers see. The Frontend track has no published lesson on this yet.

    In practice: a checkout incident at the evening peak

    An educational scenario on ShopStream. All timings and figures are illustrative.

    This is a realistic scenario, not a case history.

    The situation

    ShopStream handles about 58 checkouts a second at an assumed evening peak. A release adds a new pricing step to checkout. Twelve minutes later the page from the previous lesson, "Checkout is burning its error budget 14.4 times too fast", reaches the on-call engineer. Until now, incidents were handled by whoever was online, in a shared channel.

    Starting architecture

    Before: responders swarm one channel with no rolesPage to One chat channel; One chat channel to Production (uncoordinated changes); One chat channel to Support queue (silence)Page: fast-burn alertPagefast-burn alertOne chat channel: no rolesOne chatchannelno rolesProduction: many handsProductionmany handsSupport queue: no status updatesSupport queueno status updatesuncoordinated changessilence

    Figure 4. The starting point. How to read this: several people change production at once, and customer support has no one to ask.

    Options considered

    Option Gain Cost Risk
    A. Keep the channel, ask people to be careful No change None Repeats the same confusion
    B. Severity levels, a commander role, a live document, runbooks, blameless postmortems Clear decisions, record for learning Training, drills, writing Process outliving its use
    C. Adopt a dedicated incident platform Less manual coordination Cost, a new dependency Tool without the habits

    The decision

    Option B, in light form: three severity levels, a commander and an operations lead for any SEV-1 or SEV-2, a communications lead from SEV-2 up, a document template, and a postmortem for SEV-1 and SEV-2 and for any monitoring failure. Runbooks are linked from alerts and verified in a quarterly game day, with one of the previous incidents replayed as a "wheel of misfortune" exercise (the SRE Book describes reenacting a past postmortem with engineers playing the roles).

    sequenceDiagram accTitle: A managed ShopStream checkout incident accDescr: The page reaches the on-call engineer who declares an incident and names a commander. The commander assigns operations and communications. Operations rolls back the release, errors drop, and the commander closes the incident and schedules the postmortem. participant P as Pager participant O as On-call engineer participant C as Incident commander participant X as Operations lead participant M as Communications lead P->>O: CheckoutFastBurn O->>C: declare incident, severity 2, take command C->>X: check last release and flags, report in 5 minutes C->>M: post status, next update in 15 minutes X-->>C: new pricing step correlates with errors C->>X: roll back the release X-->>C: rollback done, errors falling C->>M: post recovery, keep watching C->>C: close incident, schedule postmortem

    Figure 5. The shape of a managed response. How to read this: the commander never touches the system. Each task is assigned, time-boxed and reported back.

    Rollout and verification

    Train three engineers as commanders by shadowing. Run the game day with a seeded fault (a bad flag in staging) and time the page to declaration, declaration to mitigation, and the quality of updates. After each real incident, check whether the postmortem was written within the policy window and track the share of action items closed by their due date.

    The 2 a.m. failure

    A later, similar page. The runbook says "disable flag checkout.new_pricing". The operations lead runs the command and nothing changes: the flag was renamed during a refactor months ago and the old name is silently ignored. Ten minutes pass. The commander time-boxes the step, asks "what else could we do?" and orders the rollback, which works. The Workbook's advice to consider alternatives when something is not working is the rule applied.

    The postmortem finds no one at fault. It finds that the runbook had no verified date, that the flag system accepted unknown names without an error, and that the refactor had no step to update runbooks. Actions, each with an owner and a verifiable end state: the flag tool rejects unknown flag names; a CI check fails when a runbook mentions a flag that does not exist; every runbook shows its last verified date and the game day refreshes it.

    Architect's notes

    • Decide the declaration criteria and severity table before the incident, and say who may declare.
    • Separate deciding from doing. The commander does not type commands.
    • Mitigate first. Roll back, flag off, shed load; investigate after.
    • Make the postmortem a ticket system, not a document. Track items to closure and report the closure rate.
    • Practise. Drills are where stale runbooks and unclear roles show up.

    Common mistakes

    • Everyone debugging at once, with nobody communicating.
    • Waiting for certainty before declaring.
    • Runbooks that say "investigate" instead of giving steps.
    • Postmortems that name a person or end with "be more careful".
    • Action items with no owner or no way to tell they are done.
    • Writing a postmortem and never reviewing or sharing it.

    Key takeaways

    • Declare an incident when a second team is needed, customers see it, or an hour of focused work has failed; if unsure of severity, take the higher.
    • The commander coordinates and delegates; operations is the only group changing the system; communications keeps stakeholders informed.
    • Stop the bleeding first; root cause later.
    • A good runbook has an owner, exact steps, decision points and a verified date; rote steps become automation.
    • Blameless postmortems fix systems and processes; they assume good intent.
    • An action item needs an owner and a verifiable end state, and the postmortem is done when the items are done.

    Practice exercises

    Exercise 1 (45 min). Write a three-level severity table for ShopStream by customer impact, with the response each level triggers and who may declare.

    Exercise 2 (1 hour). Write a runbook for a "payments provider error ratio high" alert in the skeleton format. Mark every step that could be automated.

    Exercise 3 (1 hour). Rewrite these in blameless form: "Priya deployed without testing"; "ops forgot to scale the cluster". Then turn each into an action item with an owner and a verifiable end state.

    Exercise 4 (2 hours). Design a wheel-of-misfortune session using the 2 a.m. failure above: roles, the facts you reveal at each step, and what the group should decide.

    Official documentation

    Ask about this article

    Get answers grounded in this post. AI-generated — based on this article, and may be imperfect.

    Scaled AI Weekly

    Enjoyed this? Get more like it every Monday.

    Real architecture decisions, LLMOps patterns that survive production, and engineering leadership advice — from 12+ years of building at enterprise scale. Free. No spam. Unsubscribe anytime.

    Get new articles by email

    Free. We email a confirmation link first, and you can unsubscribe from any email.

    Join engineers building production AI systems

    Comments