Normal Accidents at Cloud Scale
TL;DR A cascading failure is not a freak accident, but a structural inevitability in systems characterized by tight coupling and interactive complexity. By applying Charles Perrow’s "Normal Accident" theory to the October 2025 AWS outage, engineering leaders can identify how redundancy—intended to prevent failure—often becomes the primary trigger for system-wide collapse.
In 1984, sociologist Charles Perrow published Normal Accidents: Living with High-Risk Technologies. He argued that in certain systems, multiple failures will interact in ways that are impossible to predict, and the resulting catastrophe is actually "normal"—not because it is frequent, but because it is an inherent property of the system's design. Perrow was writing about nuclear power plants and petrochemical facilities, but he could easily have been describing a modern AWS region.
Two failures, forty-one years apart
The 1979 partial meltdown at Three Mile Island and the October 2025 AWS outage in us-east-1 share a nearly identical DNA. At Three Mile Island, a simple stuck valve was misinterpreted because of "interactively complex" instrumentation, leading operators to shut off the very cooling pumps needed to prevent a meltdown.
Fast forward to 2025: a cascading failure began when a DNS management automation—built specifically to ensure high availability—experienced a race condition. This automation, designed to keep the system resilient, instead wiped the DNS record for a core DynamoDB endpoint. Just as the nuclear operators' safety protocols became the hazard, AWS's redundancy mechanisms became the catalyst for a 15-hour outage that sidelined over 140 services.
Perrow's two axes in plain engineering terms
To understand why your stack is at risk, you must map it against Perrow's two critical axes:
- Interactive Complexity: This occurs when system components can interact in ways that are not visible or planned. In a microservices mesh, this is the "spaghetti" of hidden dependencies.
- Tight Coupling: This refers to systems with no slack. A failure in one part leads immediately to a failure in the next, with no time for intervention.
Most modern cloud architectures live in the "High Complexity / Tight Coupling" quadrant. This is the danger zone. According to ControlHorizon, Perrow’s framework suggests that in these environments, adding "safety" systems actually increases complexity and adds new failure modes, making the system more dangerous, not less.
Walking the DynamoDB DNS cascade through the framework
The October 2025 outage is the cleanest modern illustration of a cascading failure born from this quadrant. According to analysis from ThousandEyes and The Register, the sequence was a textbook "normal accident":
- The Trigger: Two redundant "DNS Enactors" (automation agents) entered a race condition while updating a DynamoDB endpoint.
- The Interaction: Instead of one agent succeeding, they effectively nullified the record.
- The Coupling: Without the DNS record, internal Data Warehouse Fleet Management (DWFM) leases timed out. Because the system was "tightly coupled," these timeouts weren't isolated; they triggered a recursive failure.
- The Cascade: EC2, Lambda, and S3 depend on DynamoDB for configuration or state. As they failed, the management console also went dark.
The incident lasted 15 hours because the very tools engineers needed to fix the problem were themselves victims of the tight coupling.
Key Takeaway: Cascades are not freak events but the predictable product of tight coupling plus interactive complexity; audit your couplings and treat every new piece of safety automation as new coupling to be budgeted.
The redundancy paradox
The most counterintuitive part of Perrow's theory is that redundancy is a risk. In the AWS case, having two DNS Enactors was the vulnerability. This is the redundancy paradox: adding a backup system increases the number of parts that can fail and the number of ways they can interact.
When you add a failover script, an auto-scaling group, or a retry policy, you are adding coupling. If the retry policy isn't perfectly configured with jitter and backoff, it becomes a self-inflicted DDoS attack during a minor blip, turning a flicker into a total cascading failure.
The ~500-service problem
As systems grow, the "interactive complexity" scales non-linearly. Slava Akhmechet recently highlighted that modern cloud providers consist of ~500 recursively dependent services.
In this environment, your error is often three or four dependencies removed from its actual cause. According to Akhmechet's thread, the depth of these dependency trees means that no single human can fully visualize the blast radius of a single configuration change. You are operating in a system where the "normal" state is a precarious balance of invisible dependencies.
What you can actually do: A coupling audit
You cannot eliminate complexity in modern software, but you can manage coupling. Use this checklist to audit your architecture:
- Dependency Inventory: Map not just what you call, but what they call. Identify "circular dependencies" where Service A needs Service B, which needs a database that authenticates via Service A.
- Static Stability: Design services to continue working using cached data if their dependencies vanish. This "loosens" the coupling.
- Blast-Radius Mapping: If your DNS provider goes down, does your internal monitoring also die? If so, you are too tightly coupled.
- Kill Switches for Automation: Every piece of "safety automation" needs a manual override that is physically separated from the system it manages.
What Perrow would say about AI operating agents
As the industry moves toward using AI agents to manage production environments, Perrow's lens offers a stark warning: new automation equals new coupling. If an AI agent has the authority to autonomously apply fixes to a tightly coupled system, it becomes another "DNS Enactor"—a potential source of a cascading failure.
This is why the most resilient path forward involves "read-only" AI. Perrow’s framework argues for operating agents that observe everything but touch nothing without human validation. A system that provides a read-only diagnosis and drafts a pull request for human review adds massive investigative capacity without increasing the interactive complexity of the production runtime.
Sources & further reading
- According to ThousandEyes, the us-east-1 outage was characterized by a massive drop in DNS resolution success for internal AWS endpoints.
- The Pragmatic Engineer notes that the interdependence of AWS services makes "Region Isolation" more of a goal than a current reality.
- As detailed in Wikipedia's entry on System Accidents, Perrow's theory remains the foundational text for understanding why high-tech systems fail despite our best efforts.
Building Resilience Without the Risk
The goal of modern SRE is not just to automate, but to automate in a way that respects the limits of coupling. This is why Operate is built as a self-hosted platform that emphasizes auditability and human-in-the-loop fixes. By acting as a sophisticated, read-only observer that finds root causes and drafts PRs for human approval, Operate provides the investigative speed of AI without adding the "tight coupling" risks of autonomous action. It allows your team to catch the sparks before they become a cascading failure, all while keeping the control exactly where it belongs.