Thought Toys · Emergence · Exhibit 81

Nobody panicked, and the factory went haywire

Customers walk into a shop and buy an almost-steady number of things. Four links up the chain, the factory is being asked for wildly swinging quantities. No one hoarded, no one lied, no one guessed badly — every link followed the same sensible rule.

Orders placed, day by day — same vertical scale throughout orders placed what customers actually bought

Try disturbing the chain
your turn — drag the lead time to 0 and watch the whipping stop

What you're seeing

Each strip is one link, and each link can see only the strip directly above it — the shop sees customers, the wholesaler sees the shop's orders, and so on. Nobody has a view of the actual shoppers except the shop. Every link runs the same rule: keep a forecast of demand, hold enough stock to cover the delivery wait, and order enough to replace what sold plus whatever your stock target moved by. That last clause is the whole story. When sales tick up, a link doesn't just order the extra units it sold — it also orders more to raise its target, because a higher forecast means it now wants more days of cover on the shelf. So the order it places is bigger than the change it saw. And the link above has no way to tell the two apart. It sees a big order and does the same thing again.

Press Send one 10% rise. Customer demand goes perfectly flat and then steps up once, by a tenth, and stays there — no noise, no drama, one honest change. Watch it travel. By the factory it arrives as a spike far bigger than the step that caused it, followed by an overshoot in the other direction as everyone realises they over-ordered. Nothing in that sequence was a mistake, and nobody could have seen it from where they stood.

Two sliders can switch the effect off entirely, and they're the interesting ones. Drag the lead time to zero — if goods arrived instantly, nobody would need a stock target, so nobody revises one, and the chain passes demand through untouched at every link. Or drag forecast follows sales to zero — now each link ignores what it just saw and never revises its target, and again the amplification is exactly one. Note what you can't switch it off with: the customer-variation slider. Crank the noise all the way up with lead time at zero and the strips stay identical. The randomness was never the cause. The cause is a reasonable rule, applied by people who can only see one step downstream.

The rule, exactly. Each link smooths its forecast, targets enough stock to cover the lead time L, and orders replacement plus the change in target: ft = αdt + (1α)ft−1, St = Lft, Ot = dt + (St St−1) which reduces to Ot = dt + (dt ft−1). For independent customer demand, one link multiplies the variance by Var(O)/Var(d) = (1 + )2 + L2α3/(2α) — never below 1, equal to 1 exactly when L=0 or α=0, and compounding link by link up the chain. Verified in node (improve/verify/81-bullwhip.js, 19 checks): that closed form is derived from the policy and then cross-examined against a 400,000-day Monte Carlo simulation of the policy itself at five different settings, agreeing to within 0.3%; at α=1, L=2 it lands on exactly 13, which you can check by hand. A four-link chain at the default settings measures 4.4× → 20.9× → 101.4× → 497.7× the customers' own variance. Five negative controls isolate the cause: zeroing the lead time, or the forecast responsiveness, drops amplification to 1.000000000 with the demand noise completely unchanged; a single 10% step in provably noiseless demand still spikes to 277 units four links up; and mean orders equal mean sales to three decimal places at every link, so nobody is over-ordering on average — only the swing grew. Four identical links, one product, no capacity limits, no price promotions and no one gaming an allocation — all of which make it worse in the real world, not better.

Also in Emergence: Phantom Traffic Jams →

All 12 in Emergence
  1. 01Phantom Traffic Jams
  2. 02Schelling's Segregation
  3. 07Conway's Game of Life
  4. 11Percolation
  5. 15Reaction & diffusion
  6. 18Sandpiles & self-organized criticality
  7. 22Diffusion-limited aggregation
  8. 29The simplest rule that makes complexity
  9. 32Fireflies that sync
  10. 41Small-world networks
  11. 43The Ising model
  12. 81Nobody panicked, and the factory went haywire — you are here

← the cabinet · Thought Toys — a cabinet of explorable explanations. Exhibit 81.