What is Graceful Degradation?
Graceful degradation is the design property where a system reduces functionality under failure or load instead of failing completely. Core capabilities keep working while non essential ones are shed.
#How graceful degradation works
It requires an explicit ranking of functionality by importance. A commerce site can lose recommendations, reviews, and personalization while checkout continues, but only if someone decided in advance which components are shed and which are protected.
The implementation uses fallbacks, feature flags, and load shedding. When a dependency fails, the calling code returns a reduced response rather than propagating the error. When load exceeds capacity, lower priority requests are rejected so higher priority ones still complete.
#Why graceful degradation matters
Partial service is almost always better than none, and the difference is frequently the difference between an incident and an outage.
- Preserved revenue: core transactions continue while peripheral features are down.
- Contained failures: one component failing does not take the whole product with it.
- Reduced urgency: a degraded system can often wait for business hours.
- Load survival: shedding low priority work keeps the system responsive under a spike.
#Limits and hidden risks
Degradation can be invisible, which is dangerous. If a feature silently returns empty results when its dependency fails, error rates stay clean and nobody notices that the product is broken. Every degraded path needs its own telemetry and usually a user visible indication.
Degraded paths also rot. Code that runs only during failures is rarely exercised, and a fallback that has not run in a year may not work when it is finally needed. This is one of the strongest arguments for chaos experiments.
#Graceful degradation vs failover
Failover replaces a failed component with a healthy equivalent: another replica, another region, another provider. Full functionality is preserved and the requirement is having a redundant copy available.
Graceful degradation reduces functionality when no equivalent is available. If a recommendation service is down everywhere, failover has nothing to switch to, and degradation means showing the page without recommendations. Failover handles infrastructure failure, degradation handles capability failure, and a system needs both because not every capability can be made redundant.
#Key takeaways
- Degradation requires an explicit ranking of which functionality is shed and which is protected.
- Fallbacks, feature flags, and load shedding are the implementation mechanisms.
- Silent degradation is dangerous, so every degraded path needs telemetry and usually a user visible signal.
- Failover handles infrastructure failure with redundancy; degradation handles capability failure without it.
#Frequently asked
How do you decide what to degrade?
Rank functionality by user and business value in advance. The decision cannot be made sensibly during an incident.
Should users be told the system is degraded?
Usually yes for functionality they would notice. Silent degradation produces confusion and support load that a brief message prevents.
How do you keep degraded paths working?
Exercise them deliberately through chaos experiments or scheduled tests. Code that only runs during failures is code that has not been tested.
Related terms
- 2 min
Circuit Breaker
SRE conceptsA circuit breaker stops calls to a failing dependency after a threshold of failures, returning an error immediately instead of waiting for a timeout.
- 2 min
Code Resilience
AI & automationIn this glossary, code resilience refers to the property of software that continues to function acceptably when its dependencies fail, its inputs are…
- 2 min
Chaos Engineering
SRE conceptsChaos engineering is the practice of deliberately injecting failures into a system to discover weaknesses before they surface on their own.
- 2 min
Blast Radius
Incident managementBlast radius is the extent of what a failure or change can affect.