Backoff

Build a retry schedule and see every attempt's delay, with the jitter that stops your clients synchronising.

Runs in your browser — nothing you type here is sent anywhere.
Schedule
base ms
factor
attempts
cap ms
Jitter
delay(n) = min(30000, 100 × 2^(n-1))
sleep = delay/2 + random(0, delay/2)

Half fixed, half random. Keeps a floor under every wait and still breaks the herd up.

4.7s
expected total wait
6.3s
worst case
#sleepspreadelapsed
150ms – 100ms75ms
2100ms – 200ms225ms
3200ms – 400ms525ms
4400ms – 800ms1.1s
5800ms – 1.6s2.3s
61.6s – 3.2s4.7s
best case3.2s
expected4.7s
worst case6.3s
capnever reached
retries end
total ms4725
delays ms100, 200, 400, 800, 1600, 3200

Without jitter every client that failed together wakes up together: the retry wave lands on the recovering service in one burst and knocks it straight back over. Spreading the wake-ups usually buys more than tuning the factor. Spread bars share one axis, so you can watch the window slide and widen; elapsed takes the midpoint of each range, worst case sums the top of it, and retries end assumes attempt 1 fires now.

Exponential backoff without jitter produces a thundering herd: every client that failed at the same moment retries at the same moment, and the service that was struggling gets hit by a synchronised wave. Adding randomness spreads them out, and the different strategies — full, equal, decorrelated — spread them differently.

Set the base delay, the multiplier and the cap, and the whole schedule is laid out attempt by attempt with the total elapsed time. Seeing that a five-attempt schedule gives up after thirty seconds, or after eleven minutes, tends to settle arguments about timeouts quickly.

What people open it for

In the terminal

tools backoff

Every utility is also a command in the desktop's shell.

More systems tools

Open the full desktop, with all 47 utilities