Chaos game day
A runbook nobody has followed under pressure is a guess, and an alert that has
never fired in anger is a hope. A game day turns both into evidence by breaking
something deliberately while you watch, ready to stop. Run it without rails and
you cause the outage you meant to prevent; run it as a demo where everyone knows
the answer and it teaches nothing. The craft lives between those two.
Method
- Open with a falsifiable hypothesis tied to a real fear. Write a
prediction: "if the primary database fails over, reads recover inside 30
seconds and no page reaches a human." Pick failures you genuinely worry
about, dependency timeouts, zone loss, a poisoned cache, a full disk,
not the ones you already know you survive.
- Define steady state and the abort condition before anything breaks. Name
the health metric (checkout success rate, p99 latency) and the exact
threshold that ends the exercise on the spot. Fix the blast radius up front:
one shard, one zone, one percent of traffic. No fault is injected until the
kill switch is built and tested.
- Assign roles and keep the responders blind. A facilitator drives the
scenario and holds the abort switch, a scribe timestamps every event, and the
on-call responders work the problem without the injection details. If the
people responding already know the answer, you are measuring their memory,
not the system.
- Announce the window; do not ambush. Tell the wider org the game day is
running and when, so a real incident in parallel is not mistaken for the
drill or the reverse. Surprise drills burn trust and rarely buy the
realism they cost. Run in production when you can afford it and staging
when you cannot, and say which you chose.
- Inject in stages and watch the instruments, not just the system. Use a
fault tool: Gremlin, AWS Fault Injection Simulator, toxiproxy, or a scripted
dependency kill, and escalate step by step. The question is not only "did it
survive" but "did monitoring detect it, did the right alert fire, did the
runbook match reality." Record time to detect and time to recover.
- Abort the instant a rail trips, and count that as a find. If steady state
breaches the threshold, stop and restore. An exercise that hits its abort
condition uncovered a real weakness faster and cheaper than a live incident
would have. That is the game day succeeding, not failing.
- Capture the learning while the room is still warm. Within a day, write
what broke, what the instruments missed, and which runbook step was wrong.
File action items with owners, then schedule the re-run that proves each
fix. A game day you never repeat is a story; one you repeat is a control.
Litmus tests
- Could the facilitator halt the exercise in seconds, and was that switch tested
before any fault went in?
- Did responders find the failure through your monitoring, or because someone
told them it was happening?
- Did you measure time to detect and time to recover, not just "it stayed up"?
- Is a re-run scheduled to confirm each fix, or did the findings simply get
filed?
Boundaries
A game day tests a system you can safely perturb and restore. Do not inject
faults into something with no rollback, no isolation, or an unquantified blast
radius: harden it first. This rehearses resilience; it does not replace the
production-readiness review that decides a service is fit to operate, nor the
incident process that handles a genuine outage. Follow your change-management
rules for any production injection.
1---2name: chaos-gameday3description: Run a game day that injects a real failure on purpose under safety rails, then captures what monitoring, runbooks, and responders actually did. Use when you want to prove resilience before an incident tests it for you, or to rehearse a team on a failure it has never handled.4---56# Chaos game day78A runbook nobody has followed under pressure is a guess, and an alert that has9never fired in anger is a hope. A game day turns both into evidence by breaking10something deliberately while you watch, ready to stop. Run it without rails and11you cause the outage you meant to prevent; run it as a demo where everyone knows12the answer and it teaches nothing. The craft lives between those two.1314## Method15161. **Open with a falsifiable hypothesis tied to a real fear.** Write a17 prediction: "if the primary database fails over, reads recover inside 3018 seconds and no page reaches a human." Pick failures you genuinely worry19 about, dependency timeouts, zone loss, a poisoned cache, a full disk,20 not the ones you already know you survive.212. **Define steady state and the abort condition before anything breaks.** Name22 the health metric (checkout success rate, p99 latency) and the exact23 threshold that ends the exercise on the spot. Fix the blast radius up front:24 one shard, one zone, one percent of traffic. No fault is injected until the25 kill switch is built and tested.263. **Assign roles and keep the responders blind.** A facilitator drives the27 scenario and holds the abort switch, a scribe timestamps every event, and the28 on-call responders work the problem without the injection details. If the29 people responding already know the answer, you are measuring their memory,30 not the system.314. **Announce the window; do not ambush.** Tell the wider org the game day is32 running and when, so a real incident in parallel is not mistaken for the33 drill or the reverse. Surprise drills burn trust and rarely buy the34 realism they cost. Run in production when you can afford it and staging35 when you cannot, and say which you chose.365. **Inject in stages and watch the instruments, not just the system.** Use a37 fault tool: Gremlin, AWS Fault Injection Simulator, toxiproxy, or a scripted38 dependency kill, and escalate step by step. The question is not only "did it39 survive" but "did monitoring detect it, did the right alert fire, did the40 runbook match reality." Record time to detect and time to recover.416. **Abort the instant a rail trips, and count that as a find.** If steady state42 breaches the threshold, stop and restore. An exercise that hits its abort43 condition uncovered a real weakness faster and cheaper than a live incident44 would have. That is the game day succeeding, not failing.457. **Capture the learning while the room is still warm.** Within a day, write46 what broke, what the instruments missed, and which runbook step was wrong.47 File action items with owners, then schedule the re-run that proves each48 fix. A game day you never repeat is a story; one you repeat is a control.4950## Litmus tests5152- Could the facilitator halt the exercise in seconds, and was that switch tested53 before any fault went in?54- Did responders find the failure through your monitoring, or because someone55 told them it was happening?56- Did you measure time to detect and time to recover, not just "it stayed up"?57- Is a re-run scheduled to confirm each fix, or did the findings simply get58 filed?5960## Boundaries6162A game day tests a system you can safely perturb and restore. Do not inject63faults into something with no rollback, no isolation, or an unquantified blast64radius: harden it first. This rehearses resilience; it does not replace the65production-readiness review that decides a service is fit to operate, nor the66incident process that handles a genuine outage. Follow your change-management67rules for any production injection.