November 2023, the week before Thanksgiving. I was at a 3PL warehouse in Ontario, California, shipping 18,000 orders a day at peak. At 4 p.m., the operations manager slapped a spreadsheet in front of me: 140 exception tickets in the first 20 days of November — mispicks, stock nobody could find, inventory that didn't match the books. Customer service was drowning in returns and complaints. Error rate: 1.2%.
Their WMS had gone live the year before, a six-figure implementation with plenty of features. But exception handling got a "notes" field — whoever found a problem typed a sentence into the notes, snapped a photo, and yelled about it in a group chat: "whose goods are these?"
You can guess the rest. The notes got written, the goods stayed lost; the chat yelled, and three days later nobody remembered. A month later they switched to one "exception responsibility sheet": every exception entered the system, flowed on a deadline, and auto-escalated when overdue. By January 2024, the error rate was 0.35%. No new headcount, no new system.
In twenty years of warehousing, I've watched too many operations pour money into pick strategies, wave algorithms, and automation while exception handling stays parked in "phase two." My verdict is blunt: without closed-loop exception handling, your WMS is only half a system.
Four exceptions every warehouse runs into
Twenty years in, I'll say it: 90% of exceptions fall into four buckets. Know them cold, and your system has a fighting chance.
Mispicks. Wrong item, wrong quantity, wrong location. The e-commerce warehouse daily special: product from location A lands in order B's carton. The root is usually the pick-confirmation step — the scanner never read the location barcode, or it did and the WMS skipped the second check. Every order caught at the verification station costs 15–20 minutes of reverse investigation: who picked it, which wave, what's left on the shelf.
Putaway to nowhere. Receiving puts product in a location that doesn't exist in the WMS, or on the wrong level — the system says level 4, reality says level 2. Next pick, the system sends someone to an empty slot, and the picker burns two trips figuring it out. This one grinds the hardest because it never errors out. It just slows everything down, invisible on every management report.
System says in stock, shelf says otherwise. The old source of every cycle-count variance. The WMS shows 50 units at location A; the shelf holds 47. Causes vary: a return got borrowed before inbound processing, damage went unreported, receiving over-received without an adjustment. Once this ticket opens, freeze the location first — adjusting inventory without freezing just plants a mine for the next pick.
Wrong SKU in the wave. The sneakiest of the four: wave planning drops an SKU into the wrong wave, or a wave ships with an SKU that shouldn't be there. You only catch it at verification, and goods already staged for loading have to come apart. The owner is usually not the picker but the wave planner — which is exactly why nobody volunteers to claim it.
An exception ticket needs four states in the WMS
Whether exceptions actually close comes down to one thing: a complete status chain in the system. My standard for clients is four states, no skipping.
Created. Whoever finds it creates it, within 30 seconds. Pickers, verifiers, receivers — everyone gets ticket rights. A ticket needs three things: exception type, location or SKU, and a photo. No photo, and the reviewer can bounce it straight back.
Claimed. The ticket auto-routes to an owner: mispicks go to the shift pick lead, putaway issues to the putaway team, inventory mismatches to the inventory control (IC) role. Claim window: 2 hours. Miss it, and the ticket auto-escalates to the supervisor. This is the linchpin of the whole chain — tickets without escalation rot in the system.
Verified. A different person verifies the fix; the person who fixed it doesn't get the final say. For a mispick, the verifier recounts the original location — quantity matches, location matches, photo uploaded. For an inventory mismatch, the verifier pulls that SKU's transaction history for the last 7 days and confirms the variance explanation holds up. Verifying your own fix is not verification.
Closed. Only after verification passes. Closing requires picking a root-cause code: scan missed, wrong location, system data, upstream receiving issue, and so on. Root-cause codes are for management — pull the monthly report, see which cause dominates, and fix that one first next month.
Across the four states, a ticket takes about 25 minutes of labor. Sounds like a lot, until you compare it with a ticket rotting in a group chat for three days and surfacing as a complaint and a refund. Those 25 minutes are the cheapest 25 minutes in the building.

One responsibility sheet that pins down who and how fast
The status chain is the skeleton; the responsibility sheet is the muscle. Here's the sheet I gave the Ontario warehouse — steal it:
| Exception type | Created by | Owned by | SLA | Close-out standard |
|---|---|---|---|---|
| Mispick | Verifier | Shift pick lead | 4 hours | Recount original location, quantity matches system, location photo uploaded |
| Inventory variance | Cycle counter / picker | IC specialist | 24 hours | Location frozen, 7-day transaction history reviewed, variance reason and adjustment number on file |
| Putaway error | Receiver / picker who found the empty slot | Putaway lead | 8 hours | Product moved to correct location, location barcode scanned and confirmed, photo uploaded |
| Wrong SKU in wave | Verifier | Wave planner / shift supervisor | 4 hours | Wave corrected or re-planned, affected orders re-verified |
The sheet went on the office wall and on the WMS exception module's front page. Hit the SLA and the system emails and texts the escalation target automatically. The leads grumbled for a week; a month later, average ticket close time dropped from 31 hours to 6.
Now let's do the math on the "exception tax"
One ticket averages 25 minutes of labor. At California warehouse wages of $18–$22 an hour, call it $20 — that's $8.30 in direct labor. But that's only the small change.
A mispick that leaves the building: $8–$12 in return shipping, 10 minutes of customer service time, another round of outbound freight to reship, and customer churn you can't even measure. Conservatively, a leaked exception costs $40–$60 all in.
The Ontario warehouse ran 140 tickets a month. Say half leaked, at $50 each: $3,500 a month, $42,000 a year. That's the exception tax — you pay it whether you budget for it or not, just in complaints, refunds, and overtime.
Which is why I call exception handling the number-two priority of any WMS go-live. Number one is getting receiving and shipping to run. Number two is the exception loop. Wave algorithms and automation integrations can wait — the faster your main flow runs, the faster exceptions leak, and without a loop you're just putting a turbocharger on your error rate.
Skip the "phase two" thinking. Two things tomorrow morning: first, set up three exception ticket types in your WMS — pick exceptions, inventory variances, putaway errors. Even three types beat a group chat. Type, photo, owner, deadline — get those four fields running. Second, print the responsibility sheet and put it on the wall: who creates, who claims, how fast it closes, what counts as closed — every line nailed down.
And one question to take home: last month, how many exceptions did your warehouse have — and how many were actually closed versus quietly forgotten? Run that number and you'll know exactly how much exception tax you paid.










