Your Recovery Tooling Shares Fate With the Outage It's Meant to Fix
Coinbase's 14 July 2026 outage lasted about fifty minutes, but the sharp detail in the postmortem is why it lasted at all: a circular dependency meant the deployment tooling engineers needed for a rollback was trapped inside the same cluster that was down, so they fell back to break-glass access and a manual console. Nine years earlier, AWS could not update its own status dashboard during the 2017 S3 outage because the dashboard ran on the S3 that had failed. Same bug, different decade. The request path gets all the reliability rigor; the recovery path, the thing you reach for only when everything is on fire, is usually untested and sharing fate with what it is meant to rescue.
Antonio J. del Águila
Knaisoma
The change that took Coinbase down on 14 July 2026 was reviewed, approved, and shipped through the normal pipeline as a low-risk update. At 12:34 in the afternoon, Eastern time, a routine configuration change went out to a shared production Kubernetes cluster, part of an ongoing migration meant to make the platform faster and more reliable. Three minutes later, at 12:37, all inbound traffic to that cluster had stopped. Transfers, card transactions, and onchain services went dark across retail, institutional, and developer platforms, and stayed that way for roughly fifty minutes.
The trigger, when the postmortem laid it out, was almost boring: an unintended Kubernetes resource name collision that the pre-production checks did not catch, which knocked out a gateway and took the cluster’s inbound path with it. That part is a decent cautionary tale about naming and validation, and most of the coverage stopped there. The detail worth sitting with is the next one. When the engineers went to roll the change back, they could not use the tooling they would normally use, because that tooling had a circular dependency on the very cluster that was down. They recovered by reaching for break-glass access and performing a manual rollback through the cloud provider’s console.
Read narrowly, that is a story about one company’s deployment pipeline. Read the way it actually happened, it is a story about a category of failure that has almost nothing to do with the trigger and everything to do with the shape of the recovery: the tools you need most in an outage had been built to depend on the thing that was out.
Two planes, and you only test one
Every system you run has two planes, even if you have never drawn them separately. The first is the plane that serves the workload: the request path, the databases, the queues, the gateways, everything that carries traffic on a normal Tuesday. This plane gets almost all of the reliability attention the industry has accumulated over the last fifteen years. It is load tested, chaos tested, spread across availability zones, watched by service level objectives, and rehearsed in game days.
The second plane is the one you use to change or restore the first: the deployment pipeline, the rollback path, the traffic-drain and failover controls, the secret rotation, the console you log into when the automation stops answering. Call it the recovery plane. It is the plane you touch only when something is wrong, which is exactly why it is the plane nobody exercises. Almost every team can quote its p99 latency and its error budget. Very few can say, with any confidence, whether the path they would use to recover from a total cluster failure runs through that same cluster.
The property that was missing at Coinbase, and the one worth naming, is recovery-path independence: your recovery plane must be able to outlive your production plane. If the production plane can take the recovery plane down with it, you do not have a recovery plane. You have a second copy of the outage.
If the production plane can take the recovery plane down with it, you do not have a recovery plane. You have a second copy of the outage.
A nine-year-old bug wearing new clothes
The reason this deserves an article rather than a shrug is that it is not new, and the profession keeps rediscovering it. Go back to 28 February 2017. An engineer on the Amazon S3 team ran a routine command to remove a small number of servers from a billing subsystem and, because of a mistyped input, removed far more than intended, taking out enough of the index and placement subsystems that both needed a full restart. S3 in the US-EAST-1 region was disrupted for several hours starting at 9:37 that morning, Pacific time, and a long list of services that depended on it went with it.
The part of that postmortem that matters here is not the typo. It is a single admission Amazon made about their own status page: they were unable to update the Service Health Dashboard because the dashboard itself relied on S3 in the region that was down. For a stretch of the incident, the company running the outage could not use its own tool to tell customers there was an outage, and fell back to posting updates on Twitter. The dashboard shared fate with the thing it was built to report on.
Nine years later, Coinbase’s rollback shared fate with the thing it was built to fix. The trigger classes are different, a mistyped command versus a name collision, but the failure class is identical. Something you reach for only in a crisis had been quietly wired to depend on the system that is in crisis. Name it and you can hunt for it: the circular recovery dependency. Its signature is unmistakable in a timeline. The opening stretch of the incident is spent not applying the fix but getting to a place from which the fix can be applied at all.
”Low risk” describes intent, not blast radius
Both of these changes were classified as low risk, and in a narrow sense both classifications were defensible. The Coinbase change was small and went through review. The AWS command was a standard operational task that had run many times before. The label was wrong for the same reason in each case: it described the intent and size of the change, not its blast radius on a shared control plane.
On a shared production cluster, or a shared region, or any shared control plane, there is no such thing as a low-risk change. There are only changes with a small blast radius and changes with a large one, and those are not the same as small and large changes. A one-line configuration edit that happens to collide with a gateway’s resource names has a blast radius the size of the cluster, and the size of the edit does nothing to shrink it. This is the anti-pattern to watch for, and it is cultural before it is technical: low-risk theater, the habit of grading a change by how routine it feels rather than by what it can reach. The symptom is a growing stack of post-incident reviews that keep discovering “routine” changes with cluster-wide reach, each one a fresh surprise, none of them changing how the next change gets graded.
The companion anti-pattern is structural: the shared-fate control plane, where the deployment tooling, the secrets, the observability, and the workloads all live in the same cluster or region, so a single event turns off the lights and disables the switch you would use to turn them back on at the same moment. The convenience of running everything in one place is real, and for plenty of systems it is the right call. It stops being the right call the instant the thing running in that one place is the thing you would use to recover the one place.
The break-glass audit
The fix is not heroic and it is not a product. It is an audit you can run in an afternoon and a discipline you then have to keep. Take your handful of genuine recovery actions, the things you would actually do in a severe incident, and for each one write down what it depends on and whether that dependency survives the incident the action is meant to address. The table below is the shape of it. Fill it in with your own systems; the value is entirely in the third and fourth columns being answered honestly.
| Recovery action | Depends on | Survives the incident it fixes? | Independent fallback |
|---|---|---|---|
| Roll back a bad deploy | Deploy pipeline, cluster API, CI runners | No, if the deploy took out the cluster the pipeline runs on | Out-of-band console access with a pre-provisioned identity, direct to the platform API |
| Drain or fail over traffic | Control plane, service mesh, DNS or load balancer | No, if the control plane is what failed | A traffic control you can operate from a separate plane, such as the provider console or edge config |
| Rotate a leaked or broken credential | Secrets manager, identity provider | No, if the secret or identity system is degraded | A break-glass credential stored out of band, tested and time-boxed |
| Scale up to absorb load | Autoscaler, capacity APIs, quota | Partly, depending on whether those APIs share fate | A pre-approved manual scaling path and some reserved headroom |
| Tell people what is happening | Status page, alerting, dashboards | No, if any of them run on the affected system | A status channel hosted somewhere the outage cannot reach |
Two columns do the work. “Survives the incident it fixes” is the recovery-path independence question asked one action at a time, and it is uncomfortable precisely because the honest answer for most teams, on most rows, is “no” or “we are not sure.” The last column is the whole deliverable: for every recovery action that fails the survival test, there has to be a path that does not route through the failure. Coinbase’s own remediation reads exactly this way once you translate it out of postmortem language. They committed to improving redundancy between their deployment tooling and the infrastructure it manages, so the tools needed in an outage cannot be taken down by the outage itself, and to auditing and regularly exercising their break-glass access paths, so the manual recovery route is fast and reliable when they need it. That is the fourth column, and the discipline behind it, stated by a team that had just paid to learn the lesson.
~50 min
Coinbase's 14 July 2026 disruption. The gateway failed at 12:37 PM ET and was restored by 1:20, but only after engineers used break-glass access, because the normal rollback tooling shared fate with the down cluster.
Coinbase postmortem, July 2026
3 min
From the 'low-risk' config change at 12:34 PM ET to all inbound cluster traffic stopping at 12:37. The cause was a resource-name collision the pre-production checks did not catch.
Coinbase postmortem, July 2026
9 years
Between the 2017 AWS S3 outage, where the status dashboard could not report the failure because it ran on the failed region, and Coinbase in 2026. Same failure class.
AWS S3 service disruption summary, Feb 2017
Independence is not free, so buy it deliberately
None of this is an argument that every recovery action needs a fully independent second plane. That way lies a parallel copy of your infrastructure, a second set of credentials to secure and rotate, and a standing maintenance burden that competes directly with the work that moves the product. Recovery-path independence is a real cost, and spending it everywhere is its own failure of judgment.
The decision is the same trade-off you make everywhere else in reliability, run against two variables. Buy independence for a recovery action when both of these hold: the action targets shared-fate infrastructure whose failure removes your normal control path, and the recovery-time objective for that system is tight enough that a slow, improvised fallback would breach it. A payment gateway, a primary cluster, the identity system, all three carry tight objectives and wide blast radius, and independence earns its keep. For a system whose blast radius is contained and whose recovery-time objective is measured in hours rather than minutes, accept the shared fate, write down that you accepted it, and spend the budget where it moves the needle. The goal is to decide on purpose, ahead of time, rather than to discover the decision at 12:37 on a Tuesday afternoon.
Two constraints tend to decide whether this survives contact with the roadmap. The first is that the independent path has to be exercised or it does not exist. A break-glass credential nobody has used since the day it was created is not a recovery path; it is a folklore entry, and the expired certificate, the revoked permission, or the engineer who has since left the company will surface at the worst possible moment. This is the third anti-pattern, break-glass theater: an emergency path that is real on the wiki and untested in the world. The only cure is to fire it on a schedule, in a drill, and time how long it actually takes. The second constraint is organizational. Building and maintaining a recovery plane that is deliberately separate from the production plane is unglamorous work that produces nothing a customer will ever see, right up until the afternoon it is the only thing standing between a fifty-minute incident and a much longer one. It gets funded when someone with budget authority has genuinely internalized that the recovery path is part of the system, not an accessory bolted to the side of it.
The uncomfortable thing about both of these outages is how ordinary the triggers were. A name collision. A mistyped input. Neither company lacked engineering discipline; both had review, pipelines, and pre-production checks in place. What decided the length and the pain of each incident was not the trigger but the shape of the recovery, specifically whether the path back was independent of the path that broke. That is a design property you can choose in advance, audit in an afternoon, and rehearse on a calendar, and it is far cheaper to choose before the incident than to discover during one.
If you are investing in reliability this year, the request path is probably already the part that gets attention. The gap we most often find sits one layer over: the recovery path, the rollback, the failover, the break-glass access you reach for only when everything else is down, quietly sharing fate with the systems it is meant to rescue. We help teams map those paths, test where they collapse, and separate out the ones that genuinely need to stand on their own. If that is on your list, we would be glad to compare notes.
Stay updated
Get insights on engineering transformation delivered to your inbox.
Newsletter coming soon.