Book Deep Read · Chaos Engineering · Chapter 17
Chaos Engineering: System Resiliency in Practice · Ch 17 · Let's Get Cyber-Physical · 2020
In earlier chapters, the things we deliberately broke were websites and apps: the worst case was a small slice of people who couldn't load a video. But software now drives cars, flies aircraft, moves factory robot arms and runs medical devices. When a failure can hurt someone, can you still break things on purpose — and if so, how? That is this chapter.
The engineers who build cars and planes were "professionally studying how things break" decades before internet companies. Their classic method: sit down as a team, name every part one by one, and ask "How can it break? What happens then? How bad is it?" — and write it all into a big spreadsheet. The chapter's author argues that this old method and chaos engineering are natural partners who have barely been introduced.
The old method makes sure you've thought of the ways things can break; the new method proves your responses actually work. The results go back into the spreadsheet, which becomes a living document that keeps up with the system. One honest cost: however realistic a simulator is, it isn't the real world — and the closer you get to reality, the more each test costs and the more safeguards it needs.
Failures you imagine must be confirmed by experiment; for systems that can hurt people, experiments start in the simulator and on the practice track.
Want to see how FMEA scores risk, why software failures can't be given a probability, which level — simulation, bench or field — an experiment belongs on, and how to deal with the probe effect? → Switch to Deep
You think chaos engineering is something internet companies invented — in fact safety-critical industries have been systematically "imagining failure" for decades. This chapter argues the two complement each other: functional safety's FMEA thinks failures through on paper, and chaos engineering confirms that thinking by experiment. In a physical world where failures hurt people, experiments must start in simulation and on test benches, and must face the probe effect — the fact that observing a system changes it.
Chapter 17 of the book, in Part V "Evolution", written by Nathan Aschbacher. It follows Ch16 Continuous Verification — chaos engineering's end state in the web world — and pushes the practice outward into software that controls physical devices. It leads into Ch18, which revisits experiment design through the lens of Human and Organizational Performance.
A modern car often carries around a hundred electronic control units (ECUs), with code size commonly cited on the order of a hundred million lines; a drone's flight controller recomputes its attitude hundreds of times per second. Software is taking over control once done by mechanics and humans, and the unit of its failure is no longer "percentage of failed requests" but injuries.
These industries already have a mature practice — functional safety, governed by standards such as IEC 61508 (generic), ISO 26262 (automotive) and DO-178C (airborne software). Its core is hazard analysis before design, and analysis done thoroughly before building. The problems:
The chapter asks what chaos engineering can bring to functional safety — and how functional safety must constrain chaos engineering.
Functional safety works top-down. First identify hazards (say, "unintended acceleration"), assess severity, exposure and controllability, and derive safety goals and an integrity level (in automotive, ASIL, from A to D, increasingly strict). Then design a safety mechanism for each goal, and specify which safe state to fall back to on a fault.
The key cut is random vs systematic failure. Hardware components fail randomly, so redundancy can be calculated from failure rates. Software doesn't wear out; its defects exist from the moment they are written and recur under the same inputs and timing. So the standards don't ask for software probabilities; they backstop with process rigor — the higher the level, the more reviews, test coverage and tool qualification required. It also means whether software is safe can only be answered with evidence, not calculation — exactly where experiments come in.
Failure Mode and Effects Analysis (FMEA) is one of functional safety's workhorse tools, and runs the opposite way from a fault tree: bottom-up. For each component, ask four things: how can it fail (the failure mode)? What happens locally? What happens at the system level? What existing means detect or mitigate it?
Each row then gets three 1–10 scores: severity (S), occurrence (O) and detection (D, higher when harder to detect), multiplied into a risk priority number RPN = S × O × D (1 to 1000). In plain words: failures that are severe, frequent and hard to notice get fixed first.
The author's verdict on FMEA is two-sided. Its value: it forces a team to think about failure systematically and produces a list of "how we believe the system can fail and how we plan to respond". Its limits:
The chapter's central argument: every row of an FMEA is, at heart, an unverified hypothesis. "GPS lost → the system switches to inertial navigation and alerts the driver within the specified time" is a steady-state hypothesis that can be tested by experiment — exactly the input format of chaos engineering.
The two then form a loop. FMEA supplies failure modes worth testing and their expected mitigations; chaos experiments actually inject the fault and observe whether the mitigation works, how quickly, and whether knock-on effects appear that the sheet never listed; the results flow back into the FMEA — correcting severity and detection scores, adding newly discovered failure modes. FMEA turns from a one-off document into a living one continuously calibrated by experiment, and chaos engineering turns from "randomly hunting weaknesses" into targeted experiments guided by safety analysis.
This isn't an arbitrary graft: fault injection is already an accepted technique in safety engineering, and ISO 26262 lists fault injection testing among its recommended verification methods. The difference is the stance — traditionally it is often used as a confirmatory test (prove the designed mechanism triggers), while chaos engineering takes an exploratory stance (discover behavior you didn't anticipate).
Most CPS are real-time systems: a control loop must complete every few milliseconds, so timing is part of correctness. That creates a problem the web world rarely meets — the probe effect: code added to observe or inject faults consumes CPU and shifts scheduling and timing, changing the behavior of the system under test. Add one log line and a race condition may vanish; remove it and the bug returns. What your experiment verified may no longer be the system you ship.
The responses share one idea: don't let the "test build" and the "shipped build" diverge. Design observation and fault-injection hooks as a permanent part of the product — off by default, but shipped and certified with it; prefer low-overhead or hardware-assisted tracing; and measure the probe's own cost and include it in timing analysis.
The core trade-off for chaos experiments in CPS is experimental realism vs risk of harm. The web world measures blast radius in percentage of traffic; here it must be measured in "who could get hurt in the worst case".
Which level an experiment runs at (magnitudes illustrative)
| Level | Realism | Cost per run | Catches | Cost / blind spot |
|---|---|---|---|---|
| Pure simulation / SIL | Low–medium | Tiny; thousands of runs in parallel | Logic and state-machine bugs, combinatorial scenarios | Model-to-reality gap; unrealistic timing |
| HIL bench | Medium–high | Medium; few benches | Real controller timing, drivers, bus issues | Environment still simulated; benches are expensive |
| Closed track | High | High; people, vehicle, venue every time | Sensor noise, mechanical and environmental interaction | Limited scenarios; still needs a safety driver and independent e-stop |
| Controlled field / fleet | Highest | Very high | The real long tail | Harm may be irreversible; consider only with an independently guaranteed safe state |
Three ways to "think about failure"
| Method | Direction | Strong at | Blind spot |
|---|---|---|---|
| FMEA | Bottom-up: component → effect | Listing single-point failures exhaustively, prioritizing | Interaction and multi-fault failures; software occurrence is guessed |
| FTA | Top-down: accident → cause combinations | All paths to one serious accident | Only the top events chosen up front; still imagination |
| Chaos experiment | Empirical: inject → observe | Proving mitigations work, exposing unknown behavior | Only conditions that can be reproduced safely; subject to the probe effect |
Rule of thumb: use FMEA / FTA to decide what to test, and experiments to decide what to believe; start at the cheapest, safest level, and move up only when the next level has abort and safe-state guarantees independent of the system under test.
Autonomous driving, drones, robots, medical devices (IEC 62304) and industrial control are all becoming software-defined, and more backend engineers will write code that sits inside a control loop. When an architecture review asks "how do you know this fallback works?", this chapter's answer is: the FMEA says it works, a bench experiment proved it, and the result has been written back into the sheet.
Industry evidence
failure command is documented as "Inject failures into system.", with the example "Test the GPS failsafe by stopping GPS", and can inject off / stuck / garbage / delayed failures into GPS, battery, motors and more — while staying disabled by default behind the SYS_FAILURE_EN parameter: the capability is resident, but must be explicitly enabled. PX4 Autopilot · failure command source (github.com/PX4/PX4-Autopilot)① In CPS the cost of failure is physical harm; chaos engineering's execution must change, but its principles don't.
② Functional safety has long studied failure systematically: hazard analysis, safety goals, safe states, integrity levels.
③ Hardware fails randomly and can be given probabilities; software fails systematically and can only be answered with evidence.
④ FMEA lists failure modes bottom-up and ranks them by RPN = S × O × D; its blind spots are interaction and multi-fault failures.
⑤ Central argument: every FMEA row is a hypothesis to verify; chaos experiments confirm it and the results make it a living document.
⑥ Experiments climb simulation → HIL → closed track → controlled field, each level needing an independent abort guarantee.
⑦ Probe effect: observation changes a real-time system's timing; keep lightweight probes resident in the shipped build and budget their cost.
⑧ Evidence: PX4 builds in fault injection; Mars Pathfinder was debugged with resident tooling; the Uber crash is the counter-example of missing independent fallback.