Economic order quantity (EOQ) is the order size that keeps the yearly cost of placing orders and holding stock as low as possible. The formula is EOQ = √(2DS ÷ H): D is annual demand, S the cost of one order, H the yearly cost of holding one unit.
Ford W. Harris developed the model in 1913, according to Investopedia's EOQ guide. It answers one question well: how big each order should be when every delivery costs money.
This guide works the formula for a Kampala hardware shop in Uganda shillings. It then shows where EOQ misleads: lorries and cartons, quantity discounts, lead times and shared deliveries.
What Is Economic Order Quantity (EOQ)?
EOQ is one order size per product that balances two costs pulling in opposite directions. Small, frequent orders pay the delivery fee many times. Large, rare orders tie up cash and shelf space for longer.
Ordering cost falls as the order grows, because you order fewer times a year. Holding cost rises, because the stock on hand averages half the order. EOQ is the size where the two costs are equal and their total is lowest.
EOQ answers how much to order. The reorder point answers when, and the two work as a pair.
The wrong size costs either way. Orders that are too big pay more holding costs: interest, space and damage. Orders that are too small pay more delivery fees, and each extra order is one more chance of stockouts while you wait.
The EOQ Formula (with Terms Explained)
EOQ = √(2 × D × S ÷ H)
Each input is a yearly figure for one product. Most errors come from putting a cost in the wrong input, so the table says what stays out as well.
| Input | What it is | Put in | Leave out |
|---|---|---|---|
| D, annual demand | Units sold in a year | The last 12 months' sales in units, adjusted if you expect a change | Sales in money; a one-off bulk order that won't come again |
| S, cost per order | What one order costs, whatever its size | The delivery or lorry fee per trip; staff time to order, receive and check it; a payment fee charged per order | Freight or offloading charged per carton or bag: it is part of each unit's cost |
| H, holding cost per unit per year | Unit cost × your holding rate | Interest on the money in stock, the store room's share of rent, insurance, damage and expiry | The whole shop's rent and wages: only the share that serves stock |
H is usually a yearly rate times the unit cost. The holding cost formula builds the rate from four parts.
In Uganda, the interest part alone was 17.32% in July 2026. That was the weighted average lending rate on shilling loans, in the Ministry of Finance's Performance of the Economy report.
EOQ comes from the total yearly cost of any order size Q:
Total yearly cost = (D ÷ Q) × S + (Q ÷ 2) × H
The first part is the number of orders times the cost of each. The second is the average stock, half the order, times the cost of holding one unit.
For example, take D = 1,000 units, S = 1.50 and H = 3, in any currency. EOQ = √(2 × 1,000 × 1.50 ÷ 3) = √1,000 ≈ 31.6. Round it to 32 units: about 31 orders a year, one every 12 days.
How to Calculate EOQ Step-by-Step
Five steps take you from your records to an order you can place. For example, a hardware shop in Kampala sells cement in 50 kg bags. The figures are illustrative, not a real shop's or a market price.
Step 1: Annual demand (D)
Count units, not shillings. The shop sold 6,000 bags in the last 12 months, about 20 a working day. A contractor's one-off order of 500 bags would be left out, because it won't come again.
Step 2: Cost per order (S)
The distributor charges UGX 350,000 for each lorry trip, whatever it carries. Ordering, counting and signing for a delivery takes about UGX 50,000 of staff time, so S = UGX 400,000.
Offloading at UGX 200 a bag stays out of S. It grows with every bag, so it belongs in the bag's cost.
Step 3: Holding cost per bag (H)
A bag costs UGX 32,000. The shop's holding rate is about 30% a year: 17.32% for the money, and about 12.7% for the store, the guard and torn or hardened bags. H = 32,000 × 30% = UGX 9,600 a bag a year.
Step 4: Put the figures in
EOQ = √(2 × 6,000 × 400,000 ÷ 9,600) = √500,000 ≈ 707 bags. That is about 8.5 orders a year, one every six weeks.
At 707 bags, ordering and holding each cost about UGX 3.39 million a year. Together they come to UGX 6.79 million, the lowest the two can be.
Step 5: Round it to how the supplier delivers
The distributor's lorry carries 600 bags, so 707 would need a second lorry for 107 bags. The shop orders one full lorry, 600 bags, ten times a year.
| Figure | Value | Where it comes from |
|---|---|---|
| D, bags a year | 6,000 | Last 12 months' sales |
| S, cost per order | UGX 400,000 | Lorry trip 350,000 + staff time 50,000 |
| H, holding cost per bag a year | UGX 9,600 | 30% of UGX 32,000 |
| EOQ | 707 bags | √(2 × 6,000 × 400,000 ÷ 9,600) |
| Order placed | 600 bags | One full lorry, 10 orders a year |
Benefits of Using EOQ
EOQ's biggest benefit is that it forgives rough figures. The total cost is flat near its lowest point, so an order a little off EOQ costs very little more.
| Bags per order | Orders a year | Ordering cost | Holding cost | Total | Above the lowest |
|---|---|---|---|---|---|
| 300 | 20 | 8,000,000 | 1,440,000 | 9,440,000 | 39.1% |
| 500 | 12 | 4,800,000 | 2,400,000 | 7,200,000 | 6.1% |
| 600 | 10 | 4,000,000 | 2,880,000 | 6,880,000 | 1.4% |
| 707 (EOQ) | 8.5 | 3,394,113 | 3,394,113 | 6,788,225 | Lowest |
| 1,000 | 6 | 2,400,000 | 4,800,000 | 7,200,000 | 6.1% |
| 1,200 | 5 | 2,000,000 | 5,760,000 | 7,760,000 | 14.3% |
The full lorry costs UGX 91,775 a year more than the exact EOQ, 1.4%. Ordering 300 bags costs about UGX 2.65 million more, because the lorry fee is paid 20 times.
The same flatness protects you from a wrong input. Had the shop used double the true order cost, EOQ would say 1,000 bags; half, 500 bags. Both totals sit only 6.1% above the lowest.
EOQ also gives each product one order size anyone on the team can follow. It tells you the cash each order needs: 600 bags × UGX 32,000 = UGX 19.2 million.
Limitations of EOQ: When It Misleads
EOQ assumes steady demand, one fixed cost per order, a fixed price and goods that arrive all at once. Each assumption breaks somewhere in a real shop, and each has a fix.
Cartons, lorries and pack sizes
Round EOQ to the nearest whole pack, not always up. Near EOQ the cost curve is flat, so the nearest pack costs little more: the 600-bag lorry costs 1.4% more than 707 bags.
The milk in our reorder quantity guide has an EOQ of about 41 litres and comes in cases of 12. Three cases (36 litres) cost 0.8% more than the lowest, and four cases (48) cost 1.3% more. Take four for a fast seller and three for one that expires soon.
Quantity discounts
A price break can save far more than EOQ's balance. Compare the total yearly cost, purchases included, at your rounded EOQ and at each break.
For example, the distributor offers UGX 31,000 a bag instead of 32,000 on orders of 1,200 bags, two lorries. Holding cost falls to UGX 9,300 a bag, because it is 30% of a lower price.
| Cost | 600 bags at 32,000 | 1,200 bags at 31,000 |
|---|---|---|
| Cement bought (6,000 bags) | 192,000,000 | 186,000,000 |
| Lorry trips and ordering | 4,000,000 | 4,000,000 |
| Holding | 2,880,000 | 5,580,000 |
| Total | 198,880,000 | 195,580,000 |
The discount wins by UGX 3.3 million a year. It holds only if 1,200 bags, about ten weeks of sales, keep dry in the store. Each order also needs UGX 37.2 million in cash.
Lead times
Lead time is not in the formula: it moves the reorder point, not the order size. If the distributor delivers in 3 working days, the shop reorders when stock falls to 60 bags plus its safety stock.
Buying straight from a factory that takes 15 working days raises that to 300 bags plus safety stock. EOQ stays at 707.
Imports add one rule. Tiles that take ten weeks through Mombasa, ordered every six weeks, can mean two orders on the way at once. Compare the reorder point with stock on hand plus stock on order, as the reorder quantity guide does, or you will order twice.
Shared deliveries
When one delivery brings fifty products, its fee is not each product's S. Charge each product its share, or EOQ orders far too much. In the reorder quantity guide, the milk's 41 litres become 289 when it carries the whole fee.
Seasons, expiry and moving prices
EOQ uses one yearly average, so it orders too little in the peak and too much after it. Work out D for each season from last year's same weeks.
EOQ knows nothing about expiry dates, so cap each order at what sells well before it expires. When a price moves with the exchange rate, H moves with it. EOQ follows only its square root, so a quarterly recalculation is enough.
EOQ vs. EPQ vs. MOQ
EOQ is how much to buy, EPQ how much to make in one run, and MOQ the least a supplier will sell you.
The economic production quantity adds the rate you produce: EPQ = √(2 × D × S ÷ (H × (1 − d ÷ p))). Here S is the cost of setting up one run, d the rate you sell and p the rate you make.
For example, a soap maker in Nairobi sells 2,000 bars a month, 24,000 a year, and can make 8,000 a month. Setting up a run costs KES 9,000, and holding a bar costs KES 18 a year.
EPQ = √(2 × 24,000 × 9,000 ÷ (18 × 0.75)) ≈ 5,657 bars, about one run every 12 weeks. It is larger than the EOQ of 4,899, because bars sell while the run goes on, so stock peaks at about 4,243.
MOQ is a supplier's rule, not a calculation. If it sits above your EOQ, buy it only if the extra sells well before expiry. Otherwise, add other products from that supplier to reach it.
| EOQ | EPQ | MOQ | |
|---|---|---|---|
| Answers | How much to buy | How much to make in one run | The least a supplier sells |
| Set by | You, from your costs | You, from your costs and production rate | The supplier |
| Fixed cost in it | The cost of one order | The cost of setting up one run | None |
A run size only helps inside a plan of what to make each week: see production plans.
When EOQ Works Best
EOQ works best for a steady seller that has a real delivery cost of its own. Use this table to decide product by product.
| Product | Use EOQ? | What to do instead or as well |
|---|---|---|
| A steady seller with its own delivery fee: cement, gas refills, crates from one brewery | Yes | Round to the pack or lorry |
| Many products on one weekly delivery | Not alone | Order up to a level, with the fee shared, as in the reorder quantity guide |
| Seasonal goods: school uniforms, umbrellas | Per season | D from last year's same weeks |
| Goods that expire within weeks: bread, milk, eggs | Only as a cap | Never more than sells before expiry |
| Goods you make yourself | No | EPQ |
| A supplier minimum above EOQ | Check first | The MOQ test above |
How to Start Using EOQ in ArmPOS
ArmPOS records the figures EOQ needs, but it doesn't calculate EOQ or place orders by itself. Six steps take you from its reports to an order.
- Find annual demand. Reports › Products report totals each product's sales for a period; pick the last 12 months. If it shows nothing, Product sales report lists each sale line with its Qty sold (Sales reports).
- Price each order. Record every delivery fee as an expense in a category such as Transport. Reports › Expense Report totals it by category (Record an expense). Expenses come with some plans only.
- Price the holding. H is the product's Product Cost times your holding rate. Reports › Inventory Valuation gives the stock value the rate is built on (Stock reports).
- Work out EOQ in the sheet below, one row per product.
- Set the reorder point as the Stock Alert on the product form (Add your first products). Reports › Product Quantity Alerts lists what has reached it. The alert Stock fell below its alert level can also reach you by push or email (Get alerts on your phone).
- Order in packs. Make a unit Box built on Piece with Multiply 12 and choose it as the Purchase Unit (Categories, brands and units). Record the order as a purchase with status ordered, and change it to received when it arrives (Record a purchase).
| A Product | B Annual demand | C Cost per order | D Unit cost | E Holding rate | F EOQ | G Pack size | H Order |
|---|---|---|---|---|---|---|---|
| Cement 50 kg | 6,000 | 400,000 | 32,000 | 30% | 707 | 600 | 600 |
| Wall paint 20 L | 480 | 60,000 | 180,000 | 30% | 33 | 4 | 32 |
| Roofing nails 25 kg box | 300 | 60,000 | 150,000 | 30% | 28 | 1 | 28 |
- F2 (EOQ): =SQRT(2*B2*C2/(D2*E2))
- H2 (order in whole packs, never below one pack): =MAX(G2,ROUND(F2/G2,0)*G2)
The steps are the same for a hardware shop in Uganda or South Africa, and for each branch on its own.
Frequently asked questions
What is the EOQ formula?
EOQ = √(2 × D × S ÷ H). D is annual demand in units, S the cost of one order and H the yearly cost of holding one unit. For the cement, √(2 × 6,000 × 400,000 ÷ 9,600) ≈ 707 bags.
What are the assumptions of EOQ?
Steady demand, one fixed cost per order, a fixed price with no discounts, and each order arriving in full. When one fails, adjust as the limitations section shows rather than dropping the formula.
What is the difference between EOQ and the reorder point?
EOQ is how much to order; the reorder point is the stock level that tells you to order. The cement shop orders 600 bags when stock falls to 60 bags plus its safety stock.
Does EOQ include safety stock?
No. Safety stock belongs in the reorder point. Adding it to every order makes stock creep up with each delivery.
How often should I recalculate EOQ?
When demand, the delivery fee or the price changes for good, and at least once a quarter for your best sellers. The square root dampens change: demand up 20% raises EOQ by only about 10%.
Work out EOQ this week for the three products with the biggest delivery bills, using the sheet above. Create a free ArmPOS account to keep the sales, costs and Stock Alerts that sheet needs in one place.