Problem
Systems that pass functional tests can still fail in unforeseen ways when dependencies slow down, nodes die, or networks degrade. Teams discover weaknesses during real incidents, at the worst possible time.
Build confidence in system resilience by running controlled experiments that inject real failures.
Systems that pass functional tests can still fail in unforeseen ways when dependencies slow down, nodes die, or networks degrade. Teams discover weaknesses during real incidents, at the worst possible time.
Chaos engineering is disciplined experimentation on production-like systems. It is not random breakage: each experiment tests a specific belief about resilience, with controls that protect users.
The team states a steady-state metric, such as successful checkout rate above a threshold. They form a hypothesis that the metric holds when a fault is introduced, for instance when one availability zone becomes unreachable. A tool injects the fault into a small slice of the system while dashboards and automated abort conditions watch the steady state. If the hypothesis fails, the experiment halts, the team analyzes the cause, and fixes are prioritized. Over time, experiments expand in scope and are scheduled continuously.
# Chaos experiment definition
experiment: payments-latency
steadyState:
metric: checkout_success_rate
threshold: ">= 0.995"
fault:
type: latency
target: payments-service
delay: 800ms
percentage: 10
duration: 10m
abortIf:
metric: checkout_success_rate
below: 0.98
Teams adopt this approach when systems with redundancy and failover that have never been exercised; teams with solid monitoring and incident response. It is a poor fit when basic observability is missing, so effects cannot be measured, or when known weaknesses remain unfixed and an experiment would only confirm them. The central tensions are experiment realism vs customer risk; learning speed vs operational safety; automation vs deliberate human oversight. The main benefits are that it delivers: finds weaknesses before customers do; validates failover and recovery assumptions; builds team skill and confidence; creates a library of regression experiments. The main costs to budget for are: risk of real customer impact if poorly scoped; needs observability and cultural buy-in; takes engineering time away from features; results can be misread without clear hypotheses. Governance typically looks like this: experiments are approved, scoped, and scheduled with halt authority defined. Expect adoption cost to be medium: tooling, observability, and cultural investment, and a best fit for medium to large organizations running critical distributed systems. Critics point out that can be theater if findings are never fixed, and that poorly governed experiments risk causing the very outages they aim to prevent. Treat these concerns as design inputs, and revisit the decision as traffic, team size, and failure history change.