Here's my verdict up front: overselling is not a warehouse problem. You can audit the warehouse for three days straight and never find the cause, because the cause lives in your OMS — in whether inventory gets deducted the second an order comes in, or only when the box ships. It's a two-sided coin. Both sides cost you something. The only question is which cost you can live with.

There are exactly two designs, and I've seen both blow up in production.

Reserve at order means the moment a customer clicks "buy," that unit is gone from sellable inventory. Deduct at ship means the order is recorded but inventory only drops when the warehouse actually ships it.

Let me tell you about the Black Friday that taught a home-goods brand this lesson the hard way. November 2022: their hero storage bin was on promotion across their own site and Amazon at the same time. Their OMS ran deduct-at-ship — orders came in, a sales count ticked up, but real inventory only moved when the warehouse shipped.

For eleven months this worked fine. Why? Because on a normal day the warehouse shipped everything same-day. The gap between "sold" and "shipped" was a few hours, and the error stayed invisible.

Black Friday made it visible. By noon they'd sold over 2,400 units across both channels. Actual on-hand was 2,000. The OMS still showed sellable stock as positive, because the warehouse had only managed to ship 1,500 units — the rest were sitting in a queue. Every shopper who landed on the page saw "In Stock," clicked, paid, done.

They oversold by more than 400 units. The customer service team fielded 300-plus complaint calls that weekend. Refunds, apologies, Amazon's out-of-stock penalties — the entire margin from the promotion evaporated. In the post-mortem, the owner said something I'll never forget: "We weren't beaten by traffic. We were beaten by the time lag in our own system."

That lag is the whole story. Deduct-at-ship leaves a window between order and shipment where inventory is a ghost — it looks available, but it's already sold. Stretch that window during a peak event and the ghost becomes real overselling.

So is reserve-at-order the answer? I've watched too many companies jump from one ditch into the other.

A 3C accessories client switched to reserve-at-order in early 2023. Overselling vanished overnight — and a new problem showed up. Their site allowed 72-hour payment windows (common for cross-border buyers), and a flood of orders came in without payment. Inventory got locked. One Bluetooth earbud SKU showed zero sellable on the website while 600 units sat on the rack in the warehouse — every unit reserved by unpaid orders. During peak season, of all times: real stock on hand, nothing to sell. That's called inventory lockup, and it's the price of reserve-at-order.

Here's the trade-off, plain and simple:

Reserve at order Deduct at ship
Oversell risk Near zero High — guaranteed during promos
Inventory flexibility Unpaid orders lock up stock Stock stays fully flexible
Best fit Instant-payment, COD orders B2B bulk, net-terms orders
Worst nightmare Long payment window + hero SKUs Peak sale + multi-channel

No universal answer. Only: which side scares you more, given your business?

What we ended up recommending to clients is a split policy — no one-size-fits-all:

First, hero SKUs and promo SKUs always reserve at order. During a sale, traffic runs 5 to 10 times normal, and that time-lag window is where overselling breeds. A little locked-up inventory is cheap compared to an oversell disaster.

Second, B2B bulk orders and net-terms accounts stay on deduct-at-ship. These orders are large, deliberate, and confirmed — reserving at order just handcuffs your flexible stock and starves smaller orders.

Third, long-tail SKUs sold across multiple channels get reserve-at-order plus channel quotas. Each channel gets its own sellable allocation; when a channel's quota runs out, it stops. You kill overselling without letting one channel's unpaid orders choke all the others.

Fourth — and this is the one most companies forget — every reservation needs a release mechanism. Unpaid orders past a defined window (30 minutes to 2 hours, depending on your buyers' payment habits) must auto-release back into the sellable pool. Canceled and refunded orders must release in real time, not in a nightly batch. A reservation system without release is just slow-motion lockup.

Close-up of warehouse racking with reserved inventory — booked sellable must match the physical stock

There's one more invisible killer, and I've seen it burn companies that got reservation timing right: channel sync delay.

Summer 2023, a pet-supplies client came to me genuinely confused: "Lao Mi, we're on reserve-at-order. Why are we still overselling on Amazon?" One look told the story: their OMS synced inventory to Amazon in 15-minute batches. During a flash sale, 300 orders could land in 15 minutes — the OMS had reserved everything while Amazon still showed "In Stock." That 15-minute window is the same time-lag window as deduct-at-ship, just wearing different clothes.

The fix has two parts, both required: switch to real-time push (webhook the sellable count to every channel the moment an order lands — no more batch sync), and set a channel safety buffer (list only 90% of sellable on Amazon, hold 10% back). Don't mourn that 10%. It protects your out-of-stock rate, and Amazon is not gentle with sellers who blow past defect thresholds.

One more thing even veterans mix up: reservation, available inventory, and safety stock are three different numbers. The formula is simple — sellable = on-hand minus reserved minus safety stock. Reservation eats sellable, never safety stock. Safety stock is your insurance against replenishment variance; reservation has no business touching it. I once saw a 3PL running one OMS logic across multiple clients deduct reservations straight out of safety stock. One client's promo drained the safety level, and another client's routine orders started shorting. Two angry clients at once — a scene I have no interest in repeating.

And don't forget returns. Under deduct-at-ship, a returned unit flows straight back into sellable. Under reserve-at-order, returns have to clear QC before they release back to sellable. During those in-transit days, the two systems show completely different numbers on paper — and a post-holiday returns wave can wreck your replenishment plan if you haven't accounted for it.

Once the policy is live, watch three numbers: oversell rate (oversold orders divided by total orders — target is zero), reservation release rate (share of reservations auto-released after timeout — over 15% means your payment window is too generous, or it's time to require deposits), and average lockup duration (hours from reservation to ship — if this spikes during peak, it's your early signal to replenish). Review these weekly. They tell you more than any status report.

And on rollout: don't try to flip everything at once. Start with hero and promo SKUs, validate through one full promo cycle, then expand. The scariest words in systems work are "big bang" — because what's usually banging is the incident.

Overselling was never the warehouse's fault. It's the lie a system tells in the gap between two timestamps. The moment you call out that lie, overselling disappears. And the reverse is equally true: the prettiest reservation policy in the world means nothing if execution can't keep up.

By Lao Mi, Supply Chain Veteran (20 yrs)