EOQ explained: the trade-off, the maths, and when to ignore it
EOQ explained with a worked example: the square-root formula, why ordering and holding cost are equal at the optimum, and the assumptions that break.
EOQ, the economic order quantity, is the square root of two times annual demand times cost per order, divided by annual holding cost per unit. At 90,000 units a year, $100 per order and $2.00 to hold a unit for a year, EOQ is 3,000 units — 30 orders a year, with ordering cost and holding cost both $3,000.
Key takeaways
- EOQ = √(2DS ÷ H). At the optimum, annual ordering cost and annual holding cost are exactly equal — that equality is the fastest check on your arithmetic.
- The total cost curve is flat near the bottom. Being 25% off EOQ costs about 4% more, so rounding to a case or pallet quantity is free.
- EOQ scales with the square root of demand: doubling demand raises the order quantity by 41%, not 100%.
- Ordering cost S is the input people fabricate. If a blanket order releases automatically, S is near zero and EOQ collapses to small, frequent deliveries.
- A quantity discount can lose. In the example below, 1% off in exchange for a 22,500-unit order costs $9,475 a year more than ordering 3,000.
Every order size is a bet against itself. Order in large batches and you pay to store, insure and finance stock you will not touch for months. Order in small ones and you pay the buyer, the carrier and the receiving dock over and over. EOQ — the economic order quantity — is the batch size where those two costs are lowest added together. It is a hundred-year-old model, it is wrong about several things, and it is still the right place to start on a stable purchased item.
- Economic order quantity (EOQ)
- The order quantity that minimises the sum of annual ordering cost and annual inventory holding cost, ignoring the purchase price of the goods. Purchase price drops out because buying 90,000 units a year costs the same whether they arrive in four deliveries or forty.
The EOQ formula and the cost it minimises
EOQ = √(2DS ÷ H)
Total relevant cost = (D ÷ Q) × S + (Q ÷ 2) × H
ordering cost holding costThe second line is the one worth understanding. Ordering cost falls as Q rises, because you place fewer orders. Holding cost rises as Q rises, because average inventory is half the order quantity. EOQ is where those two lines cross, and the square-root formula is simply the algebraic solution to that crossing point.
A worked example
A make-to-stock manufacturer buys one machined component. Annual demand is 90,000 units. The purchasing team costs $340,000 a year fully loaded and processes about 3,400 order lines, so $100 per order is a defensible S. The part costs $8.00 and the company's carrying rate is 25%, so H = $8.00 × 25% = $2.00 per unit per year.
| Step | Calculation | Result |
|---|---|---|
| Numerator | 2 × 90,000 × $100 | 18,000,000 |
| Divide by H | 18,000,000 ÷ 2.00 | 9,000,000 |
| Square root | √9,000,000 | 3,000 units |
| Orders per year | 90,000 ÷ 3,000 | 30 |
| Annual ordering cost | 30 × $100 | $3,000 |
| Average inventory | 3,000 ÷ 2 | 1,500 units ($12,000 at cost) |
| Annual holding cost | 1,500 × $2.00 | $3,000 |
| Total relevant cost | $3,000 + $3,000 | $6,000 |
This buyer currently orders 9,000 at a time, ten times a year, because that is a full pallet layer and it always has been. Ordering cost is 10 × $100 = $1,000 and holding cost is 4,500 × $2.00 = $9,000, so total relevant cost is $10,000 against $6,000 at EOQ. The habit costs $4,000 a year on this one component and parks $36,000 of average stock instead of $12,000.
Enter your own demand, order cost and holding cost to get EOQ, order frequency and the cost penalty on the quantity you order today.
The cost curve is flat, and that is liberating
EOQ answers look precise. They are not, and they do not need to be, because the total cost curve is almost flat near its minimum. Here is the same component at multiples of EOQ.
| Order quantity | Orders/yr | Ordering cost | Holding cost | Total | Penalty vs EOQ |
|---|---|---|---|---|---|
| 1,500 (½ × EOQ) | 60 | $6,000 | $1,500 | $7,500 | +25.0% |
| 2,250 (¾ × EOQ) | 40 | $4,000 | $2,250 | $6,250 | +4.2% |
| 3,000 (EOQ) | 30 | $3,000 | $3,000 | $6,000 | — |
| 4,500 (1½ × EOQ) | 20 | $2,000 | $4,500 | $6,500 | +8.3% |
| 6,000 (2 × EOQ) | 15 | $1,500 | $6,000 | $7,500 | +25.0% |
| 9,000 (3 × EOQ) | 10 | $1,000 | $9,000 | $10,000 | +66.7% |
There is a neat identity hiding in that table. Order k times EOQ and total cost rises by a factor of (k + 1÷k) ÷ 2. At k = 2 that is (2 + 0.5) ÷ 2 = 1.25, exactly the 25% penalty shown. At k = ½ it is (0.5 + 2) ÷ 2 = 1.25 as well — which is why ordering half of EOQ and twice EOQ cost the same. At k = 1.5 it is (1.5 + 0.667) ÷ 2 = 1.083, an 8.3% penalty.
The practical consequence: round EOQ to a case pack, a pallet or a supplier minimum without guilt. What matters is knowing whether you are near the bottom of the curve or sitting at three times EOQ, where the penalty is 67%.
EOQ moves with the square root of demand
Because demand sits under a square root, EOQ is far less sensitive to forecast error than people expect. Double annual demand from 90,000 to 180,000 and EOQ becomes √(2 × 180,000 × 100 ÷ 2) = √18,000,000 = 4,243 units — a 41% increase, not 100%. Orders per year rise from 30 to 42, so frequency absorbs most of the growth, not batch size.
Two consequences follow. A 20% forecast miss changes EOQ by about 10%, which the flat curve discounts to under 1% of cost — so EOQ does not need a good forecast. And growth raises inventory turns on its own, because average inventory grows more slowly than demand does. If your turns fall while volume grows, order policy is not the cause; inventory turnover: how to read it covers what usually is.
Where the EOQ assumptions break
EOQ assumes a world with one item, constant demand, one fixed ordering cost, one price, unlimited storage and instant replenishment. Real distribution and manufacturing violate every one of those. Knowing which assumption you are breaking tells you what to do instead.
| Assumption | What actually happens | What to do about it |
|---|---|---|
| Demand is constant and known | Demand is seasonal, lumpy, or driven by three customers' project schedules. A year-average EOQ over-buys in the trough and under-buys in the peak. | Recompute per season from a 13-week run rate annualised, or switch to a period-order-quantity rule that buys N weeks of forecast. |
| Unit price is independent of quantity | Suppliers publish price breaks. EOQ cannot see them because purchase cost was deliberately excluded. | Compare full annual cost — purchase plus ordering plus holding — at EOQ and at each break quantity. Worked below. |
| Any quantity can be ordered | Case packs, pallet quantities, minimum order values and container fills exist. | Round to the nearest legal quantity. The flat curve means the penalty is usually under 5%. |
| Ordering cost is a fixed amount per order | On an automated blanket-order release, the marginal cost of one more delivery is close to zero. On a first-article-inspected import, it is thousands. | Compute S honestly per supplier and per channel, not once for the whole catalogue. A low S is the entire economic argument for vendor-managed replenishment. |
| Capacity is infinite | Racking runs out and so does the credit line. EOQ applied across 4,000 items at once can ask for more warehouse than you own. | Treat space or cash as a binding constraint and scale quantities down proportionally, or apply EOQ only to A items. |
| Replenishment is instant and stockouts do not exist | Lead time exists and demand varies during it. EOQ is silent on both. | EOQ sets how much; the reorder point and safety stock set when. See the reorder point guide. |
| Holding cost is known | The carrying rate is a policy assumption. Most land somewhere between 18% and 30%, and EOQ moves with the square root of it. | Build the rate from capital, space, service and risk components with the inventory carrying cost calculator, and have the CFO sign it. |
Quantity discounts: doing the comparison properly
This is where EOQ gets misused most often, in both directions. Buyers either ignore price breaks entirely, or take every break offered because the saving is visible and the carrying cost is not. The only honest test is total annual cost including the purchase price.
Same component. The supplier offers 1% off — $7.92 instead of $8.00 — on orders of 22,500 units, which is a quarter's demand. At that price, holding cost per unit becomes $7.92 × 25% = $1.98.
| Cost element | Order 3,000 at $8.00 | Order 22,500 at $7.92 |
|---|---|---|
| Purchase cost (90,000 units) | $720,000 | $712,800 |
| Ordering cost | 30 × $100 = $3,000 | 4 × $100 = $400 |
| Holding cost | 1,500 × $2.00 = $3,000 | 11,250 × $1.98 = $22,275 |
| Total annual cost | $726,000 | $735,475 |
| Average inventory at cost | $12,000 | $89,100 |
Check it from the other direction: the discount saves $0.08 × 90,000 = $7,200 on purchase price and $2,600 on ordering cost, but adds $19,275 of holding cost. Net $9,475 worse, which matches the table. The break would need to be about 2.3% before it paid for itself here — and even then you would be accepting a quarter's worth of obsolescence risk on a machined part.
The manufacturing variant: EOQ for a production run
If you make the item rather than buy it, stock does not arrive in one instant — it builds while you produce and drains while you consume. The economic production quantity corrects for that with one extra term: EPQ = EOQ × √(p ÷ (p − d)), where p is the daily production rate and d the daily demand rate. At 90,000 units over 250 working days, d = 360 a day. If the cell produces 1,200 a day, p ÷ (p − d) = 1,200 ÷ 840 = 1.4286, whose square root is 1.1952, so EPQ = 3,000 × 1.1952 = 3,586 units — a 19% longer run, because peak inventory only reaches the net accumulation rather than the full batch. As p approaches d, that multiplier explodes, which is the arithmetic telling you the constraint is capacity, not batch size.
Getting D, S and H out of your ERP
The formula takes ten seconds; the inputs take a week. Annual demand has to be demand rather than shipments, on a consistent unit of measure, excluding intercompany transfers and one-off project buys. Ordering cost is an internal costing exercise — total purchasing cost divided by order lines placed is a defensible first pass, and better than the $50 someone typed in 2019. Holding cost is a policy decision that belongs to finance, because it silently sets how much stock the whole business carries.
Ask for "units issued and purchase order line count by item for the last 12 months, top 100 items by usage value" and you have D and the order frequency you are actually running, computed live from your own account with the query shown underneath so you can confirm what counted as an issue. Then check the resulting policy is deliverable with the reorder point calculator before anyone edits an item record.
Frequently asked questions
What is the EOQ formula?
EOQ = √(2DS ÷ H), where D is annual demand in units, S is the cost of placing one order and H is the cost of holding one unit for a year. With D = 90,000, S = $100 and H = $2.00, the numerator is 18,000,000, dividing by 2 gives 9,000,000, and the square root is 3,000 units.
Why does EOQ ignore the price of the goods?
Because buying 90,000 units a year costs the same whether they arrive in ten deliveries or thirty. Purchase cost does not vary with order size, so it cancels out of the optimisation. It re-enters the moment a supplier offers a quantity discount, which EOQ on its own cannot evaluate — you need a full total-cost comparison at each break.
Are ordering cost and holding cost really equal at EOQ?
Yes, always. EOQ is derived by setting (D ÷ Q) × S equal to (Q ÷ 2) × H and solving for Q, so the equality is the definition rather than a coincidence. At 30 orders of 3,000 units it is $3,000 of ordering cost against $3,000 of holding cost. If your two legs differ, recheck the inputs.
How accurate does EOQ need to be?
Much less than people assume. The total cost curve is flat near the minimum: ordering 25% below EOQ costs 4.2% more, and ordering 50% above costs 8.3% more. So rounding to a pallet quantity or a supplier minimum is nearly free. What matters is not sitting at two or three times the optimum, where the penalty reaches 25% to 67%.
When should you not use EOQ?
When demand is seasonal or project-driven, when the item is short-shelf-life or fast-obsoleting, when the supplier imposes a minimum far above the optimum, when storage or cash is the binding constraint, or when the item is a low-value C part. In those cases a period-order-quantity or two-bin rule is simpler and just as good.
Does EOQ change the reorder point?
No. They are independent decisions. EOQ answers how much to order and comes from ordering and holding costs. The reorder point answers when to order and comes from demand during lead time plus safety stock. Changing the order quantity does change how often you cross the reorder point, but not the level itself.
Calculators for this
Calculate economic order quantity from annual demand, order cost and holding cost. See the total cost curve against your current order quantity.
Build your inventory carrying cost rate from capital, storage, service and risk. Get the annual cost, the percentage rate, and holding cost per unit.
Calculate your reorder point from daily demand, lead time and safety stock, with or without lead-time variability. Includes ERP min/max levels.
Paste item values and run an ABC analysis: Pareto ranking, cumulative percentage, and A/B/C classes with your own thresholds, plus value per class.
Keep reading
The reorder point formula worked end to end: demand during lead time, safety stock, lead-time variability, review periods and the ERP min/max fields.
Inventory turnover explained: the COGS formula, days of inventory, GMROI, directional ranges by business type, and why chasing turns can cost you margin.
ABC analysis step by step: rank items by annual usage value, cut classes at 80% and 95% cumulative value, then set count, review and buffer policy per class.
Four safety stock formulas on one data set, from 543 to 6,120 units: what each assumes, the z values, and service level versus fill rate.