All posts

ROP vs EOQ — what they answer and when to actually use them

Reorder point and economic order quantity solve different problems. Mixing them up costs money. Here's the clean mental model.

May 17, 20264 min readby Jose Rovirareplenishmentmath

Ask ten operators what ROP and EOQ do and you'll get six versions of the right answer, three vague hand-waves, and one person who confidently swaps them. So let's nail the mental model.

ROP — when to reorder

Reorder Point (ROP) answers a single question: given that it takes my supplier L days to fulfill an order, and I sell roughly D units per day, how low can I let my stock get before I'm in trouble?

The formula:

ROP = (D × L) + safety_stock

Where:

  • D × L is the expected demand during lead time — the units you'll sell while waiting.
  • safety_stock is a buffer for variability — how much extra you need because demand isn't constant.

That's it. ROP tells you when to place the order, not how much to buy.

EOQ — how much to buy

Economic Order Quantity (EOQ) answers a totally different question: given that placing an order costs me K dollars (PO admin, freight minimums, etc.) and holding a unit for a year costs me h dollars (capital, warehouse space, shrinkage), what order size minimizes my total annual cost?

The classical Wilson formula:

EOQ = sqrt((2 × annual_demand × K) / h)

If your ordering cost is high and holding cost is low, EOQ is big — buy a lot, less often. If holding cost is high and ordering cost is low, EOQ is small — buy little, frequently.

They don't substitute for each other

The common confusion: an operator with a healthy ROP system thinks they don't need EOQ. Or vice versa.

You need both. ROP triggers the order. EOQ sizes it.

inventory drops to ROP → place an order of size EOQ

Without ROP, you don't know when to act. Without EOQ, you guess at the quantity (usually too much, usually because the MOQ pulled you that way).

The MOQ trap

MOQ — Minimum Order Quantity — is where most operators stop following the math. If your EOQ is 50 units but your supplier's MOQ is 200, you order 200. Fine, that's reality. But the system should tell you that's an MOQ overbuy so you can decide if it's worth renegotiating.

Tropix Palm flags this as a moq_over_eoq_flag with the dollar value of the per-cycle overbuy. Once you can quantify "this MOQ is costing me $4,200 every cycle," you can have the supplier conversation with leverage.

Safety stock — the one you can't skip

We left safety stock as a vague "buffer" above. It's actually the most important of the three. The classical formula:

safety_stock = z × σ_LTD

Where z is the standard-normal quantile for your service-level target (z = 1.65 for 95%, z = 2.33 for 99%) and σ_LTD is the standard deviation of demand during lead time.

The trick: most teams use a fixed buffer ("we keep 30 days of safety stock") regardless of demand variability. That's wrong twice:

  • For low-variability SKUs, you're overbuying.
  • For high-variability SKUs (lumpy demand, new products), you're underbuying.

Tropix Palm sizes safety stock per SKU based on actual demand variability, so the high-variability SKUs get more buffer and the steady ones get less. Same cash, better service level.

TL;DR

| Question | Formula | Source of truth | |----------|---------|-----------------| | When to order? | ROP = D × L + SS | Lead time, daily demand | | How much to order? | EOQ = √(2 × annual_D × K / h) | Ordering cost, holding cost | | How much buffer? | SS = z × σ_LTD | Service level, demand variability |

Tropix Palm computes all three per SKU, every run. The recommended action stitches them together: "Reorder now (you're below ROP), order 184 units (EOQ rounded to case-pack), supplier_x lead-time 14 days."

Going deeper