Blog/Economic Order Quantity (EOQ): Formula, Worked Exa...

Economic Order Quantity (EOQ): Formula, Worked Example, and When It Falls Apart

EOQ is the order size that minimizes the joint cost of placing orders and carrying inventory. Formula: EOQ = √(2DS/H). Worked example, the assumptions that break in SMB practice, and the modern statistical-replenishment descendant.
Published May 2, 2026·6 min read

Economic Order Quantity (EOQ) is the order size that minimizes the joint cost of placing orders and carrying inventory. It is one of the foundational results of operations research, formalized by Ford W. Harris in 1913 and still taught in every operations and supply-chain course.

Quick answers

What is the Economic Order Quantity? EOQ is the order quantity that minimizes the total cost of ordering plus the cost of holding inventory. Order in smaller batches and you pay more in ordering costs (more POs, more receiving, more processing). Order in larger batches and you pay more in carrying costs (capital tied up, warehouse space, spoilage). EOQ is the mathematical balance point.

What is the EOQ formula? EOQ = √(2DS/H) where D is annual demand in units, S is the cost per order (admin + receiving + payment processing), and H is the cost to carry one unit in inventory for a year (capital cost + storage + spoilage as a fraction of unit cost). The square root means EOQ scales sub-linearly with demand — doubling demand only increases the optimal order size by ~41%.

When does EOQ apply? Classical EOQ assumes constant demand, constant lead time, no quantity discounts, and a single product. In SMB practice, those assumptions are routinely violated, so EOQ is more useful as a directional guide than a precise prescription. Most operators end up with order quantities between EOQ and the closest pack size or supplier MOQ.

EOQ vs reorder point — what's the difference? EOQ tells you to order. Reorder point tells you when to order. They're complementary: when inventory drops to the reorder point, you place an order of EOQ size.

The formula, derived

The total annual cost has two parts:

Total cost = (D / Q) × S + (Q / 2) × H

where Q is your order quantity. The first term (D/Q × S) is the annual ordering cost — placing D/Q orders per year at S each. The second term (Q/2 × H) is the annual carrying cost — averaging Q/2 units in inventory at H per unit per year.

Take the derivative with respect to Q and set to zero:

d(Total cost)/dQ = -DS/Q² + H/2 = 0
H/2 = DS/Q²
Q² = 2DS/H
Q = √(2DS/H)

That's EOQ.

A worked example

A retailer sells 12,000 units of a SKU per year (D = 12,000). The cost to place an order — combining the AP person's time, the receiving cost, and the payment processing — is $25 per PO (S = 25). The unit cost is $5, capital cost is 8% per year, storage is 4% of unit cost, spoilage is negligible — so H = $5 × 0.12 = $0.60 per unit per year.

EOQ = √(2 × 12,000 × 25 / 0.60) = √1,000,000 = 1,000 units

The retailer should order 1,000 units per PO, placing 12 POs per year. If the supplier's MOQ is 500, EOQ is binding (you order 1,000). If the supplier's MOQ is 2,000, MOQ is binding — EOQ is over-ridden by the constraint, and the retailer should look at whether the supplier MOQ is negotiable.

Where EOQ falls apart in practice

The classical EOQ formula assumes constant demand and constant lead time. In SMB reality:

  • Demand is variable. Your bestseller's weekly sales swing 20% week to week. EOQ as derived assumes σ = 0.
  • Lead time is variable. Suppliers slip. EOQ doesn't model lead-time variability.
  • Quantity discounts exist. Suppliers often offer 5–15% off at higher tiers. The right answer with discounts is to compute EOQ at each tier and pick the lowest total cost.
  • Pack sizes are fixed. You can't order 1,000 units when the case pack is 144. Real orders round up to the next pack.
  • MOQs override. When the supplier minimum exceeds EOQ, you order MOQ.
  • Perishability matters. EOQ ignores spoilage. For perishables, the carrying cost calculation needs decay added (carrying cost = capital + storage + spoilage rate × unit cost). Decay rate covers this.

A statistical replenishment system that does demand-pattern classification and decay-aware PAR is the modern descendant of EOQ. Same intent (minimize total cost), updated math.

How LineNow uses EOQ-style logic

LineNow doesn't compute classical EOQ as such — for the reasons above, it's not the right answer in practice. Instead, the recommendation engine:

  1. Computes consumption rate from POS-driven sales over the last 30 days
  2. Classifies the demand pattern (smooth, intermittent, erratic, lumpy) via the SBC framework
  3. Computes statistical safety stock with z-score by service level
  4. Adds decay-aware base demand for perishables
  5. Surfaces a single PAR-aligned reorder quantity, rounded to the supplier's pack size
  6. Raises to MOQ if the optimal quantity is below it (and flags the item as MOQ-bound, so you can negotiate)

The output is the modern, real-world version of "what EOQ would say given your constraints." See PAR level for the formula and the PAR Level Calculator to compute it for your own items.

Related

economic order quantityEOQ formulaEOQ calculatororder quantity optimizationinventory carrying cost
Want to see this in action?Book a Demo