Error Recovery & Graceful Degradation
What is Error Recovery & Graceful Degradation?
Error Recovery & Graceful Degradation ensures systems fail gracefully with clear recovery paths instead of confusing errors. Instead of cryptic messages, the AI acknowledges limitations, explains issues, and offers next steps. It's critical for maintaining trust in production systems where failures have consequences. Examples include ChatGPT admitting uncertainty, Google Translate offering alternatives, or voice assistants suggesting different approaches when misunderstanding.
Problem
AI systems inevitably make mistakes or encounter unhandleable situations, potentially frustrating users.
Solution
Design graceful degradation and clear recovery paths to maintain user trust when AI fails.
Real-World Error Recovery & Graceful Degradation Examples
Implementation
When to use Error Recovery & Graceful Degradation, and when it backfires
Use it when
- The failure is something the user can act on: retry with a change, rephrase, switch modes, or escalate. A recovery path only matters when there is a path.
- Failures are expected and consequential: production AI will hit ambiguity, timeouts, and unsupported requests, where a raw error breaks trust.
- The system can degrade partially instead of failing wholesale: a cached answer, a simpler fallback, or a partial result with the gap flagged.
Don't, or minimize, when
- The 'error' is really a normal state you're dressing up. Inventing a recovery flow for something that should just work hides a bug instead of fixing it.
- The failure is silent and safe and the user has nothing to do. A modal apologizing for something invisible just manufactures anxiety.
- You're catching the error only to show a friendlier message while swallowing the real failure. A prettier dead-end is still a dead-end.
The trap
The dead-end apology: a polite 'Something went wrong, please try again' with no diagnosis, no alternative, and nothing different on retry. It feels considerate but leaves the user exactly as stuck, and 'try again' on an unchanged input just reproduces the failure. Empathy without a path is theater.
Take it into your own product
- 1
Every error needs an exit, not just an apology.
'Something went wrong' is where bad UIs stop. The useful move is the next action: retry with a change, switch modes, use a partial result, or reach a human. An error message with no path is a dead-end with manners.
- 2
Degrade, don't collapse.
When the best answer isn't available, return the next-best one: a cached result, a simpler model, a partial answer with the gap flagged, instead of failing wholesale. Partial and honest beats nothing, as long as you don't pass it off as the full answer.
- 3
Say what happened in the user's terms.
A stack trace or 'Error 500' just transfers your problem to the user. Name the issue in their language and, where you can, why, so they can actually decide what to do next. Keep the technical detail in your logs.
- 4
Make 'try again' actually different.
Retry on an unchanged input only reproduces the failure. Either change something (rephrase, adjust, route differently) or tell the user what to change. A button that repeats the same error is a trap dressed as a lifeline.
- 5
Catch the error, don't swallow it.
A friendlier message that hides the real failure from your logs is worse than the raw error: the user is still stuck and now you're blind to it. Recover gracefully on screen and surface the truth to monitoring.
Add Error Recovery & Graceful Degradation to your product
Copy the prompt below into Claude Code or Cursor in your repo. It encodes the four moves on the left and asks Claude to find your AI decision surfaces and update them. Claude reports what it changed and asks before adding dependencies.
Check if your product already has this pattern
Upload a screenshot. We'll tell you which of the 36 patterns your AI interface uses and where the gaps are.
Audit My Design