How do I make an app reliable under failure?
Design around failure modes:
- Timeouts and per-dependency budgets so one hung call can't use up every request slot
- Bounded retries with exponential backoff and jitter, plus idempotency — avoid retry storms
- Circuit breakers and bulkheads when repeated downstream failures would cascade
- Graceful degradation: a cached public catalogue may stay visible while recommendations are down — but never serve stale payroll permissions
- Overload protection: queues, concurrency limits, connection pool caps and shedding of non-critical work
- Health: readiness and liveness probes, safe shutdown and deployment health checks
Then rehearse it: inject dependency failures in staging and confirm the app degrades the way you designed.