When many clients fail together, they often retry together. Exponential backoff increases the wait, but a shared schedule can still produce synchronized waves. Randomized delays spread those waves out.
Same clients, same retry budget, two scheduling rules.
Each client waits exactly the same amount before each retry.
Each client draws a fresh delay from zero to the current backoff cap.
After a failed request, a client should not retry instantly in a tight loop. Exponential backoff makes later retries progressively less frequent. With a base delay of 400 ms, this model uses caps of 400, 800, 1,600, and 3,200 ms for four retries.
If every client uses those exact delays and their clocks start together, they all wake up together. The server gets a quieter interval followed by another concentrated burst. Full jitter chooses an independent random delay under each cap instead:
The chart counts retry attempts in 100 ms windows. It does not include the original failed request. Each client's next wait begins after its previous retry. The random sequence is seeded so a sample stays stable while you adjust the controls; the button starts a new sample.
Retry-After guidance where applicable. For overloaded services, a circuit breaker, queue, or admission control may matter more than the exact jitter formula.The peak number is a property of this simple model, not a prediction for a production service. Use actual traffic traces and failure tests to set retry budgets.
Choose a retry policy per operation. Set a cap and a deadline, add independent jitter, and make the request safe to repeat. Then measure whether retries help successful recovery or merely add load. The right policy is the one that lets the service recover without clients becoming a second outage.