Simple vs. Complex
If a car engine stops working, you can usually take it apart and find the one broken part — a snapped belt, a blown fuse. Replace that part, and the car works again. This is a Complicated System: many parts, but cause and effect are linear and traceable.
If a traffic jam forms on a highway, you cannot take it apart to find the "broken car" that caused it. The jam is an emergent property — it arises from thousands of drivers interacting with each other, with road geometry, with weather, with time of day. No single driver "caused" it. This is a Complex System.
Cloud Infrastructure Is a Complex System
Modern software — microservices, Kubernetes clusters, distributed databases, event-driven pipelines — behaves like the traffic jam, not the car engine. Components interact in ways their designers never anticipated. A slow database query triggers a retry storm. A retry storm exhausts a connection pool. An exhausted connection pool causes a health check to fail. A failed health check triggers an autoscaler. The autoscaler spins up new nodes that all try to warm their caches simultaneously, hammering the database further.
No single component "broke." The failure was the system's behavior, not any part's behavior.
When complex systems fail, we instinctively reach for Linear Thinking — hunting for the one broken part, the one bad actor, the one wrong decision. This instinct is wrong, and acting on it leaves the real dangers untouched.
This topic explores Complex Systems Theory, the intellectual foundation of modern Site Reliability Engineering (SRE) and the lens through which the best incident commanders understand failure.