Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Real-World Failure Casebook

Twenty-eight named production incidents, each reconstructed from primary sources and analyzed the way an engineer would analyze them: what the system was, what actually happened, the deep technical mechanism of the failure, and why the safeguards that existed did not stop it.

This project is the specific-case counterpart of the generic failure-mode catalog. The catalog teaches you to recognize the pattern (“cache outage”, “DNS outage”, “failover gone wrong”). The casebook teaches the harder skill: reading a real incident end to end, checking each claim against evidence, and extracting design lessons that survive contact with the details.

Why Study Real Incidents?

Patterns are the beginning, not the end

A failure pattern like “database failover produces split-brain” compresses hundreds of distinct events into one sentence. The compression is useful for design discussions and useless for diagnosis. In the GitHub October 2018 incident, the pattern label fits — automatic failover produced divergent writes across two data centers — but the specifics are what mattered: a Raft-based failover tool that behaved exactly as configured, an application tier that could not tolerate cross-region latency, and a 43-second network partition that no one had ever stress-tested. The pattern tells you what to look for. The case tells you what it looks like in the wild, including all the ways mitigation itself is slow and awkward.

Reading postmortems is an engineering skill

A written incident report is a compressed, partial, occasionally self-serving document. Reading one well means being able to answer:

  • What does the source actually say? Not “Knight Capital lost money because of a typo” — the SEC order describes a failed copy of new code to one of eight servers, which activated dormant, defective code on that server.
  • What does the source conspicuously not say? AWS’s S3 statement describes a typo’d parameter but does not describe the command’s interactive safeguards; drawing conclusions about what was missing requires care and labeling.
  • Where is the boundary between mechanism and cause? Cloudflare’s July 2, 2019 outage had a proximate trigger (one regular expression) and a chain of contributing factors (a removed CPU protection, a test suite that could not measure CPU, a deployment SOP that skipped staging). Singling out one “root cause” is how organizations learn nothing.

Every page in this casebook therefore separates CONFIRMED facts (traced to a named primary source) from INTERPRETATION (our analysis, clearly labeled). This mirrors the blameless postmortem discipline: the value of an incident document is exactly proportional to how trustworthy its facts are.

Cases connect theory to everything else in this repository

Each case page maps its mechanism back to concept pages — concurrency shared-memory hazards, database replication, BGP, recovery from logs — so the incident becomes a way to use the theory rather than just know it. This is the same cross-linking philosophy as the rest of the research projects.

How Each Case Page Is Structured

Every case file follows the same shape, deliberately similar to the postmortem template but organized for study rather than review:

  1. Overview — the incident in one screen: dates, blast radius, headline numbers, all tied to sources.
  2. System Context — what the system was for and how it was designed before the failure. You cannot judge a failure without knowing what “working” looked like.
  3. What Happened — the narrative, plus a timeline table where the primary source supports one. Every row names its source; where the source gives no timestamp, there is no timestamp.
  4. Technical Mechanism — the deep “how”. This is the heart of each page: catastrophic backtracking in a backtracking regex engine, BGP withdrawal propagation, MySQL promotion across a WAN, shared-memory race windows. Explained from first principles, with a diagram where it earns its space.
  5. Trigger vs Contributing Factors — separating the spark from the fuel.
  6. Why Safeguards Didn’t Prevent It — the most instructive section: each safeguard is named, and the reason it failed is stated.
  7. Lessons & Mitigations — generalizable design principles, not a checklist of “the company fixed X”.
  8. Connection to This Repository — links to concept pages that carry the theory.
  9. Interview Questions — 3–5 questions of the kind this case equips you to answer.
  10. Key Takeaways — compressed summary.
  11. Sources — numbered, primary sources first, with URLs verified at time of writing.
  12. Cross-References — sibling case pages and related repository pages.

Inventory

CaseDateDomainHeadline failureMechanism focus
Knight Capital, 2012Aug 1, 2012Trading systems$460M+ loss in ~45 minutesDead code + repurposed flag + partial deployment
AWS S3 us-east-1, 2017Feb 28, 2017Cloud storageRegion-wide S3 API failure, 3–4 hoursDestructive command, cold-critical subsystems, recovery order
Cloudflare regex, 2019Jul 2, 2019Edge/CDNGlobal 502s for ~27 minutesCatastrophic backtracking, linear-time regex engines
GitHub, October 2018Oct 21–22, 2018Developer platform24h 11min degraded serviceCross-region failover, split-brain writes, backup-restore recovery
Facebook BGP, 2021Oct 4, 2021Global platform~6 hours unreachable from the internetBGP withdrawal, DNS-coupled control plane, manual recovery
Therac-25, 1985–871985–1987Medical devicesSix massive radiation overdoses; three deaths tied to overdosesRace conditions, software-only interlocks, code reuse
Ariane 5 Flight 501, 1996Jun 4, 1996Space systemsVehicle destroyed ~40s after liftoffData-dependent overflow, exception strategy, code reuse outside validated envelope
Heartbleed, 2014Apr 2014Internet securityMass memory disclosure from TLS endpointsMissing bounds check on attacker-controlled length, memcpy overrun
GitLab.com data loss, 2017Jan 31, 2017Developer platform~300GB production database deleted; ~18h recoveryDestructive command on wrong host, five failed recovery mechanisms, untested backups
CrowdStrike, 2024Jul 19, 2024Endpoint security~8.5M Windows hosts in BSOD loopsKernel-mode content update without memory-safe parsing, validator gap
Fastly, June 2021Jun 8, 2021Edge/CDNGlobal 500/503 spike, ~1hLatent bug triggered by valid customer config, global propagation
AWS us-east-1, 2021Dec 7, 2021Cloud platform~11h control-plane degradation in US-EAST-1Internal scaling automation, retry amplification, shared network substrate
Mars Climate Orbiter, 1999Sep 23, 1999Space systemsSpacecraft lost at Mars insertionUnit mismatch in an interface contract, systems-engineering process gaps
AWS DynamoDB us-east-1, 2015Sep 20, 2015Cloud database~5h degraded metadata operations, cascade to dependent servicesGSI-inflated membership metadata, network disruption, retry storm
Toyota unintended acceleration, 2009–20112009–2011Automotive embedded softwareRecalls, NHTSA/NASA investigation, criminal litigationEmbedded control software defects, missing memory protection, contested evidence
UK Post Office Horizon, 1999–20251999–2025Enterprise systems / lawHundreds of wrongful prosecutions of subpostmastersDefective audit logs, presumption of computer correctness, institutional failure
Boeing 737 MAX MCAS, 2018–2020Oct 2018–Nov 2020Aerospace flight controlsTwo crashes, 346 deaths, ~20-month global groundingSingle-sensor dependency, gated safety alert, incremental certification drift
Cloudflare control plane, 2025Nov 18, 2025Edge/CDN control planeGlobal 5xx spike, worst outage since 2019Database permission change corrupting a security feature file, control-plane/data-plane coupling
Equifax, 2017May–Jul 2017Web application securityPII of 145M+ consumers exfiltrated over 76 daysMissed Struts patch via inventory gap, expired monitoring certificate, flat database access
Target, 2013Nov 27–Dec 15, 2013Retail payments40M cards + up to 70M records from POS systemsThird-party credentials, weak segmentation, POS RAM-scraping malware, unacted alerts
Ericsson, 2018Dec 6, 2018Telecom core networksNationwide mobile data outages across 11 countriesExpired certificate in vendor SGSN-MME software, synchronized fleet failure
Cloudflare Workers KV, 2025Jun 12, 2025Edge platform storage2h28m outage across Workers KV and dependent productsThird-party storage failure behind KV’s central store, cascading dependencies, recovery overload
AWS Kinesis, 2020Nov 25, 2020Cloud streamingRegion-wide Kinesis PUT/GET failures until 10:23 PM PST; cascade into Cognito, CloudWatch, Lambda, EventBridgeOS thread limit crossed by every server in a fully-meshed front-end fleet; failed shard-map cache construction; contention-throttled restart
OVHcloud Strasbourg fire, 2021Mar 10, 2021Datacenter / physical infrastructureSBG2 destroyed (14,046 servers), SBG1 partially burned; ~120,000 services fully or partially affectedPhysical blast radius, backup colocation, site-wide correlated power-off, industrial-speed recovery limits
Cloudflare leap second, 2017Jan 1, 2017Edge/CDN (DNS)CNAME resolution failures at the leap second; ~0.2% of DNS queries at peak, <1% of HTTP requests erroringLeap-second clock step, negative time delta through a smoothing filter, documented panic on negative input, recovered by Go
Google Cloud networking, 2019Jun 2, 2019Cloud platformMulti-region packet loss for 3h19m–4h25m across six US and two Americas regionsMaintenance-automation bug descheduling the network control-plane cluster, fail-static forwarding, BGP withdrawal, congestion with retry amplification
Microsoft Exchange HAFNIUM, 2021Mar 2, 2021On-prem email infrastructureFour 0-days chained against on-prem Exchange; global exploitation race after patch releasePre-auth SSRF to impersonation to deserialization RCE, webshell persistence, “assume identity compromise” remediation doctrine
Okta compromise, 2022Jan 2022 (disclosed Mar–Apr 2022)Identity providerVendor support engineer’s workstation controlled for 25 minutes; max potential 366 customers (~2.5%)Third-party subprocess attack surface, SuperUser scope, blast-radius arithmetic under uncertainty, visibility dependent on vendor candor

Coverage Ledger

The ledger states, for each case, what is verified against a primary source and what is explicitly not claimed. This is the fact-checking contract for the whole project.

CasePrimary source usedURL verified?Known gaps / unverified items
Knight Capital 2012SEC Administrative Proceeding File No. 3-15570, Release No. 34-70694 (Oct 16, 2013); SEC Press Release 2013-222; Knight 8-K (Aug 6, 2012)Yes — sec.gov PDF and press release fetched and quotedExact clock time the erroneous trading stopped is not stated in the SEC order; only a “~45-minute period”. Popular accounts sometimes say “9:47 a.m. ET” — not used here.
AWS S3 2017“Summary of the Amazon S3 Service Disruption in the Northern Virginia (US-EAST-1) Region”, AWS Message (Feb 28, 2017)Yes — aws.amazon.com/message/41926/ fetched and quotedAWS does not state which parameter was mistyped or what interactive checks the tool had; we describe only what the statement says and label the rest as interpretation.
Cloudflare 2019“Details of the Cloudflare outage on July 2, 2019”, blog.cloudflare.com (Jul 2, 2019), John Graham-CummingYes — fetched and quotedThe post describes the global-kill execution being blocked by internal access failures; it does not say the kill switch “failed” per se — see the case page for the precise wording.
GitHub Oct 2018“October 21 post-incident analysis”, github.blog (Oct 30, 2018), Jason WarnerYes — fetched and quotedThe partition is described as 43 seconds of lost connectivity, restored; other figures circulating (e.g., “31.5-second link flaps”) do not appear in the primary post and are not used.
Facebook Oct 2021“More details about the October 4 outage”, engineering.fb.com (Oct 5, 2021); “Update about the October 4th outage” (Oct 4, 2021); Cloudflare’s contemporaneous measurement post (Oct 4, 2021)Yes — all three fetchedFacebook’s own posts give no UTC timestamps; external timings used here come from Cloudflare’s measurement post and are attributed to it.
Therac-25N. G. Leveson and C. S. Turner, “An Investigation of the Therac-25 Accidents”, IEEE Computer 26(7), July 1993, pp. 18–41 (reprinted at web.mit.edu)Yes — all four parts fetchedThe authors themselves note that AECL’s internal development records were unavailable; per-accident dose figures are estimates from hospital physicists as reported in the paper.
Ariane 5 1996J. L. Lions et al., Ariane 5 Flight 501 Failure — Report by the Inquiry Board, ESA, July 1996Yes — full text via cs.unibo.it mirror fetched and quotedComponent-level telemetry traces summarized from the report’s appendixes; no independent re-derivation of the alignment-timing figures
Heartbleed 2014OpenSSL Security Advisory “TLS heartbeat read overrun (CVE-2014-0160)” (Apr 7, 2014); heartbleed.comYes — advisory text fetched and quotedWhich specific organizations were exploited is NOT asserted; the page states only what memory could be exposed per the advisory
GitLab 2017GitLab, “Postmortem of database outage of January 31” (Feb 10, 2017)Yes — fetched and quotedThe day-of announcement post is cited by title only; per-hour restore figures come from the postmortem’s timeline
CrowdStrike 2024CrowdStrike, “Channel File 291 Incident — External Technical Root Cause Analysis” (Aug 6, 2024); Microsoft blogURL verified via search; PDF not full-text fetchable — key facts cross-checked against verbatim mirrorsPer-industry outage figures and litigation outcomes are not covered
Fastly 2021Fastly, “Summary of June 8 outage” (Jun 8, 2021)URL verified via search; page not fetchable at writing — facts quoted via verbatim excerpts in contemporaneous coverage [2][3]The customer identity behind the triggering config is not public and is not named
AWS us-east-1 2021AWS, “Summary of the AWS Service Event in the Northern Virginia (US-EAST-1) Region” (Dec 10, 2021)Yes — aws.amazon.com/message/12721/ fetched and quotedThe specific internal service whose scaling triggered the event and device-level details are not stated by AWS; those parts are labeled interpretation
Mars Climate Orbiter 1999MCO Mishap Investigation Board, Phase I Report (Nov 10, 1999); NASA LLIS entry 641Yes — llis.nasa.gov PDF fetched and full text extractedComponent-level telemetry summarized from report appendixes; no independent re-derivation of the trajectory figures
AWS DynamoDB 2015AWS, “Summary of the Amazon DynamoDB Service Disruption and Related Impacts in the US-East Region” (Sep 20, 2015)Yes — aws.amazon.com/message/5467D2/ fetched and quotedOnly the four dependent services AWS names are covered; no third-party impact estimates used
Toyota 2009–2011NASA Engineering & Safety Center, Technical Assessment Report: Toyota Unintended Acceleration Investigation (Feb 2011); NHTSA EA11-001; DoT press release; Barr, Bookout v. Toyota slides (2013); Koopman CMU case study (2014)Yes — NHTSA PDF, DoT press release, Barr mirror, and Koopman PDF fetched; NESC report URL live but content quoted via secondary full textsBarr’s software-defect claims remain litigation testimony, not regulator findings; the page labels contested points as contested
UK Post Office Horizon 1999–2025Report of the Post Office Horizon IT Inquiry, Volume 1 (HC 1119, Jul 2025); Fraser J, Bates (No. 6) “Horizon Issues” [2019] EWHC 3408 (QB); Hamilton v Post Office [2021] EWCA Crim 577Yes — inquiry report PDF and both judgments fetched and quotedProsecution counts vary by source and date; the page uses inquiry-report figures and labels the range
Boeing 737 MAX MCAS 2018–2020NTSB, Aviation Safety Report ASR-19/01 (Sep 2019); KNKT final report; JATR summary; U.S. House Committee report (Sep 2020); DoJ deferred prosecution agreement (Jan 2021)Yes — NTSB report PDF fetched; other sources cited by title+org+year without URLsExact certification-meeting content is sealed/not public; the page labels reconstructed internal decision-making as interpretation
Cloudflare Nov 2025Matthew Prince, “Cloudflare outage on November 18, 2025”, blog.cloudflare.com (Nov 18, 2025)Yes — fetched and quotedInternal operational details outside the post’s scope are not covered; downstream-customer figures are those the post states
Equifax 2017GAO, Data Protection: Actions Taken by Equifax and Federal Agencies in Response to the 2017 Breach, GAO-18-559P (Aug 30, 2018); House Oversight staff report The Equifax Data Breach (Dec 2018); Senate PSI, How Equifax Neglected Cybersecurity… (Dec 2018); Equifax statement on CVE-2017-5638 (Sept 15, 2017, via EPIC archive)Yes — GAO product page fetched and quoted; GAO PDF title verified via fetch; House/PSI/EPIC URLs verified via searchReport PDFs not machine-extractable at writing: exact certificate-expiry duration and per-country record counts not re-quoted from full text; SEC/FTC settlement amounts described qualitatively only
Target 2013Senate Commerce staff report, A “Kill Chain” Analysis of the 2013 Target Data Breach (Mar 26, 2014); KrebsOnSecurity (Feb 5, 2014); Target press statements (Dec 19, 2013; Jan 10, 2014)Yes — Senate PDF URL verified via search and fetch (title); KrebsOnSecurity URL verifiedSenate PDF full text not machine-extractable: alert-level details quoted from the report’s indexed narrative; Verizon forensic report is non-public and described via press reporting only; financial-cost figures not used
Ericsson 2018Ericsson press statements (Dec 6–7, 2018, quoted verbatim); SoftBank incident statement (Dec 6, 2018); O2/Telefónica UK statements — all as quoted by ZDNetYes — ZDNet article fetched and quoted; ericsson.com cited without URL (returns 403 to automated fetch)Swisscom impact and O2 subscriber counts marked reported-but-unverified; node/interface naming varies across accounts (SGSN-MME per the statement; S1-MME in some third-party accounts); exact certificate embedding not public
Cloudflare Jun 2025Jeremy Hartman and CJ Desai, “Cloudflare service outage June 12, 2025”, blog.cloudflare.com (Jun 12, 2025)Yes — fetched and quoted in fullThe third-party storage provider is not named in the post; provider share of the backend and per-customer figures outside the post’s tables are not covered
AWS Kinesis 2020AWS, “Summary of the Amazon Kinesis Event in the Northern Virginia (US-EAST-1) Region” (Nov 25, 2020)Yes — aws.amazon.com/message/11201/ fetched and quoted in fullThe specific OS limit and its value, the exact fleet size, and per-customer impact figures are not stated by AWS; mesh-arithmetic and shared-fate readings are labeled interpretation; dependent-service impacts covered only as AWS lists them
OVHcloud Strasbourg 2021OVHcloud, “Strasbourg datacentre: latest information”, corporate newsroom press release, rolling updates 10 Mar – 23 Apr 2021Yes — corporate.ovhcloud.com page fetched and quoted in fullCause of the fire not established by the source (investigations ongoing) and not claimed here; the widely reported “backups colocated in the same building were lost” detail is marked reported-but-unverified (press accounts of OVH customer communications); Reuters cited by title+org+year without URL; status-incident platform URL not fetched
Cloudflare leap second 2017Cloudflare (John Graham-Cumming), “How and why the leap second affected Cloudflare DNS”, blog.cloudflare.com (Jan 1, 2017)Yes — fetched and quoted in fullSingle-source page by design: per-customer impact and machine counts beyond the post’s “a small number” are not stated by the source and not used here
Google Cloud June 2019Google Cloud Service Health, “Google Cloud Networking Incident #19009 — post-incident summary”, status.cloud.google.com (report dated Jun 6, 2019)Yes — fetched and quoted in fullThe banner end time (15:40 Pacific) and the narrative “full service” time (16:10) differ; both reported as stated; no third-party measurements used
Microsoft Exchange HAFNIUM 2021Microsoft, “HAFNIUM targeting Exchange Servers with 0-day exploits”, Microsoft Security Blog (Mar 2, 2021, updates through Mar 16, 2021); CISA Alert AA21-062A (Mar 3, 2021; rev. Jul 19, 2021)Yes — both fetched in full; cisa.gov and microsoft.com return HTTP 403 to direct curl from this sandbox — recorded rather than papered over, full texts retrieved via automated readerVictim counts beyond the sources’ statements are not used; “ProxyLogon” is community shorthand — both primary sources name the four CVEs
Okta January 2022Okta: “Updated Okta Statement on LAPSUS$” (Mar 22, 2022); “Okta’s Investigation of the January 2022 Compromise” (Mar 23, 2022); “Okta Concludes its Investigation Into the January 2022 Compromise” (Apr 2022)Yes — all three fetched and quoted in fullThe forensic firm and its final report are described but not named in Okta’s posts and are not named here; per-tenant actions beyond the posts’ findings are not covered

Reading rules used across all pages:

  • CONFIRMED marks a statement traceable to the cited primary source.
  • INTERPRETATION marks our own analysis — reasonable engineering inference, clearly separated from evidence.
  • Where a widely repeated detail could not be traced to a primary source, it is either omitted or explicitly marked reported but unverified. No URLs, quotes, timeline entries, or root causes are invented.

How to Use This Casebook

  1. Before interviews: pick two cases closest to your target role (e.g., S3 + GitHub for infrastructure roles). Read the Technical Mechanism sections until you can re-derive the failure on a whiteboard.
  2. As practice for postmortem reading: for each case, first read only the Overview and What Happened sections, write your own diagnosis, then compare against the Technical Mechanism section. This trains exactly the skill a real incident response demands: forming hypotheses from incomplete evidence.
  3. As design input: the Lessons sections are written as principles you can apply in system design interviews — staged deployment, recovery-order planning, quorum discipline, and safety-architecture arguments all generalize.
  4. Alongside the pattern catalog: after reading a case, find its pattern in the failure-mode catalog and notice how much detail the pattern hides.

Cross-References