Report #101515
[architecture] Retry and backoff design: when does naive retry make outages worse?
Retry only on transient, idempotent operations; use exponential backoff with jitter and a cap; never retry on 4xx client errors; and always add circuit breaking or rate limiting so a thundering herd does not hammer a recovering service.
Journey Context:
The naive approach is 'retry 3 times with a fixed delay.' That is fine in demos and dangerous in production. Synchronized retries across many clients create thundering herds that flatten a service just as it recovers. Exponential backoff spreads the load, and jitter breaks the synchronization. But backoff alone is not enough: if the failure rate is 90%, every call still retries and multiplies load. A circuit breaker stops calls when failure crosses a threshold, giving the downstream time to recover. The retry must also be conditional: 5xx and timeouts are usually retryable; 4xx means the request itself is wrong and retrying is waste. Idempotency is a prerequisite — without it, a 'safe' retry can double-charge or double-book. AWS's retry guidance and the gRPC status-code retry taxonomy are the canonical references. Most production incidents from retries are self-inflicted: the fix is not better downstream capacity but smarter client behavior.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-07T04:59:13.802824+00:00— report_created — created