BOOK DEEP READ · CHAOS ENGINEERING · CH 9
Chaos Engineering: System Resiliency in Practice · Ch 9 · Creating Foresight · 2020
You tap "order" in a food-delivery app and a few seconds later it says "order placed". Behind that are dozens of programs calling each other, and each engineer who looks after them knows only a small piece. This chapter asks: how do you find out, before anything breaks, that the system everyone imagines is not the system that actually exists?
Earlier chapters described chaos engineering: breaking something on purpose to see whether the system copes. This one says that the most valuable part is often not the moment you break it, but the hour you spend talking before you touch anything.
A family is about to drive somewhere far. Dad says "highway, three hours." Mum says "that stretch of highway is closed for roadworks, we'll have to go round." The kid asks "what if we run out of petrol halfway?" Nobody has an answer.
The car hasn't moved, and already two things have come out: two people have different maps in their heads, and there's a question nobody had thought about. Finding that out at home is far cheaper than finding it out halfway.
Engineering teams used to learn mostly from looking back after an incident. But once you know how things ended, everything looks like it "should have been obvious", so the meeting drifts into finding out who got it wrong. And the price has already been paid: users were already affected.
The other approach is to break things straight away and see what happens. But if nobody said beforehand what they expected, you can't tell whether the result is good or bad.
Many problems surface before you break anything. You might discover that an alarm goes to nobody at all, and you can simply fix that without breaking anything. The team also slowly shifts from blaming people after things go wrong to thinking together before they do.
One honest cost: the conversation depends heavily on the person leading it. Done badly, it becomes a box-ticking exercise, or one senior person talks while everyone else listens.
Chaos engineering isn't only about breaking things: before you act, put everyone's picture of the system on the table and compare them. The disagreements and the questions nobody can answer are where the next incident is most likely hiding.
Want the details of running the design session, what to ask and the trade-offs? → Switch to Deep
You think the value of a chaos experiment lies in what you see when the fault is injected. In fact much of it comes before: gathering engineers to design the experiment forces each of them to state what they expect the system to do. The disagreements, and the questions nobody can answer, are the blind spots in their mental models. The chapter recasts chaos engineering from a tool for learning after the fact into a tool for creating foresight: imagining the incident before it happens.
Chapter 9 of the book, by Andy Fleener, opens Part III, "Human Factors". The five company chapters of Part II were about how to run experiments. From here on the focus moves from the machines to the picture in people's heads, leading into Ch10 Humanistic Chaos and Ch11 People in the Loop. The title is shared with a paper by resilience-engineering researcher David Woods on the Columbia shuttle accident, and the idea is the same: safety comes from imagining ahead, not from assigning causes afterwards. In practice it speaks to any team that runs plenty of postmortems yet keeps having the same incidents.
Take a typical setup: an ordering service depends on a cache, a database, a payment gateway and a message queue. Four or five teams own one piece each and ship dozens of times a week. When something breaks, the postmortem is the first time anyone puts all their understandings side by side: "oh, so it keeps retrying once the connection pool is full", "oh, nobody has been subscribed to that alert for months."
Learning this way has two structural problems. It's expensive: every lesson is bought with a real incident, and users have already paid. It's contaminated by hindsight: knowing the ending, people line up a string of signals that were ambiguous at the time into an "obvious" causal chain, then ask why nobody saw it. Reviews drift into blame and people start saying less.
Chaos experiments could move that learning to before the incident. But many teams treat them as "install a tool, kill random machines". Nobody states an expectation up front, so the result is "seems fine" and nothing is learned. Or the experiment causes a real incident, and it turns out nobody could have said what the system would do in the first place.
So the question here is: how do you use chaos engineering to create foresight, digging out the disagreements and blind spots in engineers' mental models before an incident does it for you?
The chapter splits an experiment into before (design), during (injection and observation) and after (analysis and learning). Tool vendors and most discussions concentrate on "during": how to inject, how to limit the blast radius, how to abort with one click. Fleener argues that the "before" phase produces a great deal of insight on its own, and it decides what you look at during the experiment and what you can learn afterwards.
The intuition is simple. Injection is just a button, but to press it a group of people first has to answer "what do we expect to happen?" Once that question is asked seriously, many answers arrive before the button is pressed: an alert that was never configured, or two senior engineers predicting opposite outcomes for the same path.
The chapter borrows a framework from resilience-engineering researcher Erik Hollnagel. A system shows resilience through four abilities: respond (handle what happens), monitor (know what to watch), learn (improve from experience) and anticipate (imagine what might happen).
Traditional reliability work mostly shores up the first three. Alerts cover monitoring, on-call and runbooks cover response, postmortems cover learning. Anticipation is the hardest to practise, because it asks people to think about something that hasn't happened yet. Designing a chaos experiment gives it a structured practice ground. "What happens if this dependency slows down by 2 seconds?" is, in effect, a review of an incident that hasn't happened yet.
Part I set up the premise: complex systems are too large for any one person to hold. Each engineer carries a partial model. The application engineer knows the retry logic, the database engineer knows the connection limits, the platform engineer knows how nodes get scheduled. These models differ from each other and are each out of date.
The design session puts those models on the same table. It digs out two kinds of finding:
The most practical part of the chapter is how to run this pre-experiment discussion. The key role is the facilitator, who is there to ask, follow up and record what each person says, not to supply answers. A good facilitator is often less familiar with the system: an outsider's questions are more likely to poke at things everyone assumes are obvious but nobody has checked.
The discussion covers four topics, roughly in this order:
The quality of the session depends on how questions are asked. Good questions are open and descriptive: "What do you think happens first?" "How would you notice?" "What happened last time?" Bad ones are closed or judgemental: "This should be fine, right?" "Why isn't there a circuit breaker?" The first kind opens up models. The second makes people defend themselves.
After the run, go back through the hypotheses written in the design session one by one. Which held, which were refuted, whose model needs updating? A refuted hypothesis isn't anyone's failure. It's a lesson that cost no incident. Feed the conclusions into procedures, alerts and architecture changes, then start the next design round. Each turn brings the team's shared picture of the system a little closer to reality.
First table: the ways a team can learn how its system fails.
| Approach | When you learn | What it surfaces | Main bias | Cost |
|---|---|---|---|---|
| Incident postmortem | After | The failure chain that actually happened | Hindsight bias, drifts to blame | Users already paid |
| Inject without design | During | "Seems fine", or an accidental incident | No expectation to compare against | Little learning, uncontrolled risk |
| Tabletop exercise | Before | Gaps in process and communication | Stays imaginary, never verified | Cheap, but conclusions untested |
| Design session + experiment | Before + during | Model disagreements and blind spots, then verified | Depends on facilitator; seniors can dominate | Hours per run, many people |
The design session is unusual because it joins imagining to verifying: a tabletop has only the first, raw injection only the second.
Second table: where the facilitator comes from.
| Who | Benefit | Cost |
|---|---|---|
| Senior engineer on the team | Knows the system, can judge on the spot | Tends to answer for everyone; their model becomes "the" answer |
| Engineer from a neighbouring team | Technical but unfamiliar here, so questions are naive enough | Needs background beforehand |
| Dedicated resilience / reliability team | Consistent questioning and note-taking craft, accumulates across teams | Limited headcount, can't cover every team |
Concrete choices:
Three lines to take into a design review. One: chaos engineering produces knowledge, not outages, and the biggest share of that knowledge comes before the experiment. Two: disagreements and unanswerable questions are the best pointers for choosing experiments. Three: a postmortem is learning after you've paid; a design session is learning before you pay.
Asked in an interview "how do you do chaos engineering?": "we use tool X to kill random instances weekly" is one level. "Before every experiment we hold a design session: walk through procedures, agree scope, have everyone write a hypothesis, pick the disagreements to test, then compare results and update the runbooks" is another. The second shows you understand that chaos engineering targets people's understanding of the system, not just the system.
Industry evidence
1. Core claim: much of a chaos experiment's value comes before injection. Designing it forces each person to state their expectations, and that is how foresight is created.
2. The pain: learning from postmortems is expensive and hindsight-biased, while random injection without design teaches little.
3. Framework: Hollnagel's four resilience abilities (respond, monitor, learn, anticipate). The design session trains the hardest one, anticipate.
4. Mental models: everyone touches one part of the elephant, and the models contradict each other and go stale. The session surfaces disagreements (best to test) and blind spots (often fixable without testing).
5. Four topics: understand operating procedures (work-as-imagined vs work-as-done) → discuss scope (which also sets the blast radius) → form falsifiable hypotheses (written privately first) → choose tools and give notice.
6. Facilitator: asks rather than answers, and an outsider's view breaks assumptions. Ask "how", not "why".
7. Choosing experiments: unanimous ones carry little information. Disagreements and unanswerable questions make good ones.
8. Pitfalls: approval-meeting mode, seniors speaking first, no recorded expectations. Foresight isn't prediction; unimagined combinations still need other tools.