practice

Degradation Ladder

A pre-agreed ordered list of capabilities the system sheds under load, with the ordering owned by the business and the mechanism owned by the architect.

graceful-degradationload-sheddingdecision-rightspeak-events

A degradation ladder is the answer, written down in advance, to "what do we turn off, in what order, when we cannot serve everything?" Each rung names a capability, the signal that triggers shedding it, the user-visible behaviour that results, and how the rung is recovered.

It exists because at the peak of a demand event the window between "load is rising" and "the system is unrecoverable" can be under a minute. Any decision requiring a human in the loop at that timescale is an aspiration, not a control.

Why it matters

Systems without a ladder do not stay up and refuse gracefully. They fail in whichever order their resource exhaustion happens to produce, which is usually the worst possible order — the checkout path starves because a recommendation call is holding its threads, and the feature that generates no revenue takes down the one that does.

Implementation patterns

  • Rungs triggered on measured signals — queue depth, latency percentile, dependency error rate, concurrency utilisation — not on a human's read of a dashboard.
  • Shed by request class, not uniformly. Anonymous browsing before authenticated sessions; new sessions before in-flight checkouts; enrichment before core.
  • Static fallbacks that require no dependencies. A cached bestseller list beats personalised recommendations that need a service which is, by hypothesis, already struggling.
  • Automatic recovery with hysteresis, so the system does not oscillate between rungs.
  • Rehearsal. Exercise every rung under realistic load before the event.

Industry example

Extreme synchronised-demand events — the flash sales that platforms like Alibaba run at scale, or a major live-stream drop — are the canonical case. Millions of users arrive within seconds for a small set of items. Capacity cannot be added at that timescale, so the only variable is what the system stops doing.

A mature ladder for such an event looks roughly like: personalised recommendations replaced by a static list; reviews and social proof dropped; search facets reduced to a cached subset; non-essential write paths (wishlists, view tracking) queued rather than executed; and finally admission control placing new sessions in a waiting room while in-flight purchases complete.

Note what is never on the ladder: inventory correctness. Overselling is a business failure that degradation must not cause, so the reservation path is protected by shedding everything around it rather than by weakening it.

Failure scenarios

  • A ladder that has never been exercised. Shedding recommendations turns out to break the homepage, because the fallback path was never run. Untested degradation is not a control.
  • Ordering decided by engineers alone. Which capability is expendable is a revenue and trust judgement. An implicit engineering judgement discovered by the business afterwards is an organisational failure, not a technical one.
  • All-or-nothing shedding. No intermediate rungs, so the system goes from full service to a maintenance page.
  • No recovery path. Rungs that require a deployment to reverse, so degradation outlives the event.

Trade-offs

A ladder costs real engineering effort for behaviour used a few times a year, plus the ongoing cost of keeping fallbacks working. It also introduces the risk of shedding when the system did not need to. Against that, it converts an uncontrolled failure into a designed one, and it moves the business decision from the middle of an incident to a room where people can think.

Interview question

"Your platform expects a tenfold traffic spike for a two-hour event. Walk me through what you shed and in what order, who decides that ordering, and how you prove on the day before that each rung actually works."