In short: The z in the textbook expression comes from a cycle service level, which is a probability of an event, while most businesses believe they are targeting fill rate, which is a proportion of volume. The square root of lead time term treats lead time as fixed and drops the lead time variance term, which on a typical import item is larger than the term it keeps. The normal assumption fails on slow movers, which are counts and want a Poisson or negative binomial, and on promoted items, which are mixtures of two distributions pooled into one standard deviation. Square root scaling assumes successive periods are independent, and the standard deviation of rolling sums over the lead time window replaces that assumption with a measurement.
Almost every business running inventory uses some version of the same expression. Safety stock equals a service factor, times the standard deviation of demand, times the square root of the lead time. It appears in every textbook, it is built into every ERP, and it is usually the first thing a new planner learns.
It is a reasonable approximation under conditions that are rarely met. Four of its assumptions break in ordinary operating environments, and each one breaks in a direction that costs money. Worth knowing which is biting you before you go looking for a bigger system.
One: the service factor measures a different thing than the target you set
The z in that formula is a normal quantile corresponding to a cycle service level. Cycle service level is the probability of not stocking out during a replenishment cycle. It is a probability of an event.
Fill rate is the fraction of demand you satisfy from stock. It is a proportion of volume.
These are different quantities and they diverge substantially. An item ordered in large batches relative to its demand has few cycles per year, so a 95% cycle service level allows a stockout in one cycle out of twenty, and if that cycle is long, the units missed during it can be a meaningful share of annual volume. The fill rate on that item might be 98% or 88% depending on the order quantity, and the formula does not know the difference because order quantity does not appear in it.
Most businesses believe they are targeting fill rate. Most systems are computing cycle service level. The gap is silent and it is largest exactly where it hurts, on slow movers with large order quantities.
The correct treatment for a fill rate target is the standard sequential model, where you solve for the reorder point using the normal loss function rather than the plain quantile. The condition is that the expected shortage per cycle equals the order quantity times one minus the target fill rate, and the loss function relates that to a z value. It is a slightly more involved calculation and it is closed-form, so there is no computational excuse for skipping it.
The practical consequence of running the wrong one is systematic. Items with a high ratio of order quantity to demand variability end up over-stocked, items with a low ratio end up under-stocked, and both errors are invisible in the aggregate because they cancel in the total inventory number.
Two: lead time is a distribution
The square root of lead time term treats lead time as a fixed number. Take the average and move on.
For domestic replenishment from a reliable supplier, this is often fine. For anything crossing an ocean, a customs regime, or a supplier with capacity problems, it discards the dominant source of risk.
The correct expression for the variance of demand over a random lead time has two terms. The first is lead time multiplied by demand variance, which is what the standard formula captures. The second is squared mean demand multiplied by lead time variance, which the standard formula drops entirely.
Compare the two on a realistic item. Demand of 1,000 units a week with a standard deviation of 200. Lead time of 8 weeks with a standard deviation of 2 weeks. The first term gives 8 times 40,000, which is 320,000. The second gives 1,000,000 times 4, which is 4,000,000. The term your formula ignores is more than ten times the term it uses. The buffer is wrong by a factor of roughly three and a half, and no amount of tuning the service level fixes a missing term.
This is the single most consequential error in the list, and it is also the easiest to check. Pull actual receipt dates against promised dates for your top suppliers, compute the standard deviation, and see whether it is small enough to ignore. Frequently it is not, and frequently nobody has ever looked because the data lives in a receiving system rather than a planning one.
Three: demand is not normal, especially where it matters
The z factor assumes demand is normally distributed. For a fast-moving item aggregated to a weekly bucket this is often close enough, since sums of many small independent purchases tend toward normal.
It is badly wrong for two common cases.
Slow movers are counts. An item selling three units a week is not approximately normal at any sample size, and a normal buffer on it will produce a fractional recommendation and can imply negative demand in the lower tail. These want a Poisson or, when the variance exceeds the mean, a negative binomial, and then a base stock level read directly off the resulting quantile rather than from a z table. Overdispersion is the usual condition in retail, so negative binomial is the better default.
Promoted items are mixtures. Demand during a promotion and demand outside it come from different distributions, and pooling them produces a standard deviation that describes neither. The resulting buffer is too large for the baseline weeks and too small for the promoted ones, which is the worst of both. Split the series, size the buffer against baseline variability, and handle promotional volume as a planned requirement rather than as noise to be buffered.
That second point is worth dwelling on, because it is a common source of over-stocking that looks like prudence. If a third of your demand variance is caused by promotions you scheduled yourself, buffering against it means holding stock to protect you from your own calendar.
Four: consecutive periods are not independent
The square root scaling assumes that demand in successive periods is uncorrelated, so variances add. Real demand is autocorrelated. A strong week is followed by a strong week, because trends, seasons and shifts in consumption persist.
When demand is positively autocorrelated, variance over multiple periods grows faster than linearly, so the square root understates it and the buffer is too small. When demand is negatively autocorrelated, which happens with forward buying where a big order is followed by a lull, the square root overstates it.
The clean fix is to stop deriving the multi-period variability analytically and measure it directly. Take your history, form rolling sums over a window equal to the lead time, and compute the standard deviation of those sums. That empirical figure captures whatever autocorrelation structure exists without requiring you to model it. It takes about ten lines of code and it replaces an assumption with a measurement.
The better question
Fixing all four gets you a more accurate buffer for a service level somebody chose. It leaves the larger question untouched, which is whether that service level is the right one.
Service targets in most businesses are inherited. Someone set 97.5% at some point, it was probably reasonable then, and it has been applied uniformly across the catalogue ever since. Uniform targets are almost never optimal, because the cost of holding stock and the cost of missing a sale both vary enormously across items.
The framing that replaces it is a service and cost frontier. For each item, the relationship between the safety stock investment and the service it buys is concave. Early units of buffer deliver a lot of service, later units deliver very little. Across a catalogue you can allocate a fixed inventory budget to maximise total service by equalising the marginal service gain per dollar across every item. This is Lagrangian marginal analysis, and the result is a curve showing what each total investment level buys you.
What that curve shows, consistently, is that the same total investment allocated by marginal analysis rather than by a uniform target buys noticeably more service. The differences concentrate in two places. Cheap items with volatile demand deserve more buffer than a uniform target gives them, and expensive items with stable demand deserve considerably less.
The conversation that follows is better than the one about z factors. It stops being about whether the target should be 97 or 98 and starts being about what you are willing to spend and where it should go.
What I would not oversell
None of this makes the buffer correct at a single node if the network is holding stock in the wrong place. Sizing a buffer well at a distribution centre that should not be holding that item at all is a locally right answer to a globally wrong question, and network placement is a separate calculation with its own literature.
The measured multi-period variability approach also needs enough history to be stable. With a year of weekly data and an eight-week lead time you have very few independent rolling windows, and the empirical standard deviation from them is noisy. In that situation the analytical formula with a lead time variance term is the more reliable option, and the empirical approach becomes better as history accumulates.
And a caution about precision. A buffer computed to four decimal places from a demand standard deviation estimated on forty weeks of data is precise about something uncertain. The value in fixing these four issues is that it removes structural bias rather than producing an exact number. Structural bias is worth removing because it points the same direction every time.
If you only do one thing from this list, go and get the lead time variance. It is usually the largest error, it is the cheapest to check, and the data to check it already exists somewhere in your receiving records.