Evidence ledger
One row per claim in Keeping one failure from reaching everyone: who published it, what grade it carries, when it was written, when the link was last checked, and the quote or figure it rests on. Nothing in the guide is cited from memory, so anything not in this table is not in the guide.
Topic: how production systems partition themselves so one failure reaches a fraction of users, and why the containment keeps leaking through whatever stayed global.
Research date: 2026-08-29. Every URL below was fetched during that session; the Checked
column records it. One row per claim. Quotes are copied, not paraphrased.
| # | Org | Title | Tier | Published | Checked | URL | Claim I take from it | Supporting quote or figure |
|---|---|---|---|---|---|---|---|---|
| 1 | AWS | Summary of the Amazon DynamoDB Service Disruption in the Northern Virginia (US-EAST-1) Region | postmortem | 2025-10 | 2026-08-29 | https://aws.amazon.com/message/101925/ | The routing layer, not a cell, was the single point of failure: an empty DNS record for the regional endpoint made every cell behind it unreachable. | "a latent race condition in the DynamoDB DNS management system that resulted in an incorrect empty DNS record" for dynamodb.us-east-1.amazonaws.com. |
| 2 | AWS | Same | postmortem | 2025-10 | 2026-08-29 | https://aws.amazon.com/message/101925/ | Two redundant actors operating on shared global state produced the failure; redundancy in the change path is not isolation. | The DNS Enactor runs "redundantly across three Availability Zones"; a delayed Enactor applied "a much older plan", overwriting the newer one, and cleanup then deleted it, "removing all IP addresses for the regional endpoint". |
| 3 | AWS | Same | postmortem | 2025-10 | 2026-08-29 | https://aws.amazon.com/message/101925/ | Recovery, not the fault, produced the long tail: EC2's lease manager could not converge once the dependency returned. | "DWFM had entered a state of congestive collapse and was unable to make forward progress." DynamoDB DNS restored 02:25 PDT; EC2 throttling lifted 13:50 PDT. |
| 4 | Cloudflare | Cloudflare outage on November 18, 2025 | postmortem | 2025-11-18 | 2026-08-29 | https://blog.cloudflare.com/18-november-2025-outage/ | A config artefact regenerated every few minutes and pushed to the whole fleet is a global change plane, whatever the request path looks like. | The Bot Management feature file "is refreshed every few minutes and published to the entire network"; a ClickHouse permissions change made the generating query return duplicate rows because "the query does not filter for the database name". |
| 5 | Cloudflare | Same | postmortem | 2025-11-18 | 2026-08-29 | https://blog.cloudflare.com/18-november-2025-outage/ | A hard limit plus an unchecked unwrap turns oversized input into a fleet-wide crash. | "the Bot Management system has a limit on the number of machine learning features that can be used at runtime. Currently that limit is set to 200"; the proxy "called Result::unwrap() on an Err value". |
| 6 | Cloudflare | Same | postmortem | 2025-11-18 | 2026-08-29 | https://blog.cloudflare.com/18-november-2025-outage/ | Gradual rollout of the upstream change made the failure intermittent, which delayed diagnosis and mimicked an attack. | "Every five minutes there was a chance of either a good or a bad set of configuration files being generated." Impact 11:20 UTC, core traffic normal 14:30, all systems 17:06. |
| 7 | Datadog | 2023-03-08 Incident: Infrastructure connectivity issue affecting multiple regions | postmortem | 2023-03 | 2026-08-29 | https://www.datadoghq.com/blog/2023-03-08-multiregion-infrastructure-connectivity-issue/ | Five regions on three clouds failed simultaneously because they shared an OS update channel and a default update window, not a network. | "The time at which the automatic update happens is set by default in the OS to a window between 06:00 and 07:00 UTC. Thus it affected multiple regions at the exact same time, even though the regions have no direct network connection or coupling between them." |
| 8 | Datadog | Same | postmortem | 2023-03 | 2026-08-29 | https://www.datadoghq.com/blog/2023-03-08-multiregion-infrastructure-connectivity-issue/ | The mechanism was a latent interaction only reachable on a running node, so no boot-time test would find it. | "systemd-networkd forcibly deleted the routes managed by the Container Network Interface (CNI) plugin (Cilium)"; "Neither a fresh node nor a rebooted node exhibit this behavior". Affected "tens of thousands of nodes in our fleet between 06:00 and 07:00". |
| 9 | The Pragmatic Engineer | Inside Datadog's $5M Outage | blog | 2023-05-16 | 2026-08-29 | https://newsletter.pragmaticengineer.com/p/inside-the-datadog-outage | Independent estimate of the cost and the size of the response, and confirmation that the shared artefact was the OS image. | "$5 million" in lost revenue, "about a day's worth of revenue"; "Between 500 - 600 engineers working tirelessly"; same OS image used across cloud providers. |
| 10 | Roblox | Roblox Return to Service 10/28-10/31 2021 | postmortem | 2022-01 | 2026-08-29 | https://about.roblox.com/newsroom/2022/01/roblox-return-to-service-10-28-10-31-2021 | One shared coordination cluster is the whole blast radius; the fix is stated as partitioning it. | "A single Consul cluster supporting multiple workloads exacerbated the impact of these issues." 73-hour outage, 28-31 October 2021. |
| 11 | Roblox | Same | postmortem | 2022-01 | 2026-08-29 | https://about.roblox.com/newsroom/2022/01/roblox-return-to-service-10-28-10-31-2021 | Observability inside the failure domain extends the outage, because the detector dies with the thing it watches. | "There was a circular dependency between our telemetry systems and Consul, which meant that when Consul was unhealthy, we lacked the telemetry data that would have made it easier for us to figure out what was wrong." |
| 12 | CrowdStrike | Channel File 291 Incident Root Cause Analysis | postmortem | 2024-08-06 | 2026-08-29 | https://www.crowdstrike.com/wp-content/uploads/2024/08/Channel-File-291-Incident-Root-Cause-Analysis-08.06.2024.pdf | Content shipped through a channel deliberately built to bypass staged release will reach every host at once. | "The new IPC Template Type defined 21 input parameter fields, but the integration code that invoked the Content Interpreter... only supplied 20." Mitigation 6: "Template Instances should have staged deployment." |
| 13 | CrowdStrike | Same | postmortem | 2024-08-06 | 2026-08-29 | https://www.crowdstrike.com/wp-content/uploads/2024/08/Channel-File-291-Incident-Root-Cause-Analysis-08.06.2024.pdf | The remediation is a ring topology on the change path, plus giving the customer control of their own ring. | "Template Instances that have passed canary testing are to be successively promoted to wider deployment rings or rolled back if problems are detected." Plus: "Provide customer control over the deployment of Rapid Response Content." |
| 14 | Amazon / USENIX | Millions of Tiny Databases (Physalia), NSDI '20 | paper | 2020-02 | 2026-08-29 | https://www.usenix.org/conference/nsdi20/presentation/brooker | Cells are the primary blast-radius tool, and independence is bought deliberately at the cost of a separate control plane. | §2.1: "The division of a colony into a large number of cells is our main tool for reducing radius in Physalia." "We chose to keep our cells completely independent, and implement the control plane as a seperate system." |
| 15 | Amazon / USENIX | Same | paper | 2020-02 | 2026-08-29 | https://cdn.amazon.science/c4/11/de2606884b63bf4d95190a3c2390/millions-of-tiny-databases.pdf | Cell size is a trade-off between random and correlated failure, not a free dial; EBS's Physalia uses seven nodes. | §2.2: "the cell performs Paxos over seven nodes"; "smaller cells offer lower availability in the face of small numbers of uncorrelated node failures, but better availability when the proportion of node failure exceeds 50%." |
| 16 | Amazon / USENIX | Same | paper | 2020-02 | 2026-08-29 | https://cdn.amazon.science/c4/11/de2606884b63bf4d95190a3c2390/millions-of-tiny-databases.pdf | The paper names the failure class cells do not contain, and introduces a second, orthogonal partition (colors) for the change path. | §3.4: "Each cell is assigned a color, and each cell is constructed only of nodes of the same color... When software deployments and other operations are performed, they proceed color-by-color." "Nodes of different colors don't communicate with each other, making it significantly less likely that a poison pill or overload could spread across colors." |
| 17 | Amazon / USENIX | Same | paper | 2020-02 | 2026-08-29 | https://cdn.amazon.science/c4/11/de2606884b63bf4d95190a3c2390/millions-of-tiny-databases.pdf | Replication makes staged rollout weaker, not stronger, because a fault-tolerant system hides the canary signal. | §3.3: "The fault-tolerant nature of distributed state machines makes this approach less effective: because the system is designed to tolerate failure in less than half of hosts, failure may not be evident until new code is deployed to half of all hosts." |
| 18 | Amazon / USENIX | Same | paper | 2020-02 | 2026-08-29 | https://cdn.amazon.science/c4/11/de2606884b63bf4d95190a3c2390/millions-of-tiny-databases.pdf | Operations, not hardware, dominate downtime; this is the stated reason colors exist. | §3.4: "operations, including code and configuration deployments, routine system operations such as security patching, and scaling for increased load, are dominant contributors to system downtime". |
| 19 | Microsoft Research | Gray Failure: The Achilles' Heel of Cloud-Scale Systems, HotOS '17 | paper | 2017-05 | 2026-08-29 | https://www.microsoft.com/en-us/research/wp-content/uploads/2017/06/paper-1.pdf | The formal definition of the failure mode that makes automatic containment fail: the detector and the caller disagree. | §3.2: "a system is defined to experience gray failure when at least one app makes the observation that system is unhealthy, but observer observes that system is healthy." |
| 20 | Microsoft Research | Same | paper | 2017-05 | 2026-08-29 | https://www.microsoft.com/en-us/research/wp-content/uploads/2017/06/paper-1.pdf | Under fan-out, redundancy raises the probability that a request touches the degraded component. This is why one bad AZ degrades everything. | §2.1 "High redundancy hurts": with n core switches and fan-out m, the chance a request traverses a given switch is 1-((n-1)/n)^m, which "rapidly approaches 100% as m becomes large... increasing redundancy can counter-intuitively hurt availability". |
| 21 | AWS | ARC411-R1: Reducing blast radius with cell-based architectures, re:Invent 2019 | talk | 2019-12 | 2026-08-29 | https://d1.awsstatic.com/events/reinvent/2019/REPEAT_1_Reducing_blast_radius_with_cell-based_architectures_ARC411-R1.pdf | The canonical cell definition and the router rule, from AWS's own practice. | Slide "What is a cell?": "Fixed amount of resources / Well-defined function / No calling other cells / Will not expand / Diverse". Slide "Router properties": "Keep it simple!", "Thinnest possible layer". |
| 22 | AWS | Same | talk | 2019-12 | 2026-08-29 | https://d1.awsstatic.com/events/reinvent/2019/REPEAT_1_Reducing_blast_radius_with_cell-based_architectures_ARC411-R1.pdf | Small versus large cells is the sizing decision, and the trade is blast radius against cost and operational load. | Slide 9: smaller cells give "Reduced blast radius / Easier to test / Cells easier to operate"; larger cells give "Cost efficiency / Reduced splits / System easier to operate". |
| 23 | Slack / InfoQ | Slack's Migration to a Cellular Architecture (Cooper Bethea, QCon SF 2024) | talk | 2025-05-02 | 2026-08-29 | https://www.infoq.com/presentations/slack-cellular-architecture/ | The migration's binding constraint was money and organisational coordination, not design. | "If we're paying double for the site the whole time, we're going to get broke." Drain time of 60 seconds for siloed services; some critical services took "a year, or more than a year". |
| 24 | Slack | Slack's Migration to a Cellular Architecture | blog | 2023-08 | 2026-08-29 | https://slack.engineering/slacks-migration-to-a-cellular-architecture/ | The trigger was a partial AZ fault that no health check caught, on 30 June 2021. | "A network link that connects one availability zone with several other availability zones containing Slack servers experienced intermittent faults"; "systems within the impacted AZ saw complete availability of backends within their AZ, but backends outside the AZ were unavailable, and vice versa". |
| 25 | Slack | Same | blog | 2023-08 | 2026-08-29 | https://slack.engineering/slacks-migration-to-a-cellular-architecture/ | The design is siloing plus a fast, granular drain, and the drain is the product, not the cells. | "All services are present in all AZs, but each service only communicates with services within its AZ." "Propagation through the control plane is on the order of seconds"; "Weights provide gradual drains with a granularity of 1%." |
| 26 | Slack | Same | blog | 2023-08 | 2026-08-29 | https://slack.engineering/slacks-migration-to-a-cellular-architecture/ | Legacy discovery interfaces are the practical obstacle to draining, because DNS cannot express a partial drain. | "DNS does not offer an abstraction for something like an AZ or partial draining." |
| 27 | Shopify | A Pods Architecture To Allow Shopify To Scale | blog | 2019 | 2026-08-29 | https://shopify.engineering/a-pods-architecture-to-allow-shopify-to-scale | Sharding alone does not isolate; the isolation came from making a request need exactly one shard. | "A pod consists of a set of shops that live on a fully isolated set of datastores." Before pods: "If any of our shards went down, that entire action would be unavailable across the platform." After: "serving a request only requires a single pod to be online". |
| 28 | Salesforce | Architectural Principles for High Availability on Hyperforce | blog | 2022-08-10 | 2026-08-29 | https://engineering.salesforce.com/architectural-principles-for-high-availability-on-hyperforce/ | Cells and AZs are composed, not substituted: a cell spans AZs, and cells stagger deployment. | "A cell is a collection of services serving a group of our customers... deployed across multiple availability zones for redundancy within the cell and is isolated from other cells." Deployment: "canary on a small set of cells, and then stagger the deployment across other cells." |
| 29 | InfoQ / DoorDash | DoorDash Uses Service Mesh and Cell-Based Architecture to Significantly Reduce Data Transfer Costs | blog | 2024-01-23 | 2026-08-29 | https://www.infoq.com/news/2024/01/doordash-service-mesh/ | The motive for cells here was cross-AZ data-transfer cost, and resilience was the by-product. | Each microservice is "deployed exclusively to one cluster within a given cell"; zone-aware routing via Envoy; the saving "caused our cloud provider to reach out to us asking whether we were experiencing a production-related incident". |
| 30 | InfoQ / DoorDash | Same | blog | 2024-01-23 | 2026-08-29 | https://www.infoq.com/news/2024/01/doordash-service-mesh/ | Zone affinity has to hold across every hop, and the visibility to prove it does not exist off the shelf. | "As microservice call graph hops increase, ensuring all hops support zone-aware routing becomes more complex"; "It's challenging to build a comprehensive understanding/view of all cross-AZ traffic." |
| 31 | Kubernetes | KEP-2433: Topology Aware Hints | adr | 2021 | 2026-08-29 | https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/2433-topology-aware-hints/README.md | The platform's zone affinity is explicitly a preference built on an assumption about traffic, and it disables itself. | Assumes "Incoming traffic is proportional to the number of allocatable CPU cores in a zone". "Hints will not be added for a Service unless the expected initial overload is below 20%"; "if any endpoints for a Service do not have a hint, kube-proxy will ignore all hints." |
| 32 | Kubernetes | KEP-4444: Traffic Distribution for Services | adr | 2024-2026 | 2026-08-29 | https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/4444-service-traffic-distribution/README.md | The heuristic approach was superseded because it was unpredictable in practice; users could not tell whether it was on. | "While designed for intelligent routing, this mode offers less user control and can be less predictable. Users filed issues reporting that hints weren't being applied or didn't function as expected." Alpha 1.30, beta 1.31, GA 1.33. |
| 33 | Kubernetes | Topology Aware Routing (docs) | vendor | 2026 | 2026-08-29 | https://kubernetes.io/docs/concepts/services-networking/topology-aware-routing | The five documented conditions under which zone affinity silently stops applying. | "If any node does not have a topology.kubernetes.io/zone label or is not reporting a value for allocatable CPU, the control plane does not set any topology-aware endpoint hints"; "This approach will not work well for Services that have a large proportion of traffic originating from a subset of zones." |
| 34 | Kubernetes | core/v1: deprecate Service topologyKeys (PR #96736) | source | 2020-12-09 | 2026-08-29 | https://github.com/kubernetes/kubernetes/pull/96736 | The explicit, user-specified topology API was rejected; the replacement is automatic and advisory. | "Deprecate the topologyKeys field in Service. This capability will be replaced with upcoming work around Topology Aware Subsetting and Service Internal Traffic Policy." Deprecated 1.21, removed 1.22. |
| 35 | Envoy | Issue #28419: Zone-aware load balancing incorrectly handles mismatched local and upstream localities | source | 2023-07-16 | 2026-08-29 | https://github.com/envoyproxy/envoy/issues/28419 | Zone affinity in the mesh was wrong whenever zone membership was asymmetric, which is the normal case. | Three bugs reported, including that sorting "collapses empty localities, misaligning locality-to-index mappings" so that "despite zones C and D being interchangeable" one receives more traffic. Fixed via PR #28970 (Envoy 1.28.0). |
| 36 | Envoy | Issue #43665: Proposal, ORCA-driven locality routing | source | 2026-02-26 | 2026-08-29 | https://github.com/envoyproxy/envoy/issues/43665 | Zone-aware routing still routes on host counts, not load, so uneven demand produces hotspots inside a zone. | "Zone-aware routing decides what percentage of traffic to keep local vs remote based on healthy host counts (default) or host weights. It has no visibility into actual backend load." |
| 37 | Istio | Issue #18500: support zone aware routing of envoy | source | 2019-10-31 | 2026-08-29 | https://github.com/istio/istio/issues/18500 | A six-year-old request that never landed as Envoy's zone-aware routing; the mesh offers locality weights instead, which imbalance under unequal replicas. | Locality weighted load balancing "may causes imbalance across all upstream hosts if replicas of a service is NOT equal in each zones." |
| 38 | AWS | guidance-for-cell-based-architecture-on-aws (reference implementation) | source | 2023-2026 | 2026-08-29 | https://github.com/aws-solutions-library-samples/guidance-for-cell-based-architecture-on-aws | Even the vendor's own reference pipeline canaries one cell then updates the rest together. | The pipeline "first updates the sandbox cell, checks it for aliveness and then updates all other cells." |
| 39 | AWS | Well-Architected: Reducing the Scope of Impact with Cell-Based Architecture | vendor | 2023-09-20 | 2026-08-29 | https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/reducing-scope-of-impact-with-cell-based-architecture.html | AWS positions cells as the workload-level version of the AZ and Region isolation boundaries. | "bringing the same fault isolation concepts that AWS applies in its Availability Zones and Regions to the level of your workload architecture". Published 20 September 2023. |
| 40 | AWS | Well-Architected: Cell design | vendor | 2023-09 | 2026-08-29 | https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-design.html | The stated ideal is total independence, and the stated reality is that cross-cell dependencies destroy the benefit. | "Cells should have no dependency on each other at all (that is, no cross-cell API calls, no shared resources like databases or S3 buckets.)... Cross-cell dependencies can quickly eliminate the benefits of a cellular architecture". |
| 41 | AWS | Well-Architected: Cell partition | vendor | 2023-09 | 2026-08-29 | https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-partition.html | The partition key must match the grain of the workload, and a single large tenant breaks a naive customer-ID key. | "Partition keys must be chosen to match the grain of the service"; on CustomerID: "a single customer of yours becomes so big that it doesn't fit into a single cell anymore". Cross-cell calls should "go back through the normal cell router". |
| 42 | AWS | Well-Architected: Cell deployment | vendor | 2023-09 | 2026-08-29 | https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-deployment.html | AWS states the wave rule explicitly, and states the operational cost of cells honestly. | "deploy in waves, cell by cell or set of cells"; "now you have tens, hundreds or even thousands of instances of your workload to deploy and operate... it is a very complex challenge to deploy in a production environment." |
| 43 | AWS | Overview of Data Transfer Costs for Common Architectures | vendor | 2021-06-30 | 2026-08-29 | https://aws.amazon.com/blogs/architecture/overview-of-data-transfer-costs-for-common-architectures/ | Same-AZ traffic is free and cross-AZ traffic is charged, which is the economic force behind AZ-shaped cells. | "Data transfer within the same Availability Zone is free"; cross-AZ communication incurs data transfer charges. |
| 44 | Kubernetes | Issue #113731: Support topology aware routing (node and zone) | source | 2022-11-08 | 2026-08-29 | https://github.com/kubernetes/kubernetes/issues/113731 | The community's own statement of why the hints heuristic is not a boundary: it is non-deterministic and can disable itself wrongly. | "Sometimes the CPU-balance heuristic is wrong. For example, if we know that the whole zonal CPU pool does not model the set of clients which will access a service, then we may erroneously disable hints." Also: "Hints do not work at low-endpoint counts"; "Hints are not deterministic." |
Tier mix
| Tier | Rows | Distinct artefacts |
|---|---|---|
| postmortem | 13 | 5 |
| paper | 7 | 2 |
| talk | 3 | 2 |
| blog | 9 | 6 |
| source | 6 | 6 |
| adr | 2 | 2 |
| vendor | 6 | 5 |
| Total | 44 claim rows | 28 artefacts across 17 hosts |
Organisations represented: AWS/Amazon, Cloudflare, Datadog, Roblox, CrowdStrike, Slack, Shopify, Salesforce, DoorDash, Microsoft Research, Kubernetes (SIG Network), Envoy, Istio, The Pragmatic Engineer, InfoQ, USENIX.
What is missing, and it matters
- No published postmortem in this corpus describes a single cell failing and the failure staying inside it. That is either the strongest possible evidence that cells work, or evidence that a contained failure is never newsworthy enough to write up. Both readings argue the same thing: you will not learn your containment works from other people's blogs, only from your own drills.
- No public account gives a per-cell cost multiplier. Slack says the double-running cost was prohibitive; nobody publishes the number. Treat any figure you are quoted as unverified.
- DoorDash's own engineering post could not be retrieved during this session (HTTP 403 from
careersatdoordash.com); the DoorDash claims here are cited to InfoQ's January 2024 report, which quotes their engineers directly. Gradedblog, and flagged as second-hand in the page.