When Stock Runs Out, Which Orders Do You Cut First? Real-World Order Allocation Priority in OMS

The Tuesday after Thanksgiving, 2019. I was standing on the mezzanine of a 3PL warehouse in Ontario, California, watching a supervisor hold a printed pick wave in his hand like it was going to bite him. We had 1,400 units of a hero SKU left in the bin. Open orders needed 2,300. The math wasn't going to work, and everyone on the floor knew it.

"So who do we cut?" he asked me.

That question — asked in exactly that tone of quiet panic — has come up at every warehouse I've worked in. And the honest answer is that most operations have no real answer. They default to first-in-first-out. The orders that came in earliest get filled; the ones that came in last get cut. It feels fair. It's also the single most expensive way to handle a shortage, and I've watched it cost companies six figures in one quarter.

FIFO feels fair because it is fair to orders. But you're not running a fairness business. You're running a P&L.

The five factors that actually decide who gets stock

When I help a warehouse design allocation rules in their OMS, I make them rank every open order against five things. Not three, not ten. Five. In practice, the weight order looks like this, and the order matters:

1. Contractual penalty for missing it. This is the one with teeth. Some wholesale accounts charge 5–10% of the invoice for late shipment, and a few big-box EDI programs go higher. Marketplace orders are softer here — a late shipment dings your seller metrics but doesn't invoice you directly. The OMS should know, per channel, what missing a shipment actually costs in dollars.

2. Delivery promise to the consumer. An order that was sold as two-day delivery is more dangerous than one sold as standard five-to-seven. When you cut a two-day order, you don't just lose the sale — you break a promise the customer paid for. Break enough of them and your account-level metrics slide, which can throttle your buy box or search placement for weeks. That's invisible damage that dwarfs one lost order.

3. Customer tier. Your VIP and repeat buyers are a portfolio, not a list. Losing a one-time buyer on a $40 order hurts once. Shorting a buyer who's placed 30 orders this year hurts thirty more times in the future. The OMS should flag top-decile customers and protect them — most systems can do this with a simple segment rule.

4. Margin on the order. When you have to kill orders, kill the cheap ones. I know that sounds cold, but a $200 margin order and a $20 margin order are not morally equal to your business. If you protect the $20 order and cut the $200 one, you kept the wrong customer happy.

5. Age of the order. FIFO is not factor one. It's factor five — a tiebreaker. Use it only when the first four are roughly equal. I'll explain below why leading with it is a trap.

Practical note: set these as explicit weights in your OMS allocation engine, not as vague guidance. Something like penalty cost 35%, delivery promise 25%, customer tier 20%, margin 15%, order age 5%. The exact numbers depend on your channel mix — tune them once, then don't touch them mid-crisis.

The math nobody does before they cut

Let me give you a real trade-off from that 2019 season, anonymized but the numbers are honest.

Order A: a retail chain replenishment order, 800 units, $64,000 invoice. The contract had a late-delivery chargeback of 8% — $5,120 — and this buyer had shorted us on payment terms before, so they were not exactly a friend. Margin on the order: thin, about $3,200.

Order B: 900 units going to individual Amazon and direct-site orders, roughly $58,000 in revenue. No direct chargeback, but two-day delivery was promised. Margin: about $11,000. And these were repeat customers — our data said about 40% of them would buy again within 90 days.

FIFO said: fill A first (it arrived earlier), give the leftover 600 units to B, and tell the rest of the customers "sorry, restocking soon."

We didn't do that. We cut A entirely — paid the $5,120 chargeback — and filled B completely. Here's the reasoning I put to the GM: the chargeback was a known, capped cost. The cost of breaking two-day promises on 900 direct consumers was unknown and uncapped. If even 5% of those buyers never came back, at our average order value and repeat rate, we'd be out over $20,000 in lifetime value. And margin was more than triple on B.

The warehouse paid $5,120 to save somewhere between $20,000 and $31,000. That's the kind of arithmetic you want your OMS to do automatically at 6 a.m., not the kind you want to argue about at 6 p.m. with a supervisor and a printed wave.

Two things to be careful about here. First, chargeback terms and platform late-shipment penalties change — always check the latest published policy from your customer or platform rather than trusting last year's number. Second, this math assumes your margin and repeat-rate data are actually in the OMS. If they're sitting in someone's spreadsheet, you don't have an allocation system, you have an argument waiting to happen.

Three ways warehouses screw this up

FIFO as the default rule. I've covered why this is wrong, but here's the version that sticks with people: FIFO optimizes for order age, and order age is the one factor that correlates with nothing that matters — not margin, not customer value, not penalty risk. A huge wholesale order placed at 11 p.m. will always lose to a single-unit order placed at 8 a.m. That's not fairness, it's self-harm with a polite face. Keep FIFO only as a tiebreaker.

Safety stock that gets quietly borrowed. This is the pitfall that burned me personally. At one facility in 2021, we'd set up a beautiful allocation rule — and then supervisors kept "temporarily" borrowing from safety stock to cover VIP orders during minor shortages. By the time a real shortage hit, the safety stock was fiction. The rule said "hold 5% for VIPs" but the shelf said otherwise. Lesson: lock safety stock at the OMS level with an explicit override permission — one person, logged, time-stamped. If borrowing is invisible, it will happen every day.

Warehouse worker sorting outbound cartons at a packing station

Manual overrides during the crisis. Every shortage eventually produces a panicked VP calling the floor saying "fill this one first, it's important." One override doesn't break the system. But in my experience, once the team sees rules being overridden, they stop trusting the rules — and by the next quarter, every shortage is handled by whoever yells loudest. My rule: overrides are allowed, but they must be entered in the OMS with a reason code, and the allocation report gets reviewed the next morning. If the override rate crosses 10% of shortage volume, the rule is broken and needs redesign — don't blame the operators.

Before you go live: the checklist

When we roll an allocation rule into production, I run through this list. If any answer is no, we don't turn it on:

  • Every channel in the OMS has a documented late-shipment penalty or chargeback rate, with the date it was last verified
  • Delivery promise (two-day vs. standard vs. economy) is a field on every order, populated before allocation runs
  • Customer tier segments exist in the OMS and are refreshed at least weekly
  • Margin per order is calculated automatically — no spreadsheets in the loop
  • Allocation runs on a fixed schedule (e.g., every wave, or every two hours) and logs every decision with the rule version
  • Safety stock reservations are enforced by the system, with overrides restricted to a named person and logged
  • There's a shortage alert threshold — the OMS warns you before you're at 1,400 vs. 2,300, not after
  • One dry run on historical data: replay last quarter's shortage days and compare what the rule would have done vs. what actually happened

That last one is the most valuable hour you'll spend. When we did it for a client in 2022, the replay showed the rule would have saved about $90,000 in a single peak week. The GM stopped asking questions after that.

Tomorrow morning

If your OMS doesn't have allocation rules today, don't try to build all five factors this week. Do one thing: pull last month's orders, flag the ones that went short, and sort them by margin per order. Look at how many low-margin orders got filled while high-margin ones got cut. That number — whatever it is — is what FIFO cost you. Then decide whether it was worth it.

The shelf is going to go empty again. It always does. The only question is whether your system decides who gets cut at 6 a.m. — or whether you decide it in a panic at 6 p.m.