Design useful outcomes when dependencies fail.
1. Failure classification
Distinguish validation, authorization, quota, network and provider failures. Only retry recoverable failures and preserve actionable feedback for the user.
2. Idempotent operations
A timeout may occur after a write succeeds. Use stable operation IDs and status reconciliation before replaying a consequential action.
3. Offline contracts
Cache only data the user may retain and define freshness. A cached answer must not be represented as a live verified result when its sources may have changed.
Worked scenario
The app loses connectivity after saving a report. Reconciliation finds the saved operation and avoids a duplicate report.
Apply it
Create a failure matrix with retry limits, fallback state and user message for each category.
Check your understanding
Every retry policy is bounded and accounts for possible prior completion. Explain the decision and show evidence from your implementation or design. If you cannot demonstrate it yet, revisit the relevant section before continuing.