Graceful degradation means software acts differently when it is becoming overloaded or when systems it depends on are down. For example, a web site might have two user interfaces: one is rich and full of images, while the other is lightweight and all text. Normally users receive the rich interface. However, if the system is overloaded or at risk of hitting bandwidth limits, it switches to the lightweight mode.
This often not built in from the beginning as app may depend on a single db/cluster. Hard to know what the sensible lines to tolerate outage are. So I have a feeling that this is most often done retroactively. Any good methodologies for identifying opportunities to gracefully degrade? I've seen the pattern in which the team does so after each relevant failure. Not ideal, but less likely to be wasted effort, though might be a while till the same failure/outage occurs again.
Some systems go into read-only mode.