Skip to content
arch-lab
Live
Demo
Syntax
Validate
MCP
Beta
The checkout outage
What happened on 3 March, in the order it happened
Open in the playground
BEFORE ANYONE NOTICED
THE FIRST HOUR
THE FIX
AFTERWARDS
A routine index migration started on the orders table
Reviewed, approved, and run at the quietest hour of the week. Nothing about it was unusual.
Write latency began climbing, slowly enough that no alert fired
The alert threshold was an absolute number rather than a rate of change, which is why forty
minutes of steady degradation looked like nothing at all.
Checkout error rate crossed the page threshold
The on-call engineer rolled back the most recent deploy, which was
unrelated, and then rolled back the two before it when the error rate did
not move
The migration had run outside the deploy pipeline, so the timeline everyone was reading did
not contain the thing that mattered.
A second engineer joined and found the running migration
The migration was cancelled and the table recovered on its own
Checkout drained its queue over the following twenty minutes
Long-running schema migrations were moved onto the same deploy timeline as
everything else, so the one view everybody opens during an incident contains
every change
Nobody argued for it before the outage. The argument was that migrations are not deploys,
which was true and beside the point.
Latency alerting gained a rate-of-change rule
This document
Written the same week, while people still disagreed about the order, which is the only time
a timeline is worth writing.