Learning from failure  / field guide
Practitioner field guide · 28 August 2026

The rule was already written down

The three largest cloud outages of 2025 were each prevented by a design rule that had been public, codified and enforced in open-source contributor documentation for six years. This guide reconstructs the machinery organisations put between a production failure and the next design decision, from the published post-incident processes of Google, Amazon, GitLab, Etsy, Kubernetes and Envoy, and from six first-party incident reports, and it identifies the two stages of that machinery where the evidence says the signal is lost.

34 primary sources 6 first-party incident reports 6 published processes Evidence through August 2026 Read: 40 min
01

An organisation is surprised, writes it down, and is surprised again

The problem, stated without naming the practice: an expensive surprise produces a document, and nobody can show that the document changed the system.

91%
of practitioners say collecting remediation items is the core purpose of the post-incident meeting
92%
of catastrophic failures came from incorrect handling of an error the software had already detected
355 / 597
public outage records that name no cause at all, across 32 services over seven years
zero
organisations that have published an action-item completion rate or a repeat-incident rate

Start with the sentence that motivated this guide, because it is the whole argument in one line. On 2 July 2019, after a regular expression took down eighty percent of its traffic for twenty-seven minutes, Cloudflare committed publicly to "changing the SOP to do staged rollouts of rules in the same manner used for other software at Cloudflare". On 18 November 2025, a Bot Management feature file doubled in size, propagated globally in minutes, exceeded a hardcoded limit and stopped the majority of core traffic through the Cloudflare network for three hours and forty-six minutes. The remediation Cloudflare published that evening was to begin "hardening ingestion of Cloudflare-generated configuration files in the same way we would for user-generated input". Both incidents are the same shape: an artefact that changes production behaviour, generated inside the company, distributed globally in minutes, and never routed through the release machinery the company had already built. The 2019 lesson was correct. It was applied to WAF rules, which is where it had hurt, and not to the property that made WAF rules dangerous.

That is not a Cloudflare story. In the same eighteen months, Google Cloud lost Service Control globally because a quota-policy code path shipped without a feature flag and a policy row with blank fields dereferenced a null pointer in every region at once; AWS lost the DynamoDB regional endpoint in us-east-1 for the better part of a day because a latent race condition between two instances of the automation that manages DNS deleted every address record; and CrowdStrike pushed a content file whose parameter count did not match the sensor that read it, to every machine, with no staged deployment, because content was not code. Four organisations, four different stacks, one class of failure. Every one of them had a post-incident process, and every one of those processes is documented in public.

What this guide is for

An architect who is being asked to stand up or defend a post-incident process, and who needs to know which parts of it are load-bearing, which parts the published evidence does not support, and what to build instead of the parts that do not work.

Scope. This guide covers the machinery between a production failure and a durable change to the system: what triggers an analysis, what the analysis produces, who approves it, how the lesson is encoded, and where the signal is lost. It deliberately does not cover incident response itself, on-call design, paging and alerting, severity taxonomies, status page communications, chaos engineering, or the security-incident and regulatory-disclosure path, which has different drivers and a different audience. It also does not cover the human cost of being on the sharp end of an incident, which is real, well documented elsewhere, and not an architecture question.

A note on confidence, because it varies sharply across this topic. Incident mechanism is reported: the first-party postmortems in section 4 are specific, timestamped and internally consistent. Process design is reported but unverified: six organisations describe what their process is, and none describes what it produced. Process outcome is open: no organisation has published a completion rate for corrective actions, a repeat-incident rate, or a before-and-after measurement. Where this guide says a mechanism works, that claim is a reconstruction from incident evidence, and it is marked.

Figure 1 · Where the signal is lost

constrains

Production surprise

Timeline reconstructed
logs, chat, deploys

Analysis artefact
postmortem, COE, review

Corrective actions
in the work tracker

Lesson generalised
beyond the component that broke

Encoded as a standing gate
checked on every future change

constrains

Production surprise

Timeline reconstructed
logs, chat, deploys

Analysis artefact
postmortem, COE, review

Corrective actions
in the work tracker

Lesson generalised
beyond the component that broke

Encoded as a standing gate
checked on every future change

The path from a production surprise to a design that cannot repeat it. The published evidence is dense on the first four stages and silent on the last two, which is also where the incidents in section 4 say the failures happen. Reconstructed from Google's SRE Workbook, Amazon's Correction of Error process and GitLab's incident review handbook.
Diagram source
02

Every published process has six stages, and two of them are optional in practice

The common shape across Google, Amazon, GitLab, Etsy, Kubernetes and Envoy, with the divergence points marked and attributed.

Lay the six published processes side by side and the first four stages are present in all of them. Something triggers an analysis. A timeline is reconstructed. An artefact is written. Actions are recorded in whatever tracker the organisation already uses. The differences at those stages are real but small: Google requires that "all postmortems which follow a user-affecting outage must have at least one P[01] bug associated with them", GitLab requires the incident lead to open a review for every Severity 1 and Severity 2 and closes it within five working days, and Amazon routes serious Correction of Error documents up a management chain to a director or a chief technology officer. Those are variations in cadence and audience, not in structure.

The interesting divergence is at stage five and stage six, and it is where the whole difference in outcome sits.

Stage five is generalisation: asking whether the lesson applies anywhere other than the component that broke. Only one of the six processes asks it as a written question. GitLab's handbook puts it in the list every review owner is expected to answer and every Bar Raiser is expected to probe: "Are there areas outside of this specific impact that need to be addressed in the same fashion?" That single sentence is the difference between Cloudflare's 2019 remediation list, which fixed WAF rule rollout, and a remediation list that would have found the Bot Management feature file six years early. Neither Cloudflare postmortem mentions such a question, and no public source says whether one was asked internally; this is a reconstruction from what the two remediation lists contain.

Stage six is encoding: turning the lesson into something mechanical that constrains future changes made by people who were not in the room. Only two of the six do this structurally, and neither of them is an incident-response process. Envoy requires that high-risk and user-visible behavioural changes ship behind a runtime guard that is safe to flip on a running process, a rule a maintainer wrote into the contributor contract as documentation plus tooling in March 2019. Kubernetes requires every feature to pass a Production Readiness Review whose stated purpose is to ensure features "can be disabled or rolled back in the event they cause increased failures in production", and whose questionnaire opens with Feature Enablement and Rollback and asks, mechanically, whether the feature can be disabled once enabled, how a rollback can fail, and what specific metrics should inform one.

Put those two facts next to Google's June 2025 remediation, which reads: "Enforce all changes to critical binaries to be feature flag protected and disabled by default." That is the Envoy rule of 2019 and the Kubernetes gate of 2019, adopted by a Google control plane in 2025 after a global outage. The knowledge was not missing. The gate was missing.

Figure 2 · The reference process, with divergence points

In one or two

In all six processes

usually stops here

GitLab asks it in writing

Envoy runtime guards
Kubernetes PRR

Trigger
severity threshold or user impact

Timeline reconstruction
from logs, chat, deploys

Analysis artefact
postmortem / COE / review

Corrective actions
in the normal work tracker

Generalisation question
where else is this true?

Standing gate
checked on every future change

Independent approval
peer / Bar Raiser / leadership

Closed

Changes by people
who never read the report

In one or two

In all six processes

usually stops here

GitLab asks it in writing

Envoy runtime guards
Kubernetes PRR

Trigger
severity threshold or user impact

Timeline reconstruction
from logs, chat, deploys

Analysis artefact
postmortem / COE / review

Corrective actions
in the normal work tracker

Generalisation question
where else is this true?

Standing gate
checked on every future change

Independent approval
peer / Bar Raiser / leadership

Closed

Changes by people
who never read the report

Solid boxes appear in every published process. Dashed boxes appear in one or two. The right-hand column is the only path by which a lesson reaches an engineer who never read the incident report. Reconstructed from the six processes cited in this section.
Diagram source

The trigger, and what it excludes

Every process triggers on customer-visible impact. None of them triggers on a near miss, and the VOID corpus shows the consequence: near-miss reports are close to absent from the public record, which Nash attributes to difficulty of detection, no process engagement, and reluctance to publish. The events with the best learning-to-damage ratio are the ones nothing catches.

Present at: Google, GitLab. Gap named by the VOID.

The independent approver

Three different answers to the same problem, which is that the team that owns the service is the worst-placed group to judge whether its own analysis was deep enough. GitLab appoints a Bar Raiser panel of peers who must approve before a review can close. Amazon escalates to leadership. Etsy trains a facilitator whose job is the questions, not the conclusions. The Bar Raiser is the cheapest of the three to copy.

Runs this way at: GitLab, Amazon, Etsy.

The standing gate

A question asked automatically of every future change, in the place where changes are made. Envoy puts it in the contributor contract and enforces it with tooling; Kubernetes puts it in a questionnaire whose answers are checked against machine-readable metadata. Neither is an incident process, which is exactly why both survive staff turnover and neither depends on anyone remembering the outage.

Runs this way at: Envoy, Kubernetes.

Naming the class: the unpipelined change surface

Four organisations described the same thing in four different vocabularies. CrowdStrike calls it Rapid Response Content. Cloudflare calls it a feature file. Google calls it a policy change replicated globally within seconds. AWS calls it a DNS plan. Because nobody has a shared name for it, nobody audits for it, so this guide will name it: the unpipelined change surface is every artefact that alters production behaviour without traversing the release pipeline the organisation built after its last outage. Configuration, feature files, policy rows, ML model weights, feature-flag values, rule content, DNS plans, index definitions and threat signatures all qualify. The defining property is not the file format. It is that the artefact reaches production faster than code does, and by a different route, and therefore skips staged rollout, canary analysis, rollback tooling and the review that would have asked what happens when it is malformed.

The transfer for an architect is direct and takes an afternoon: enumerate every path by which behaviour reaches your production systems, then mark each one with whether it is staged, whether it can be rolled back without a deploy, and whether the consumer validates the artefact as untrusted input. The paths that fail all three are where your next outage is. This is a reconstruction rather than a reported practice; no source describes an organisation running this audit, which is itself worth noticing given that four of them wrote the postmortem afterwards.

Figure 3 · Two routes into production, one of them ungoverned

Ungoverned route: generated artefacts

Governed route: code

rollback

Engineer
changes code

CI and tests

Canary

Staged rollout
region by region

Internal system emits
config, rules, plans, weights

Global distribution
seconds to minutes

Production behaviour

Ungoverned route: generated artefacts

Governed route: code

rollback

Engineer
changes code

CI and tests

Canary

Staged rollout
region by region

Internal system emits
config, rules, plans, weights

Global distribution
seconds to minutes

Production behaviour

The code path accumulates safety machinery after every incident. The data path carries the same power to change behaviour and typically none of the machinery. All four 2024 and 2025 incidents in section 4 travelled the lower route.
Diagram source
03

Six decisions, and the condition that flips each one

The public disagreements are sharper here than in most architecture topics, because two credible camps have been arguing in print for a decade.

Does the review meeting produce action items?

Chosen by most
  • Yes, and they are the deliverable. Google: a postmortem after a user-affecting outage must carry a P0 or P1 bug.
  • Amazon's Correction of Error document is built around learning and action items and is reviewed up the chain.
Rejected by resilience-engineering practitioners
  • Etsy's guide: "Having remediation items is not a requirement for a good debriefing."
  • Hochstein: the meeting is the only scarce resource, and action items get planning time anyway.
Flips when
  • Your open corrective actions are already ageing out. If the tracker is full and the same class keeps recurring, more items is not the constraint; understanding is.
  • Also flips when attendance is cross-organisational and rare, because that hour buys mental models you cannot buy again.

Do you write a root cause?

Chosen by most operators
  • Yes. GitLab requires all contributing root causes to be understood. Amazon's template runs 5 Whys. GitLab's own 2017 postmortem is structured as two 5 Whys chains.
Rejected
  • Nash, from the VOID corpus, argues root-cause framing "can lead to environments where people are less likely to admit mistakes and speak up".
  • Cook: the review's stated rationale "is always incomplete and often misleading".
Flips when
  • A regulator, a customer contract or a public status commitment requires a named cause. Then write one, and run the wider analysis separately so the two artefacts do not compete.
  • Stays on the operator side when the causal chain is short and mechanical, as in the AWS DNS race.

Do you encode the lesson as a procedure or as a gate?

Chosen by default
  • A procedure: update the runbook, add a checklist step, brief the team.
  • It is the cheapest item to write and the easiest to mark complete.
The evidence against it
  • Uptime Institute, 2025: of organisations with a major human-error outage in three years, 85% of those incidents trace to staff not following procedures or to flaws in the procedures themselves.
  • A procedure is a request that a future person remember. A gate is a change to what is possible.
Flips when
  • The action is genuinely one-off and non-recurring, such as decommissioning a system.
  • Otherwise the honest question is what would have to be true for a gate, and the answer is usually a test, a lint rule, a required field or a deploy-time check.

Who is allowed to close the review?

Chosen
  • GitLab: an independent Bar Raiser panel of engineering managers, product managers and staff-plus engineers. No review closes without approval.
  • Their remit is explicitly to ask hard questions, not to tell people how to run a review.
Rejected
  • Team self-closure, which is fast and produces the analysis the team already had.
  • Leadership sign-off alone, which optimises the document for defensibility rather than depth.
Flips when
  • Below roughly one review a fortnight there is no panel to staff, and a single rotating reviewer from another team gets most of the benefit.
  • Above that, an unstaffed approval role becomes the bottleneck, which is exactly what happened to the Kubernetes change in the failure catalogue.

Do you measure the process by duration?

Chosen almost everywhere
  • Mean time to resolve, on a dashboard, quarter over quarter.
Rejected on the data
  • The VOID finds no correlation between incident duration and incident severity, and incident durations are positively skewed, so a mean does not describe them.
  • Rosenthal: declaring an incident started at time x and ended at time y "is just not helpful, regardless".
Flips when
  • Never, as a measure of learning. Duration is a legitimate operational input to capacity and staffing questions; it is not evidence that analysis is working.
  • Use service level objectives for reliability, and cost of coordination for the incident itself: how many people, how many teams, how senior.

Do you publish the analysis outside the company?

Chosen by a small minority
  • Cloudflare, AWS, Google Cloud, GitLab and CrowdStrike all published first-party accounts detailed enough to reconstruct the cause chain.
  • GitLab commits to a public root cause analysis within seven days for Severity 1.
Rejected by most
  • Across 597 outages at 32 services, only 40% of public descriptions revealed a cause and 24% revealed the fix.
Flips when
  • Your customers are engineers. Then a detailed public account is a retention mechanism, and the internal discipline it forces is worth more than the document.
  • Stays internal where disclosure would expose an unpatched security control, which is a different process entirely.

Figure 4 · Which piece of machinery to build next

No

Yes

Yes

No

Yes

No

Yes

No

Do the same
failure classes
keep recurring?

Are corrective
actions ageing
past a quarter?

Add the generalisation
question to the template
and to the approver's remit

Stop adding items.
Audit the open ones and
close or delete them

Can behaviour reach
production without
a staged rollout?

Build the gate:
flag-guard, stage and
validate the data path

Does the team that
broke it also approve
its own analysis?

Appoint a rotating
independent reviewer

Measure coordination cost,
not duration, and start
reviewing near misses

No

Yes

Yes

No

Yes

No

Yes

No

Do the same
failure classes
keep recurring?

Are corrective
actions ageing
past a quarter?

Add the generalisation
question to the template
and to the approver's remit

Stop adding items.
Audit the open ones and
close or delete them

Can behaviour reach
production without
a staged rollout?

Build the gate:
flag-guard, stage and
validate the data path

Does the team that
broke it also approve
its own analysis?

Appoint a rotating
independent reviewer

Measure coordination cost,
not duration, and start
reviewing near misses

Terminal nodes are actions, not judgements. The tree is ordered by cost: the cheapest interventions are on the left, and the generalisation question costs one sentence in a template.
Diagram source
DecisionChosenRejectedBecauseEvidence
Meeting outputRemediation listUnderstanding onlyAction is legible to management; understanding is notACM Queue, 2019
Causal framingRoot cause, 5 WhysContributing conditionsContracts and status pages demand a named causeGitLab, 2017
Lesson encodingProcedure or runbookMechanical gateCheapest to write, easiest to mark doneUptime Institute, 2025
Closure authorityIndependent Bar RaiserTeam self-closureThe owning team cannot judge its own depthGitLab handbook
Process metricMean time to resolveCoordination cost, SLOsDuration is easy to collect and uncorrelated with severityVOID via InfoQ, 2023
DisclosureInternal onlyPublic first-party accountLegal caution; 60% of public records name no causeSoCC '16
04

Four ways the learning fails, with the incidents that show each one

Grouped by how the machinery broke rather than by company, because the same four classes account for every incident found in this hunt.

Class A: the lesson was learned and not generalised

Postmortem

Cloudflare fixed rule rollout in 2019 and lost the network to a feature file in 2025

AssumptionThe 2019 lesson was about WAF rules, so staged rollout was applied to WAF rules.
What happenedA ClickHouse permissions change made column metadata explicit, so the Bot Management feature-file query returned duplicates and doubled the file. It exceeded a hardcoded 200-feature limit and the Rust proxy panicked on an unwrapped error, globally.
Blast radius3 hours 46 minutes of majority core traffic loss, full recovery at 17:06 UTC. Cloudflare's own framing: the worst outage since 2019.
FixTreat internally generated configuration as untrusted input; add global kill switches; review failure modes across every core proxy module.
Design ruleWrite the remediation against the property, not the artefact. "Stage WAF rule pushes" protects one file type. "No internally generated artefact reaches the fleet faster than code does" protects the class.
Postmortem

CrowdStrike staged its sensor releases and shipped content to everyone at once

AssumptionContent is data, so it does not need the release discipline that code needs.
What happenedA new IPC template type defined 21 input parameter fields while the integration code supplied 20. The mismatch survived every build validation layer and hit a latent out-of-bounds read in the Content Interpreter on every sensor that received Channel File 291.
Blast radiusGlobal, simultaneous, on 19 July 2024, with recovery requiring per-machine intervention on Windows hosts.
FixValidate field counts at sensor compile time, add runtime bounds checks, fix the Content Validator logic error, and implement staged deployment for Template Instances.
Design ruleThe consumer of a generated artefact must validate its shape at the boundary, and the producer must not be able to reach the whole fleet in one step. Two independent controls, because either alone would have held here.

Class B: the control existed and the new path went around it

Postmortem

Google Cloud shipped a quota-policy path with no feature flag into a globally replicated store

AssumptionRegion-by-region binary rollout is enough, because the rollout exercises the code.
What happenedThe new quota-check code shipped on 29 May 2025 but its path was never exercised, because it needed a policy change to trigger it. On 12 June a policy row with unintended blank fields replicated globally within seconds, and the unhandled null pointer crashed Service Control binaries in every region at once.
Blast radiusRoughly three hours across Google Cloud APIs, with us-central1 taking about two hours forty minutes longer to recover.
FixModularise Service Control so the functionality fails open; enforce that all changes to critical binaries are feature flag protected and disabled by default; propagate globally replicated data incrementally.
Design ruleA staged binary rollout does not stage a code path that only executes when data arrives. Data is the second deployment, and it needs its own gradual enablement.
Source & PRs

Envoy's safety control has a silent failure mode, open since 2022

AssumptionOnce behavioural changes are runtime guarded, an operator who disables one is protected.
What happenedGuards are removed once a behaviour has been default-on for a deprecation cycle. An operator's override then silently becomes a no-op. A later change made Envoy log an internal bug report for unknown flags; the maintainer who wrote the guard system proposed rejecting such configs outright, "in case folks aren't paying attention to their logs".
Blast radiusNo incident is attached. The issue has been open since 3 March 2022, which is the point: nothing forces a control's own failure modes to be closed.
FixProposed but unmerged: reject configuration referencing unknown runtime guards rather than warning.
Design ruleEvery control added after an incident inherits the review discipline of the thing it protects. Audit your safety mechanisms for silent degradation on the same cadence as the systems they guard.

Class C: the remediation became the next incident

Postmortem

The automation that manages DynamoDB DNS deleted every address record

AssumptionAutomating DNS plan application removes the human error class from DNS changes.
What happenedOne DNS Enactor hit unusually high retry delays. A second applied newer plans and ran cleanup. The first then wrote its stale plan over the newer one, using a staleness check that had itself gone stale, and cleanup deleted it, removing all IP addresses for the regional endpoint.
Blast radiusRoughly 15 hours 52 minutes across us-east-1 from 19 to 20 October 2025, cascading into EC2, NLB and dozens of dependent services. Manual operator intervention was required to correct it.
FixDisable the DNS Planner and Enactor automation worldwide first, fix the race second, and add protection against applying incorrect plans before re-enabling.
Design ruleAutomation built to reduce a failure class becomes a new component with its own failure modes and, usually, worse observability. Ship the off switch and the manual path in the same change as the automation, not after the incident that needs them.
Source & PRs

Kubernetes could not update its own production-readiness gate

AssumptionA gate created to catch operational oversight can be improved as cheaply as it is applied.
What happenedA pull request refining the Production Readiness Review questionnaire "based on alpha implementation learnings" opened on 9 October 2025 and waited on the same scarce approver pool the gate itself depends on. The stale bot labelled it after 90 days. It closed on 29 January 2026 as a duplicate of a later change.
Blast radiusNone directly. The cost is that the questionnaire's known weaknesses persisted through 97 days of queue.
FixSuperseded by another pull request. The approver bottleneck was not addressed.
Design ruleBefore adopting a review gate, staff it, and budget separately for changing it. An unstaffed gate is a queue, and a queue on the gate is a queue on every lesson that wants to become a gate.

Class D: the safety net was never exercised, so its failure was silent

Postmortem

GitLab had five recovery mechanisms and none of them worked

AssumptionBackups configured is backups working.
What happenedAn engineer clearing a secondary for re-replication wiped the primary's data directory instead, removing roughly 300 GB. The S3 bucket was empty because `pg_dump` 9.2 was being run against a PostgreSQL 9.6 cluster and aborting; the alerting mail that would have said so was misconfigured. Azure disk snapshots were not enabled on the database servers. Replication was already broken. The only usable copy was a staging load taken six hours earlier.
Blast radiusAbout 18 hours down on 31 January 2017, with roughly 5,000 projects, 5,000 comments and 700 user accounts permanently lost.
FixGitLab published the full analysis, structured as two 5 Whys chains, and live-streamed the recovery.
Design ruleA recovery mechanism that is never exercised is a belief, not a control. The generalisable form of Gunawi's finding: the hidden single point of failure is the recovery chain, and every link needs a scheduled, observed test with an alert that is itself tested.
Paper

The failure-handling code is the code least likely to have been run

AssumptionCatastrophic failures come from exotic distributed-systems conditions that are hard to test.
What happenedAcross 198 randomly sampled user-reported failures in Cassandra, HBase, HDFS, Hadoop MapReduce and Redis, 92% of the catastrophic ones came from incorrect handling of a non-fatal error the software had already signalled. In 35% the handler was empty, logged only, over-caught and aborted, or contained a TODO.
Blast radiusSystemic. By comparison only 25% of non-catastrophic failures involved incorrect error handling, so this is the distinguishing property of the worst outcomes.
FixThe authors built a static checker for three trivial patterns; over 30% of the catastrophic failures would have been prevented had it been used, and it found 143 confirmed bugs across nine production systems.
Design ruleMost postmortem action items propose new detection. This paper says the higher-yield item is a lint rule on existing error handlers, and it is the item nobody writes because it does not name the incident.

Figure 5 · The November 2025 failure path, and where each known control would have stopped it

"Incident responders""Proxy fleet""Feature filegenerator""ClickHouse cluster""Incident responders""Proxy fleet""Feature filegenerator""ClickHouse cluster"Control A: validategenerated artefact shapeControl B: staged rolloutpromised in 2019Control C: treat internalinput as untrustedControl D: global kill switchper feature11:05 permissions changeduplicate column metadatafeature file, doubled size,global in minutes200-feature limitexceeded,unwrap on Err, panic11:20 5xx across core traffic11:31 automated testfireshypothesis: hyper-scaleDDoS13:37 correct cause identified15:06 core traffic restored
"Incident responders""Proxy fleet""Feature filegenerator""ClickHouse cluster""Incident responders""Proxy fleet""Feature filegenerator""ClickHouse cluster"Control A: validategenerated artefact shapeControl B: staged rolloutpromised in 2019Control C: treat internalinput as untrustedControl D: global kill switchper feature11:05 permissions changeduplicate column metadatafeature file, doubled size,global in minutes200-feature limitexceeded,unwrap on Err, panic11:20 5xx across core traffic11:31 automated testfireshypothesis: hyper-scaleDDoS13:37 correct cause identified15:06 core traffic restored
Every control on the right had been published, and in two cases enforced by tooling, before this incident. None of them was on this path. The two hours between impact and correct diagnosis are the detection gap, spent on a DDoS hypothesis.
Diagram source
"A manager who complains that too few action items were produced has revealed his/her real interest: the reduction of an incident to a manageable discrete list of things to be done." Richard I. Cook, Adaptive Capacity Labs, June 2019
05

Numbers you can plan against, and the ones nobody has

Every row carries its source and its date. The second table is the more useful one, because it is the list of things your board will ask for and you cannot get.

MetricValueAtContextAs ofSource
Catastrophic failures from bad error handling92%5 open-source distributed systems198 randomly sampled user-reported failures2014OSDI '14
Of those, detectable by simple error-path testing58%same corpusno design knowledge required2014OSDI '14
Public outage records naming no cause355 of 59732 internet services1,247 news and postmortem links, 2009 to 20152016SoCC '16
Public outage records naming the fix24%same corpuswhat was actually changed afterwards2016SoCC '16
Practitioners defining the review by its remediation list91%industry surveycore purpose of the post-incident meeting2019ACM Queue
Incidents resolved within two hours53%VOID corpuspositively skewed, so the mean misleads2022InfoQ / VOID
Correlation between incident duration and severitynone detectedVOID corpusroughly 2,000 reports, about 600 organisations2023InfoQ / VOID
Human-error outages tracing to procedures85%Uptime Institute surveyignored procedures or flawed procedures2025Uptime Institute
Organisations with a major human-error outage in 3 years~40%same surveyself-reported2025Uptime Institute
Detection to correct diagnosis, Cloudflare2h 17m18 Nov 2025impact 11:20 UTC, cause identified 13:37 UTC2025Cloudflare
Total impact, AWS us-east-1 DynamoDB DNS15h 52m19 to 20 Oct 2025manual intervention required2025AWS
Gap between shipping the code and triggering it, Google14 days29 May to 12 Jun 2025path unexercised until a policy row arrived2025Google Cloud
Incident review closure target5 working daysGitLabpublic RCA within 7 days for Severity 12026GitLab handbook
Time a change to the Kubernetes PRR gate waited on approval97 daysKubernetesthen closed unmerged as a duplicate2026PR 5645
Age of an open issue on a post-incident safety control4 yearsEnvoysilent no-op on removed runtime guards2026Issue 20212
Measured, claimed, derived, unknown

Measured: the OSDI and SoCC percentages, and every duration in this table, which comes from a first-party incident report with timestamps. Claimed: the Uptime Institute figures are self-reported survey responses from data-centre operators, not observations, and the sample skews toward facilities rather than software. Derived: the Cloudflare detection gap of 2h 17m and the Google gap of 14 days are subtractions from published timestamps, shown here so the arithmetic is visible. Stale risk: the VOID corpus figures are from 2022 and 2023 and the corpus has grown since; re-check before quoting the absolute counts, though the no-correlation finding is a property of the data rather than its size.

The four numbers nobody has published

This is the most useful paragraph in the guide for anyone about to promise a board that a post-incident process will reduce incidents. Across thirty-four primary sources, six documented processes and six first-party incident reports, no organisation has published: a completion rate for post-incident corrective actions; a repeat-incident rate defined consistently and tracked over time; a before-and-after comparison of incident rate against the introduction of a review process; or the age distribution of open corrective actions. Google's SRE Workbook offers one anecdote, that action items from an earlier postmortem reduced the blast radius of a similar incident three years later. That is one data point, self-reported, with no denominator.

Figures do circulate. A completion rate of 30% and a repeat rate falling from 45% to 12% both appear on aggregator blogs and vendor pages. Neither cites a primary source and neither is used here. If you need the number, the only honest route is to instrument your own tracker: corrective actions opened, closed, and closed as "will not do", bucketed by age. It takes a query, and it is the single highest-value measurement in this entire topic because nobody else has it either.

Allspaw frames the missing denominator more sharply than any dashboard does. Counting incidents without counting the comparable occasions that did not become incidents tells you nothing: "Oh, you've had six incidents this week. Out of how many?" Nobody has published that denominator either.

06

The evidence wall

Every source behind this page, graded and linked, with what to carry forward from each. Filter by kind.

Postmortem Cloudflare2025-11

Cloudflare incident on November 18, 2025

The most detailed first-party account of an unpipelined-artefact failure available. Carries a minute-by-minute timeline including the two hours spent on a DDoS hypothesis, and names the hardcoded limit and the unwrapped error explicitly.

Carry forwardInternally generated configuration is input, and input from your own systems is still input.
blog.cloudflare.com/18-november-2025-outage/
Postmortem Cloudflare2019-07

Details of the Cloudflare outage on July 2, 2019

Seven numbered commitments, several with dates and completion status. Read it next to the 2025 report: the fifth commitment is staged rollout of rule content, and the 2025 incident is the same property in a different file.

Carry forwardA remediation scoped to the artefact that broke will not cover the next artefact with the same property.
blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/
Postmortem Amazon Web Services2025-10

Summary of the Amazon DynamoDB Service Disruption in US-EAST-1

A rare public account of a race condition inside operational automation, with the staleness-check mechanism described precisely enough to reimplement the bug. Also documents the decision to disable the automation globally before fixing it.

Carry forwardShip the off switch with the automation. AWS reached for it first and it was already there.
aws.amazon.com/message/101925/
Postmortem Google Cloud2025-06

Google Cloud incident report, Service Control, 12 June 2025

States plainly that the failing code path was never exercised during the region-by-region rollout because it needed a policy change to trigger it, and that the feature was not flag protected. The remediation list is the clearest statement of the rule in this guide.

Carry forwardFeature flags default-off, on every change to a critical binary, without exception for small changes.
status.cloud.google.com/incidents/ow5i3PPK96RduMcb1SsW
Postmortem CrowdStrike2024-08

External Technical Root Cause Analysis, Channel File 291

An externally reviewed RCA with a numbered mitigation list. The sixth mitigation, staged deployment for Template Instances, is an admission that content had a separate and weaker release path than code.

Carry forwardTwo independent controls at the producer and the consumer, because either alone would have held.
crowdstrike.com/.../Channel-File-291-Incident-Root-Cause-Analysis
Postmortem GitLab2017-02

Postmortem of database outage of January 31

Still the most complete public account of a recovery chain failing at every link, written while the company was live-streaming the recovery. Also a worked example of 5 Whys applied to two separate problems, the outage and the restore.

Carry forwardSchedule a restore, not a backup. Test the alert that tells you the backup failed.
about.gitlab.com/blog/postmortem-of-database-outage-of-january-31/
Source & PRs Envoy2019-03

CONTRIBUTING.md, runtime guarded features

The rule as a contributor contract rather than an aspiration: high-risk and user-visible behavioural changes ship behind a named runtime flag that must remain safe to flip on a running process, with a deprecation timeline for removing the old path.

Carry forwardPut the post-incident rule where changes are made, in the contribution guide, not in a wiki page about reliability.
github.com/envoyproxy/envoy/blob/main/CONTRIBUTING.md
Source & PRs Envoy2019-03

PR 6134, codifying runtime guarded features

The change that turned a convention into a rule, authored by a maintainer, shipping documentation and tooling together. The review discussion is about ergonomics and test parameterisation, which is what adoption arguments actually look like.

Carry forwardA rule with no tooling is a preference. Ship the helper in the same change as the policy.
github.com/envoyproxy/envoy/pull/6134
Source & PRs Envoy2022-03

Issue 20212, reject unknown runtime guard names

Open for over four years. Documents the silent-failure mode of the safety control itself: when a guard is removed, an operator's override becomes a no-op with only a log line to say so.

Carry forwardAudit the controls you added after incidents. They degrade quietly and nothing pages you.
github.com/envoyproxy/envoy/issues/20212
Source & PRs Kubernetes2026-01

PR 5645, updating the PRR questionnaire (closed unmerged)

Ninety-seven days waiting for a production-readiness approver, a stale-bot label, then closed as a duplicate. The clearest available evidence of what it costs to run a review gate that a small group must staff.

Carry forwardBudget approver capacity for the gate and separately for changes to the gate.
github.com/kubernetes/enhancements/pull/5645
Source & PRs Etsy2016

Debriefing Facilitation Guide, structure and preparation

An open-sourced facilitation manual that instructs the facilitator to park remediation ideas until the timeline is complete, and states outright that prevention is not the goal. The most concrete artefact of the learning-over-fixing position.

Carry forwardSeparate the meeting from the commitment. Capture ideas during, decide after.
github.com/etsy/DebriefingFacilitationGuide
ADRs & RFCs Kubernetes2019-07

KEP-1194, Production Readiness Review process

The motivation is that feature authors and their own special interest group set the graduation criteria, so operator concerns went unrepresented. The remedy is a gate staffed by people deliberately outside the group.

Carry forwardThe reviewer who catches operational oversight is the one who does not know the design well.
github.com/kubernetes/enhancements/.../1194-prod-readiness
ADRs & RFCs Kubernetes2026-08

KEP template, Production Readiness Review questionnaire

Roughly thirty questions, opening with feature enablement and rollback, then observability, dependencies, scalability and troubleshooting. Answers are cross-checked against machine-readable metadata, so the gate is partly automated.

Carry forwardSteal this questionnaire. It is the best public checklist for the class of failure in section 4.
github.com/kubernetes/enhancements/.../kep-template/README.md
ADRs & RFCs Kubernetes SIG Architecture2026-08

Production readiness review, the process document

How the gate is actually run: who the approvers are, when in the release cycle the review happens, and the finding from the dry runs that a reviewer unfamiliar with the design catches items the owning group misses.

Carry forwardStaff the gate with people outside the owning group, and write down when in the cycle it binds.
github.com/kubernetes/community/blob/main/sig-architecture/production-readiness.md
ADRs & RFCs GitLab2026-08

Handbook, Incident Review

Three named roles, a Bar Raiser panel that must approve closure, a five working day target, and a written list of probing questions including the generalisation question that no other published process asks.

Carry forwardAdd one sentence to your template: where else is this true? It is the cheapest change in this guide.
handbook.gitlab.com/.../incident-review/
Case study Uptime Institute2025-05

Annual Outage Analysis 2025, seventh edition

Survey data across data-centre and IT operators. The finding that matters here is that the overwhelming majority of human-error outages trace to ignored or inadequate procedures, which is the remediation category postmortems produce most.

Carry forwardIf your action item is a procedure, you have chosen the control with the worst published track record.
uptimeinstitute.com/.../annual-outage-analysis-report-2025
Eng blog Adaptive Capacity Labs2019-06

Some Observations On the Messy Realities of Incident Reviews

Richard Cook on what people actually learn in a review, which is mostly about the organisation: which topics are discussable, how power works, and what management really wants from the meeting.

Carry forwardYour review teaches your engineers what the company values. They read it accurately whether or not you intended it.
adaptivecapacitylabs.com/2019/06/17/some-observations...
Eng blog Adaptive Capacity Labs2020-05

How Learning is Different Than Fixing

Allspaw's argument that the return on understanding the event exceeds the return on enumerating fixes for the components involved in it. Short, and the clearest statement of the position that opposes the Google and Amazon default.

Carry forwardFixing is bounded by the parts that broke. Understanding is not, which is why it generalises.
adaptivecapacitylabs.com/2020/05/06/how-learning-is-different-than-fixing/
Eng blog Surfing Complexity2024-09

Why I don't like discussing action items during incident reviews

Hochstein argues from scarcity: action items get planning time regardless, the cross-organisational hour does not recur, and he is explicit that this is a minority view among the meetings he has attended.

Carry forwardSpend the meeting on the thing that only the meeting can produce.
surfingcomplexity.blog/2024/09/28/why-i-dont-like-discussing-action-items...
Eng blog Surfing Complexity2025-11

Brief thoughts on the recent Cloudflare outage

A practitioner reading of the November 2025 report as a saturation failure in a protective subsystem, plus a fair criticism: the writeup cannot tell you what the engineer was thinking, so it cannot support the local-rationality question.

Carry forwardOnce a system is reliable, the protective subsystems become the leading cause of harm.
surfingcomplexity.blog/2025/11/26/brief-thoughts-on-the-recent-cloudflare-outage/
Eng blog Google2018

SRE Workbook, Postmortem Culture: Learning from Failure

The canonical statement of the action-item position, including the requirement that a user-affecting outage produce a tracked high-priority bug, and a warning that without formal tracking action items are forgotten and outages follow.

Carry forward"A postmortem without subsequent action is indistinguishable from no postmortem." True, and not sufficient.
sre.google/workbook/postmortem-culture/
Eng blog Will Gallego2019-02

Resilience Engineering and Error Budgets

The sharpest published critique of error budgets as a learning mechanism: they price the risk you chose to take and say nothing about the risk nobody knew was there, which is the category every incident in section 4 belongs to.

Carry forwardAn error budget is a release-cadence instrument. Do not let it stand in for analysis.
willgallego.com/2019/02/23/resilience-engineering-and-error-budgets/
Eng blog InfoQ and Verica2023-02

Moving Past Simple Incident Metrics: Courtney Nash on the VOID

The no-correlation finding between duration and severity, the skew argument against means, Allspaw's definition of shallow data, and the recommended replacements: service level objectives, coordination cost, and near-miss analysis.

Carry forwardReplace the MTTR tile with a coordination-cost tile: people, teams, seniority, per incident.
infoq.com/articles/incident-metrics-void/
Eng blog InfoQ and Verica2022-06

Analyzing Incident Data across Organizations: Courtney Nash on the VOID

Corpus size and shape, the 53% resolved within two hours figure, and the observation that near-miss reports are close to absent because nothing triggers a process and nobody wants to publish them.

Carry forwardThe events with the best learning-to-damage ratio are the ones your severity threshold ignores.
infoq.com/articles/analyzing-incident-data/
Paper University of Toronto2014-10

Simple Testing Can Prevent Most Critical Failures (OSDI '14)

198 sampled production failures across five systems. The 92% and 58% figures, the three trivial handler patterns, and a static checker that found 143 confirmed bugs in systems already using FindBugs and fault injection.

Carry forwardA lint rule on empty and over-catching error handlers outperforms most postmortem action items, and costs less.
usenix.org/system/files/conference/osdi14/osdi14-paper-yuan.pdf
Paper University of Chicago2016-10

Why Does the Cloud Stop Computing? (SoCC '16)

597 outages across 32 services over seven years, with the root-cause distribution and, more usefully, the honest accounting of how much of the public record says nothing. The recovery-chain argument is the paper's real contribution.

Carry forwardRedundancy is not the control. Detection, failover code and a working backup all have to be correct, and each is testable.
dl.acm.org/doi/10.1145/2987550.2987583
Paper ACM Queue2019-12

Beyond the Fix-it Treadmill

J. Paul Reed's three-month field study of how one high-performing organisation used post-incident artefacts, set against survey data showing 91% of practitioners define the meeting by its remediation list.

Carry forwardThe artefact's second life is as context for people who were not there. Write it for them.
queue.acm.org/detail.cfm?id=3380780
Paper SNAFUcatchers2017-03

STELLA: Report from the SNAFUcatchers Workshop on Coping With Complexity

A consortium of Etsy, IBM, IEX and Ohio State analysing each other's real incidents. Introduces dark debt and the above-the-line model, and observes that postmortems reliably surface model surprises while staying narrow about everything except code.

Carry forwardTrack the "I did not know it worked that way" moments. They are the measurable output of a review.
snafucatchers.github.io
Talk USENIX SREcon2022-03

Tales from the VOID: The Scary Truth about Incident Metrics

Nash at SREcon22 Americas, 14 March 2022, presenting from a corpus of nearly 2,000 reports across 660 organisations. Slides and video are linked from the USENIX programme page.

Carry forwardRoot-cause framing has a cost in reporting behaviour, not just in analytical accuracy.
usenix.org/conference/srecon22americas/presentation/nash
Talk Google SRE Prodcast2026-08

Human Factors in Complex Systems, with Rosenthal and Allspaw

A published transcript, which makes it citable line by line. Contains Lorin's Law on remediation items becoming latent conditions, Rosenthal on why start and end timestamps do not help, and the missing-denominator argument.

Carry forwardEvery remediation item is a change to a production system and deserves the scrutiny of one.
sre.google/prodcast/transcripts/sre-prodcast-03-12/
Talk QCon London via InfoQ2019-04

Allspaw on resilience engineering

InfoQ's report of the QCon London talk, 23 April 2019, with the working definition of resilience as the capacity to handle the unanticipated, which is the case a catalogue of anticipated fixes cannot cover.

Carry forwardDesign for the surprise you have not had, because your action-item list only covers the ones you have.
infoq.com/news/2019/04/allspaw-resilience-engineering/
Vendor Amazon Web Services2026-08

Correction of Error, AWS Well-Architected Framework

Amazon's published description of its Correction of Error mechanism: summary, impact, timeline, metrics, incident questions, 5 Whys, and action items, framed explicitly around avoiding recurrence.

Carry forwardThe template is good and freely copyable. The framing, corrective action as the object, is the thing to argue about.
wa.aws.amazon.com/wat.concept.coe.en.html
Vendor AWS Cloud Operations2022

Creating a correction of errors document

The operational detail behind the concept page: iterate with the team first, then route to leadership for external Correction of Error documents, with review level scaled to company size.

Carry forwardLeadership review makes the document durable and also makes it defensive. Decide which you are optimising for.
aws.amazon.com/blogs/mt/creating-a-correction-of-errors-document/
Vendor Verica2026-08

The VOID, Verica Open Incident Database

The corpus itself, searchable, which is the only public place to compare incident reports across organisations. Used here to confirm the absence of published action-item and repeat-incident data.

Carry forwardBefore you write your own postmortem template, read twenty reports from the corpus in your own domain.
thevoid.community/report
07

Build a miniature, then productionise it

Six rungs. The line between exercise and production work is between rungs three and four, where the artefact stops being a document and starts being a gate.

Read four reports on the same class and diff the remediation lists

Take the Cloudflare 2019 and 2025 reports, the Google Cloud June 2025 report and the CrowdStrike RCA. Tabulate every committed action against the property it protects, not the component it names.

Done when: you can state, in one sentence, the property all four share and name at least three artefacts in your own system that have it.  Teaches: that remediation lists are written against components, which is why they do not generalise.

Map your own unpipelined change surface

List every path by which behaviour reaches production without a code deploy. Feature flags, config stores, model artefacts, rule sets, DNS, index definitions, entitlement data, pricing tables. For each, record whether it is staged, whether it can be reverted without a deploy, and whether the consumer validates it.

Done when: the table exists and at least one row fails all three columns.  Teaches: that your release safety is scoped to code, and how much of production is not code.

Run one review with the remediation discussion moved to the end

Follow Etsy's structure: reconstruct the timeline first, park every improvement idea in a visible list, and do not commit to anything until the timeline is complete. Compare what the list contains against what you would have written in the first ten minutes.

Done when: at least one item on the parked list would not have been proposed under the old format.  Teaches: that early commitment to a fix ends the investigation.

Instrument the corrective-action tracker

Query your issue tracker for post-incident items: opened, closed, closed as will-not-do, still open, bucketed by age. Publish it monthly. Nobody else has this number, which is why yours is worth having.

Done when: the age distribution is on a dashboard and the oldest open item has an explicit decision against it.  Teaches: whether your process produces change or produces backlog.

Turn one recurring lesson into a mechanical gate

Pick the lesson your organisation has learned twice. Encode it where changes are made: a required field in the change template, a lint rule, a CI check, a contribution-guide rule with tooling, in the shape of Envoy's runtime guards or the Kubernetes production readiness questionnaire.

Done when: a change that violates the rule fails automatically, and somebody who never read the incident report hits it.  Teaches: the difference between a lesson stored in people and a lesson stored in the system.

Review a near miss with the same rigour as an incident

Find an event that was caught before customer impact. Run the full review. Then check whether your severity criteria would ever have triggered it, and change them if not.

Done when: a near miss has produced a tracked change and the trigger criteria have been amended.  Teaches: that the corpus everyone learns from is selected on damage, which is the worst possible sampling rule.

08

Keep hunting

The queries that found the material above. The vocabulary matters more than the operators: postmortem writing has a house style, and these phrases are in it.

First-party incident reports

  • "we have already disabled" postmortem automation worldwide
  • site:aws.amazon.com/message/ summary of the service disruption
  • "worst outage since" site:blog.cloudflare.com
  • "latent race condition" OR "latent defect" incident report 2025

The gap between two incidents

  • "staged rollout" postmortem commitment site:blog.<vendor>.com
  • "in the same manner used for other software"
  • "was not feature flag protected" OR "no feature flag" incident report
  • "replicated globally within seconds" OR "propagated globally"

The process, as written down

  • site:handbook.gitlab.com incident review bar raiser corrective actions
  • "correction of error" COE template 5 whys leadership review
  • "production readiness review" path:keps rollback disabled
  • "runtime guard" OR "reloadable_features" CONTRIBUTING behavioural change

The argument about whether any of it works

  • "action items" incident review "minority view" OR "I don't like"
  • "shallow data" incident MTTR Allspaw OR Nash
  • "near miss" incident analysis software why so few reports
  • repo:kubernetes/enhancements is:pr is:closed is:unmerged production readiness

Two mechanical notes from this hunt. First, the GitHub REST search endpoint answers is:pr is:closed is:unmerged queries as JSON when the web interface will not render, which is how the closed Kubernetes pull request in section 4 was found. Second, several of the best sources answer a plain fetch with a 403 and a normal browser user agent with a 200; USENIX, ACM Queue and GitLab's blog all behave this way, and a research pass that gives up on the first 403 loses the primary sources and keeps the summaries.

09

References

  1. Cloudflare, Cloudflare incident on November 18, 2025 Cloudflare blog, 18 November 2025. Checked 2026-08-28.
  2. Cloudflare, Details of the Cloudflare outage on July 2, 2019 Cloudflare blog, 12 July 2019. Checked 2026-08-28.
  3. Amazon Web Services, Summary of the Amazon DynamoDB Service Disruption in the Northern Virginia (US-EAST-1) Region AWS, October 2025. Checked 2026-08-28.
  4. Google Cloud, Incident report for the 12 June 2025 Service Control outage Google Cloud Service Health, 13 June 2025. Checked 2026-08-28.
  5. CrowdStrike, External Technical Root Cause Analysis, Channel File 291 CrowdStrike, 6 August 2024. Checked 2026-08-28.
  6. GitLab, Postmortem of database outage of January 31 GitLab blog, 10 February 2017. Checked 2026-08-28.
  7. Envoy Proxy, CONTRIBUTING.md, runtime guarded features CNCF, current. Checked 2026-08-28.
  8. Alyssa Wilk, runtime: codifying runtime guarded features, PR 6134 envoyproxy/envoy, merged 13 March 2019. Checked 2026-08-28.
  9. Envoy Proxy, Issue 20212, reject runtime variables with the runtime guard naming if they are not known flags envoyproxy/envoy, opened 3 March 2022, still open. Checked 2026-08-28.
  10. Kubernetes, KEP-1194, Production Readiness Review process kubernetes/enhancements, from 31 July 2019. Checked 2026-08-28.
  11. Kubernetes, KEP template with the Production Readiness Review questionnaire kubernetes/enhancements, current. Checked 2026-08-28.
  12. Kubernetes SIG Architecture, Production readiness review kubernetes/community, current. Checked 2026-08-28.
  13. Kubernetes, PR 5645, KEP-3926: updating the PRR questionnaire kubernetes/enhancements, opened 9 October 2025, closed unmerged 29 January 2026. Checked 2026-08-28.
  14. Etsy, Debriefing Facilitation Guide, structure and preparation Etsy, 2016. Checked 2026-08-28.
  15. GitLab, Handbook, Incident Review GitLab, current. Checked 2026-08-28.
  16. Google, The Site Reliability Workbook, Postmortem Culture: Learning from Failure Google, 2018. Checked 2026-08-28.
  17. Richard I. Cook, Some Observations On the Messy Realities of Incident Reviews Adaptive Capacity Labs, 17 June 2019. Checked 2026-08-28.
  18. John Allspaw, How Learning is Different Than Fixing Adaptive Capacity Labs, 6 May 2020. Checked 2026-08-28.
  19. Lorin Hochstein, Why I do not like discussing action items during incident reviews Surfing Complexity, 28 September 2024. Checked 2026-08-28.
  20. Lorin Hochstein, Brief thoughts on the recent Cloudflare outage Surfing Complexity, 26 November 2025. Checked 2026-08-28.
  21. Will Gallego, Resilience Engineering and Error Budgets willgallego.com, 23 February 2019. Checked 2026-08-28.
  22. Courtney Nash and Matt Campbell, Moving Past Simple Incident Metrics InfoQ, 14 February 2023. Checked 2026-08-28.
  23. Courtney Nash, Analyzing Incident Data across Organizations InfoQ, 28 June 2022. Checked 2026-08-28.
  24. Ding Yuan et al., Simple Testing Can Prevent Most Critical Failures USENIX OSDI '14, October 2014. Checked 2026-08-28.
  25. Haryadi S. Gunawi et al., Why Does the Cloud Stop Computing? Lessons from Hundreds of Service Outages ACM SoCC '16, October 2016. Checked 2026-08-28.
  26. J. Paul Reed, Beyond the Fix-it Treadmill ACM Queue 17(6), November and December 2019. Checked 2026-08-28.
  27. SNAFUcatchers, STELLA: Report from the SNAFUcatchers Workshop on Coping With Complexity Etsy, IBM, IEX and Ohio State University, March 2017. Checked 2026-08-28.
  28. Courtney Nash, Tales from the VOID: The Scary Truth about Incident Metrics USENIX SREcon22 Americas, 14 March 2022. Checked 2026-08-28.
  29. Google SRE Prodcast, Human Factors in Complex Systems, with Casey Rosenthal and John Allspaw Google, transcript. Checked 2026-08-28.
  30. InfoQ, John Allspaw on resilience engineering, QCon London InfoQ, 23 April 2019. Checked 2026-08-28.
  31. Uptime Institute, Annual Outage Analysis 2025 Uptime Institute, 6 May 2025. Checked 2026-08-28.
  32. Amazon Web Services, Correction of Error, AWS Well-Architected Framework AWS, current. Checked 2026-08-28.
  33. Amazon Web Services, Creating a correction of errors document AWS Cloud Operations Blog. Checked 2026-08-28.
  34. Verica, The VOID Report Verica Open Incident Database. Checked 2026-08-28.