Here is the same template filled in for a small team running a payments API. Names and numbers are placeholders.
INCIDENT RUNBOOK: payments API, first 30 minutes
Owner: Dana R. | Last tested: [drill date] | Review due: [date]
1. DECLARE
IC: Dana R., 555-0142 (backup: Priya S., 555-0187)
Channel: #inc-payments (bridge link pinned)
SEV1: checkout returns 5xx for more than 5% of requests for 10 minutes
SEV2: card authorizations degraded, retry path works
2. CALL TREE
1. Dana R. 555-0142 owns the payments API service
2. Priya S. 555-0187 owns the database and connection pool
3. Marco L. 555-0199 owns customer support, sends status messages
4. Payments provider support, 555-0100, account ID [ID]
3. FIRST THREE CHECKS
A. Error-rate dashboard, pre-filtered to 60 minutes: [URL]
B. psql "$REPLICA_DSN" -c "select count(*) from pg_stat_activity;"
Expected: under 80. Above 150 means pool exhaustion.
C. Provider status page: [URL]
4. CLOCK
00:05 Dana acknowledged in #inc-payments
00:15 decision logged: error rate flat, no mitigation yet, hold
00:30 Marco posts status to customers and support
5. ESCALATE WHEN
error rate over 5% for 10 minutes after one mitigation attempt
connection count over 150 after a restart
a second region shows the same errors
6. MITIGATE
Restart the API worker group: [console path]
Expected: error rate returns under 1% within 4 minutes
7. STATUS TEMPLATE
"Card payments are failing for some customers since [time]. Retries may
succeed. We are restarting part of the payment service. Next update by
[time]."
Walking the clock with this fill:
At minute zero the alert fires on the error-rate condition. At minute two Dana acknowledges and starts check A: the dashboard shows 5xx at 9% for the last 12 minutes, concentrated on card authorization. That is SEV1 by definition, so the decision at minute 15 is effectively made already, but the clock keeps it honest: Dana writes "escalating, SEV1, provider check pending" in the channel.
Check B returns a connection count of 173, well above the 80 baseline and above the 150 trigger. That single number answers the question, so checks beyond A and B are skipped. Dana calls Priya at minute six, because the trigger condition (connection count over 150) is met regardless of the clock.
Priya identifies a stuck worker group holding connections. The mitigation is a restart of that group, run from the console path in section 6. Expected result is written down, so at minute nine Dana can compare: error rate down to 3% and falling. At minute 12 it is under 1%.
At minute 15 Dana logs the hold decision: "mitigated, monitoring." At minute 30 Marco posts the status message to customers and support, using the template with a next-update time.
Total time to mitigation: under ten minutes, because three numbers and two phone calls replaced an hour of discussion. The runbook did not make the team smarter. It removed the discovery work from the worst possible moment.
Note what the worked example leaves out: no root cause analysis, no postmortem, no customer credit decisions. Those belong later and in a different document. The one page covers only the first 30 minutes.