Definition · Exponential backoff and jitterUnder exponential backoff the delay before attempt i is base × 2ⁱ⁻¹. Under jitter of width w the delay is instead drawn uniformly from [d(1 − w/2), d(1 + w/2)), where d is that same nominal delay. Jitter of 100% therefore spreads attempt i uniformly over an interval of length d centred on d.
The lab draws its delays from a seeded linear congruential generator — multiplier 1 103 515 245, increment 12 345, modulus 2³¹ — so the histogram is the same every time the page is opened and a reader can check what they were told. Change the seed and the peak moves a little; change the jitter and it moves a lot.
600 clients, 20-second outage, base 1000 ms, 8 attempts allowed
retries per second, no jitter
second 0 1 2 3 4 5 6 7 8 9 … 16 … 32
count 0 600 600 0 600 0 0 0 600 0 … 600 … 600
six waves of 600 = 3600 retries in total
peak, measured in 200 ms slots: 600 per slot = 3000 /s
The slot width is the whole measurement and the lab says so on its face. Without jitter every client in a wave retries in the same millisecond, so the true instantaneous spike is six hundred requests in one millisecond; any bucket wider than that understates it. At the 200 ms resolution the lab uses, the reported 3000 a second is a floor rather than a measurement.
The same clients, spread
the same run with 100% jitter, seed 7
peak, no jitter 3000 /s
peak, with jitter 925 /s a factor of 3.24
total, no jitter 3600 retries
total, with jitter 3323 retries
retries per second, with jitter
second 0 1 2 3 4 5 6 7 8 9 10 11
count 298 603 438 161 233 225 81 76 122 99 100 109
Two things changed and they are worth separating. The peak fell by a factor of 3.24, which is what jitter is for. The total fell slightly too, from 3600 to 3323, which is an artefact of the outage boundary: a jittered attempt that lands after the service has recovered succeeds and the client stops, where its unjittered twin would have retried once more. Jitter is not a way to reduce total load; the small change here is a side effect.
Example · What the recovering service seesA service coming back after a twenty-second outage has a first second in which it is either hit by 3000 requests or by about 900, depending on a single configuration parameter. If its capacity is 1500 a second, the first case fails again immediately — and every client that fails re-enters the backoff schedule, which is the previous lesson's loop with a synchronised phase. The second case is served.
What jitter costs, and what full width means
Jitter does not increase the mean delay: the interval [d(1 − w/2), d(1 + w/2)) is centred on d, so half the draws are earlier than the nominal delay and half later. What it costs is predictability — a particular client may retry sooner or later than the schedule says — and that is almost never a cost anyone is actually paying.
Full-width jitter, w = 100%, spreads attempt i over [0.5d, 1.5d). Half-width leaves the waves partly visible: at 50% the same run peaks at 1240 a second rather than 925, because each wave is smeared over half the interval and neighbouring waves no longer overlap enough to fill the gaps. The lab's jitter slider makes that comparison directly.
Example · The cap that matters more than the baseBackoff without a cap reaches a 32-second delay by the sixth attempt and 512 seconds by the tenth, which is long enough that the client has effectively given up without saying so. Real policies cap the delay, and a capped backoff with jitter is the standard shape: exponential up to a ceiling, then uniform on a jittered interval around that ceiling. The waves this lesson is about are a property of the early attempts, which is exactly where the cap does not apply.