pattern

Graceful Degradation in Practice

also called Fallback, Degraded Mode, Feature Shedding

Losing functionality rather than losing the service, and why the degradation ladder is a business decision that must be made before the incident.

resiliencefallbackproductavailability

Definition

Continuing to provide core functionality when components fail, by reducing or removing non-essential capability rather than failing entirely.

Why it matters

Because the alternative to a degraded experience is usually no experience. A product page that cannot fetch recommendations can render without them; a page that treats that failure as fatal returns an error and loses the sale.

The distinction that makes this actionable is hard versus soft dependencies. A hard dependency's failure fails the request. A soft one's degrades it. Most dependencies can be made soft with a cache, a default or a fallback — and doing that deliberately is what makes ambitious availability targets achievable, because serial hard dependencies multiply.

Implementation patterns

Static or cached fallbacks. Personalised recommendations fail, serve a popular-items list. Live pricing fails, serve the last known price with a staleness indicator.

Feature shedding by priority, with a defined ladder: which capabilities are dropped first as load rises or dependencies fail.

Read-only mode, where writes are unavailable but the service continues serving reads — frequently far better than being entirely down.

Queue and confirm later, converting a synchronous dependency into an asynchronous one so the user's action is accepted even when the downstream is unavailable.

Reduced fidelity — lower-resolution images, fewer results, simpler ranking.

Failure scenarios

The fallback exists in code and was never wired up. This is by far the most common finding in chaos experiments, and it is only discoverable by actually inducing the failure.

The fallback path is untested and slower than the primary, so it collapses under the load it receives at exactly the moment the primary fails.

Timeouts too long to degrade in time. A 30-second timeout on an optional dependency means the user waits 30 seconds before the fallback engages, which is indistinguishable from an outage.

No signal that degradation is active. The system is running degraded for days and nobody knows, because degraded mode is not alerted or displayed.

The ladder invented during the incident, so the order is decided by whichever component fails first rather than by business priority.

Industry example

Netflix's fallback discipline is the enabling condition for their chaos engineering: a personalised row that fails is replaced by a static one, so a customer sees a slightly worse homepage rather than an error. The chaos experiments are only tolerable because the degradation is designed.

Retail peak events depend on the same thing — recommendations, reviews and personalisation shed deliberately so the checkout path survives, decided calmly in advance.

Trade-offs

Degradation costs engineering effort per dependency and produces an experience that is worse than normal — which must be acceptable to the business, and for some domains it is not. A partially correct financial figure is worse than an error; a partially personalised homepage is not.

That distinction is the design question: for each capability, is a degraded answer better or worse than no answer?

Interview question

Your KYC verification vendor is down for six hours. Onboarding stops. Why did a vendor outage become your outage?

The answer should be that the vendor's availability was accepted as yours, and that a degraded mode was never agreed. Strong candidates present the options as a business decision — queue for later verification with limited functionality, risk-based rules for low-value onboarding, or fail closed — and note that the failure was not choosing, so the default in the code decided.