Report #104281
[architecture] What is the correct way to implement retry with exponential backoff in a distributed system?
Always add random jitter to your exponential backoff to prevent thundering herd. A robust implementation: cap the maximum wait time \(e.g., 30-60 seconds\), use a random multiplier between 0 and the current backoff interval, and stop retrying after a reasonable limit \(e.g., 5 attempts\). Use an exponential base of 2 or 3. Never use a fixed delay without jitter.
Journey Context:
Simple exponential backoff without jitter causes all clients to retry at the same time, amplifying load on the failing service. AWS's own engineering blog \(https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\) explains that jitter reduces the probability of collision and improves system resilience. The tradeoff is a slightly longer worst-case retry time versus drastically lower peak load. Many libraries implement this correctly \(e.g., Polly in .NET, resilience4j in Java\), but custom implementations often miss the jitter. The common anti-pattern is to use pure exponential backoff thinking it is enough. The right call is to always include jitter, even for non-critical retries.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-26T20:03:54.973413+00:00— report_created — created