Economic order quantity has spent the last few years on the wrong end of planning commentary. Demand is volatile, supply is stochastic, and a formula published in 1913 makes an easy target. The audit verdict here is less dramatic: under stable demand and honestly measured costs, EOQ still minimizes the sum of ordering and holding cost, and the cost curve around its answer is so flat that even large input errors carry a small, computable penalty. What actually breaks it are three specific regimes, and each one is detectable before it costs you money.
Key takeaways
EOQ = sqrt(2DS/H)still minimizes ordering plus holding cost when demand is steady and the cost inputs are measured rather than guessed.- The cost curve is flat at the optimum. Ordering double the optimal quantity raises relevant cost by a factor of 1.25. Doubling a cost input raises it by a factor of only about 1.06.
- Three regimes genuinely break the formula: lumpy or intermittent demand, cost inputs that are structural fictions, and quantity discounts or container constraints.
- When demand is lumpy but visible, period order quantity beats a fixed lot. For the low-value tail of the catalogue, min-max beats optimization effort entirely.
The 1913 paper everyone cites and nobody read
Ford W. Harris, a production engineer, published the square-root formula in February 1913 as “How Many Parts to Make at Once” in Factory, The Magazine of Management, framing it as the balance between the interest and depreciation on stock and the setup cost of a production run. The paper then sat in obscurity for decades: Operations Research reprinted it in 1990, and Donald Erlenkotter’s companion history of the model records that the original went largely unnoticed until its rediscovery in 1988, even as the formula itself became a staple of every operations course.
That history matters for one reason. The formula has survived more than a century of scrutiny because the math is correct for the problem it states. Every real argument about EOQ is an argument about whether your problem is the one it states.
What the formula actually trades
EOQ = sqrt(2 * D * S / H)
D = annual demand, in units per year
S = cost of placing one order (or one setup)
H = cost of holding one unit for one year
Order in large batches and you pay to hold stock you do not need yet. Order in small batches and you pay the ordering cost again and again. EOQ is the exact point where the two annual costs are equal, which is a property worth remembering on its own: if an item’s annual ordering spend and annual holding spend are wildly unequal, you are not near the optimum, whatever the system says.
A worked example
Suppose a distributor sells 12,000 units a year of a fastener kit that costs $18 per unit. Placing and receiving an order costs $60 all-in, and holding cost runs at 25 percent of unit cost per year, so H is $4.50 per unit-year.
EOQ = sqrt(2 * 12000 * 60 / 4.50)
= sqrt(320,000)
= 566 units
In this example, the policy orders about 21 times a year. Annual ordering cost comes to $1,272 and annual holding cost to $1,274 (equal, as promised, apart from rounding), for a total relevant cost of $2,546.
How flat is the curve? Do the math once
Total relevant cost at any order quantity Q is:
TC(Q) = (D / Q) * S + (Q / 2) * H
Divide TC(Q) by the cost at the optimum and substitute r = Q / EOQ. The D, S, and H terms cancel, leaving a penalty function that depends only on how far you are from the optimum:
TC(Q) / TC(EOQ) = (r + 1/r) / 2
At r = 1 the ratio is 1 and its slope is zero, so first-order errors in quantity produce only second-order errors in cost. Here is the worked example again at five order quantities:
| Order quantity | Ordering cost | Holding cost | Total | Penalty |
|---|---|---|---|---|
| 283 (half EOQ) | $2,544 | $637 | $3,181 | +25.0% |
| 400 | $1,800 | $900 | $2,700 | +6.1% |
| 566 (EOQ) | $1,272 | $1,274 | $2,546 | baseline |
| 849 (1.5x EOQ) | $848 | $1,910 | $2,758 | +8.4% |
| 1,131 (2x EOQ) | $637 | $2,545 | $3,181 | +25.0% |
Two consequences follow:
- Ordering at half or double the optimum costs a factor of exactly (2 + 0.5) / 2 = 1.25. A 100 percent error in the quantity moves total cost 25 percent.
- Errors in the inputs are gentler still, because they enter under a square root. Use an S or H that is wrong by 2x in either direction and the quantity moves by a factor of 1.41, so the penalty is (1.41 + 1/1.41) / 2, about 1.06. A doubling error in a cost you can barely measure moves total cost by roughly 6 percent.
The same arithmetic makes pack-size rounding nearly free: pushing the 566-unit optimum up to 600 to fill pallets, for example, moves total cost by a factor of about 1.002. This robustness is EOQ’s most underrated property, and it is why “our costs are only estimates” is a weak argument against using it.
“Most EOQ failures I see are input failures. Teams feed the formula an ordering cost from a decade-old costing study and a holding rate copied from a textbook, then blame Harris when the order sizes look wrong. The square root has never been the problem.”
Nikhil Jathar, founder of AvanSaber
The three regimes that genuinely break it
Lumpy or intermittent demand
The derivation assumes demand arrives at a steady, known rate, so stock depletes in a smooth sawtooth. When a SKU sells nothing for weeks and then moves in bursts, the average annual rate D still exists, but the smooth-depletion picture behind the holding-cost term does not, and a fixed lot size strands remnant stock between demand spikes. EOQ also only ever answers how much. The question of when to order belongs to the reorder point, whose own standard formula breaks on exactly this kind of non-normal demand.
Cost inputs that are fictions
The flat curve forgives scaling errors, but it cannot forgive a cost model that is structurally wrong. Two patterns dominate. First, S gets inflated by allocation: a purchasing team’s whole salary bill divided by order count is not the marginal cost of one more purchase order, and an inflated S produces oversized lots across the entire catalogue. Second, H gets understated by omission: a flat carrying rate that ignores obsolescence and markdown risk makes slow, short-lifecycle goods look cheap to hold, and they are not. The audit is one question asked twice: what actually changes if you place one more order, and what do you actually lose per unit-year on the shelf (capital, space, insurance, shrinkage, obsolescence)?
Structural breaks are worse than bad estimates. If holding cost is stepwise because warehouse space comes in fixed chunks, or ordering cost is shared across a joint order covering dozens of SKUs, the smooth TC(Q) curve above is not your cost function at all, and no input correction fixes that.
Price breaks and container constraints
An all-units quantity discount makes unit cost a step function of Q, and since H is usually a percentage of unit cost, every price band has its own EOQ and its own curve. Total cost is discontinuous at each break, so the optimum comes from a procedure, not the formula alone:
- Compute the EOQ within each price band using that band’s unit cost.
- Keep the ones that are feasible, meaning the quantity actually falls inside its own band.
- Compare total annual cost, now including the purchase cost itself, at each feasible EOQ and at each break quantity above it. Pick the cheapest.
Container and MOQ constraints are the blunter version. When the supplier ships only full containers, the constraint sets Q, and the formula’s job changes from decision to diagnostic: the penalty function above prices exactly what the constraint costs you per year, which is often the strongest number to bring to a supplier negotiation.
When to abandon it
For lumpy but visible demand (MRP environments, B2B order books), period order quantity keeps the economics and drops the fixed lot. Convert the EOQ into a time supply (EOQ divided by average period demand, rounded to whole periods), then order each cycle’s actual net requirement rather than a fixed quantity. You keep roughly the right order frequency while never buying units that a known gap in demand would strand.
At the other end of the catalogue, ABC analysis should decide whether the optimization is worth running at all. For C items, a simple min-max band costs almost nothing to operate, and the flat curve guarantees the sloppiness is cheap.
Finally, remember that Q is one half of a policy, not a policy. The order quantity you pick feeds your Type 2 fill rate, because a larger Q spreads the same expected shortage over more units, a coupling worked through in service level vs fill rate. Lot sizing, buffers, and order timing belong in one conversation, which is the argument of our broader piece on running inventory and order management as one practice.
The verdict
EOQ does exactly what it claims: it minimizes ordering plus holding cost under stable demand and honest inputs, with a curve forgiving enough to absorb real estimation error. Audit the two cost inputs once a year, check which regime each SKU class lives in, and route the lumpy tail to period order quantity. If you want a second set of hands to run that audit and set lot-sizing policy across the catalogue, AvanSaber’s inventory advisory practice does this work case by case.
The formula has outlived every planner who first learned it. Most of what gets blamed on it belongs to the inputs.