KyoMel / Yogyakarta, Indonesia

Term 310310 / 344

Chaos Engineering

Month
August 2026
Day
31
Source
2026/august-term.md

Definition:

Chaos Engineering is the discipline of running controlled, hypothesis-driven experiments that intentionally inject faults (failures, latency, overload, oracles) into a running production system, in order to discover weaknesses before real incidents do and build confidence that the system can withstand turbulent conditions.

It’s not “randomly breaking stuff for fun.” The core idea (from the Principles of Chaos manifesto by Netflix engineers, originators of Chaos Monkey in 2011): a system’s resilience can’t be proven by design review alone — you must continuously verify it against the actual, messy, distributed behavior of production. Since you can’t predict every failure mode, you deliberately trigger a subset of them on purpose, on your own terms, at a time and scale you control.

A proper chaos experiment follows a scientific loop (an extended “hypothesis → test → measure” cycle):

  STEADY STATE            HYPOTHESIS                 INJECT FAULT
  (define normal:         (e.g. "if a pod         (e.g. kill 1 of 3
   latency p95 < 200ms,    dies, traffic            replicas / add 300ms
   error rate < 0.1%)      still served")           latency / CPU spike)
        |                       |                        |
        v                       v                        v
  [observe baseline]     [predict the impact]      [run experiment]
                                                          |
                                                          v
                        +----------------------------+  MEASURE
                        |  steady state preserved?   |---------> compare vs baseline
                        |  hypothesis validated?     |
                        +----------------------------+
                              |             |
                            YES            NO
                             |             |
                             v             v
                        CONFIDENCE     FOUND A WEAKNESS
                        (resilient)    -> fix, harden,
                                         re-test (game day)

Contrast with the naive “hope it never breaks” approach:

   NAIVE (reactive)                    CHAOS ENGINEERING (proactive)
   ---------------------------------   ---------------------------------
   "Don't touch prod."                 "Break prod on purpose, safely."
   Failures happen at 3am,             Failures happen during a
   during a real launch,               scheduled game day, during
   unannounced, full blast.            work hours, in small blast radius.
   => firefight, post-mortem           => incident you chose to run,
   for every outage                     with a hypothesis, in a box
   REACT to surprises                  ANTICIPATE + verify
   low confidence                      high confidence

Key principles: (1) blast radius — start tiny (one pod, one region, a sample of traffic) and expand gradually; (2) hypothesis first — never inject without a predicted steady-state; (3) automation + observability — pair faults with metrics, traces, and SLOs so you can measure the impact objectively; (4) game days — formal, scheduled practice sessions where teams rehearse incident response.

Pros: surfaces real unknown unknowns, trains on-call muscle memory, hardens redundancy (multiple AZs, retries, fallbacks), converts brittle assumptions into proven behavior, reduces Mean Time To Recovery (MTTR). Cons: inherently risky in production (must be gated by blast radius + rollback), requires mature observability to be meaningful, can create fatigue if run too often, needs cultural buy-in and dedicated time/tooling (Gremlin, Litmus, Chaos Mesh, chaos-toolkit).

Example:

A payments platform runs 6 replicas of its checkout service across 3 availability zones (2 per zone). The SRE team writes a hypothesis: “If one AZ goes down entirely, p95 checkout latency stays under 400ms and error rate stays under 1%.” They run a controlled experiment using a chaos tool that blocks network traffic to the whole AZ for 5 minutes while monitoring dashboards.

        USERS
          |
          |   requests
          v
   [Load Balancer]
        |   |   |
        |   |   +----------- AZ-B (healthy)
        |   +--------------- AZ-A (healthy)
        +------------------- AZ-C <<< FAULT: network cut injected here >>
                              |
                              x  (no traffic reaches replicas here)
                              x

   WITHOUT the test: AZ-C dies silently at peak hour => surge into A+B,
   latency spikes, retry storms, maybe outage.
   WITH chaos test (now): balancer fails over to A+B, RPS redistributes,
   p95 stays ~320ms, error <0.3%  => hypothesis VALIDATED => confidence++

   Measure & compare:
   baseline p95 280ms  |  during-fault p95 320ms  |  SLO 400ms  => PASS
   baseline err  0.1%  |  during-fault err  0.3%  |  SLO 1.0%   => PASS

Because the team chose to cut that AZ during a calm window with a rollback ready, they learned exactly how the failover behaves — and discovered one replica didn’t drain connections cleanly, which they then fixed. The same failure in a real outage would have been a customer-facing incident; here it was a learning, not a crisis.

Keep reading