Why retail demand swings, how DCs absorb it with safety stock, and the √n pooling law that explains why one DC needs ~10× less buffer than the stores it serves.
Every manufacturer that sells through warehouse distribution is exposed to two factors:
Get those two numbers right and the shelf stays full. Get them wrong, and an out-of-stock photo lands in your inbox Friday afternoon.
At a high level,
In this piece, we'll discuss DC execution, and assume the store always knows when it's out of stock. That's not always true in practice, and the visibility gap is itself a real source of stockouts. In future articles, we will discuss the retailer side.
Daily demand for a single SKU is noisy - for example, weekends typically drive more volume. A reasonable model to use is the negative binomial (NB) distribution. Picking a mean (units per day) and a dispersion parameter , the distribution gives variance .
Suppose a store sells on average = 20 units/day and has a dispersion factor of = 5; then the standard deviation is 10. We'll define the coefficient of variation to be ; in this case, it's about 50%. Such a coefficient leads to large day-to-day swings:
In the same year you see swings from 0 to 60 in daily demand. The shaded line shows what the store actually sold, clipped to the inventory available in the store that day. On high-demand days, demand pokes above the sold line: those are units the store would have moved if it had additional stock.
The reatiler and manufacturer never see true demand directly — they see sales, and when demand outpaces supply, sales get capped by what's on the shelf. The retailer has to decide how much inventory to hold: enough that the high-demand days don't run the store empty, but not so much that spoilage, expiry, and a full backroom eat up margin.
Most brand portfolios mix high-velocity hero SKUs with a tail of slower-moving products - e.g. flavor variants and premium offerings. The swings for that tail are larger. With the same NB shape but a mean of 1 unit per store per day, a slow mover spends 39% of its days at zero sales, and the coefficient of variation jumps from 50% to 110%:
While fast mover wobbles around its mean, the slow mover spends most of its days at zero or one and occasionally produces a spike.
Holding a 95% service level at one store with a two-day delivery lead time,
The safety stock formula scales with the variance, not the mean, so as the velocity shrinks the fraction of demand you have to hold only goes up.
The simplest replenishment policy is order-up-to-target. Each day, the store (or DC) reviews on-hand inventory and orders enough to bring the inventory position (on-hand + on-order) back up to a target level :
Cycle stock covers the average demand during the lead time (plus the one-day review window). If you sell 20 a day and lead time is 2 days, you need 60 in cycle stock to bridge from one delivery to the next.
Safety stock is the buffer for the variability around that average. The multiplier maps to a in-stock service level:
Without any safety stock, the statistical swings in demand will eventually lead to stockouts. We can visualize what it looks like to omit safety stock via a "lean" policy and compare to an "adequate" policy that adds safety stock at a 95% target service level:
Same demand, two policies — lean (cycle only) vs. adequate (cycle + 95% safety):
The lean policy results in frequent out-of-stocks due to demand spikes. The adequate one holds about 29 extra units of safety stock and avoids stockouts entirely over the same period.
So safety stock is the price you pay to convert variance into service level. The question is, of course, how much to hold.
Suppose a retailer has stores, each independent but with the same demand pattern.
If every store buffered itself in isolation, it must accout for deviation in demand individually. So total safety stock across the network would be linear in — times the per-store buffer.
But pool the inventory at a single DC, and the math changes. The aggregate daily demand across independent stores has:
At the DC, deviation in demand grows relative to the square root of the number of stores serviced. Moreover, aggregate demand is much smoother than any individual store as the network size grows.
Here's the same per-store demand at three network sizes, normalized so each panel is centered at its mean:
The single store wobbles 50% around its mean on a typical day. A 100-store aggregate wobbles 5% - exactly a x decrease. This is the central limit theorem at work.1
Plug that smoother aggregate variance back into the safety-stock formula, and we see that the safety stock across the network now also grows like instead of linearly. The per-store safety burden shrinks like :
For a 100-store network operating at a 95% service level, pooling at the DC requires 233 units of safety stock, vs. 2,326 if every store buffered itself. This is the math behind the modern hub-and-spoke retail supply chain. It's why distributors are eager to consolidate stock at a few bigger DCs.
While the savings apply globally, slow movers still carry a larger relative buffer at every network size, because their per-store coefficient of variance is higher. Expressing safety stock as a percentage of expected lead-time demand:
At = 100, the high-velocity SKU only needs ~6% of demand held as safety stock, while the slow mover still needs ~13%, more than 2x as much as a fraction of its sales.
This is also why slow-moving SKUs get hit hardest by sudden demand spikes. In normal times they need a much higher safety stock as a fraction of demand, and during a spike they deplete faster because that buffer — while large relative to sales — is small in absolute units.
When the DC empties, every store it serves drains within their own on-hand buffer — and there's nothing in to refill them. When a 30-day demand surge without sufficient allocation hits (think: a promo or an unanticipated category spike), here's what happens:
The DC goes out of stock, hits zero for 28 days, and the supplier's 15-day lead time means there's nothing the retailer's planning system can do to recover in time. While the DC is out, store voids climb across the network — peaking at 54% of stores with empty shelves on the worst day.
Zooming into one store from that same incident:
After inventory crashes, the shelf sits empty, day after day, while the DC has nothing to send. In this case, we observe ~620 units of lost sales for a single SKU at a single store over a month-long horizon. Knock-on effects might include the store slotting in a competitor in the shelf space, or customers switching brands -- which might compound the length of the gap.
Importantly, the pooling law assumes demand across the stores is independent. But national promotions, holidays, weather, or viral moments can push stores the same direction on the same day. Just like the demand spike we modeled above, when stores move together the aggregate variance balloons and safety-stock requirements grow far faster than predicts.
This example uses the same demand mean and the same number of stores; only the cross-store correlation is varied. The network swings between in-stock periods and sharp, episodic voids that hit many stores at once. We'll walk through this failure mode end-to-end in the next post.
Daily demand at store i: with , giving and .
Order-up-to-target with daily review and lead time : , with .
Aggregate standard deviation across stores: under independence.
The central limit theorem says that when you add up a bunch of independent random quantities — here, daily demand at different stores — the sum tends toward a normal (bell-curve) distribution whose standard deviation grows like , not . Per-store noise partly cancels in the aggregate, which is why the DC sees a much smoother signal than any individual store does. ↩