Hermes Wiki

Chaos Engineering

Concept

Chaos engineering is the practice of deliberately injecting failure into a system — killing instances, dropping network calls, simulating an entire region outage — to verify it actually survives failure modes it was designed to tolerate, instead of assuming it does. Netflix pioneered the practice with Chaos Monkey (randomly terminates instances in production) and later Chaos Kong (simulates an entire AWS region failure), run deliberately during working hours so engineers can respond immediately if something breaks.

The discipline follows a scientific-method structure, not random destruction:

  1. Define a steady-state hypothesis — a measurable baseline for "the system is behaving normally" (e.g., Netflix's streams-per-second metric).
  2. Introduce a real-world failure event (not a synthetic/idealized one) — an AZ outage, a dependency timeout, a resource exhaustion condition.
  3. Try to disprove the hypothesis by comparing steady-state behavior between a control group and the group experiencing the injected failure.
  4. Automate the experiment with a bounded, ever-shrinking blast radius, so a genuinely bad outcome is caught and contained quickly rather than taking down all of production.

Tradeoffs

Aspect Cost Benefit
Running experiments in production Real risk of a genuine incident if blast-radius controls are wrong The only environment where "does this actually fail over correctly" is a true answer — staging never has real traffic patterns or real dependency load
Automation investment Significant engineering effort to build safe, bounded experiment tooling Turns "we hope the failover works" into "we verify the failover works, continuously"
Organizational buy-in Requires convincing stakeholders that deliberately breaking production is worth it Surfaces false assumptions about resilience (a "redundant" dependency that turns out not to be) before a real outage does

The core tradeoff is trust: teams that skip chaos engineering are trusting that a resilience design (multi-AZ failover, retry/circuit-breaker logic, graceful degradation) works as intended, without ever having verified it under a real, controlled failure. Chaos engineering converts that trust into evidence — at the cost of deliberately accepting some risk to obtain it.

When to use / when not to

  • Use once a system has resilience mechanisms worth verifying — failover, retries, circuit breakers, multi-AZ/region redundancy — chaos engineering is how you find out if they actually work, rather than assuming the architecture diagram is reality.
  • Start small and non-production if the org has zero chaos engineering maturity — a staging-environment failure injection, or a scoped game-day exercise, builds the muscle (and the safety tooling) before graduating to real production experiments.
  • Don't run unbounded, unautomated chaos experiments in production without blast-radius controls and a rollback plan — that's just causing an incident, not engineering one.
  • Don't bother with formal chaos engineering for a system with no redundancy to test in the first place — there's nothing to disprove if the system has a single point of failure by design; fix that first.

Common pitfall

Running chaos experiments as one-off "game days" rather than continuous, automated practice. A system's dependencies, traffic patterns, and configuration change constantly — a resilience mechanism verified once in a quarterly game day can silently regress (a new dependency added without a timeout, a retry policy misconfigured in a later deploy) and nobody finds out until the next scheduled exercise, or worse, a real outage. The Netflix model treats it as always-on background verification, not a periodic audit.

Engineering Lens

Chaos engineering is a direct test of whether resilience claims made in an architecture review are actually true. The Principal-level move is treating "we have multi-AZ failover" as a hypothesis to be verified, not a fact to be assumed — and being able to say, concretely, "here's the last time we tested that this dependency's failure doesn't cascade" rather than pointing at a diagram. That distinction — designed-for-resilience versus verified-resilient — is exactly the kind of rigor that separates confident-sounding architecture from architecture that's actually been proven under failure.

Sources

Hermes Wiki