The most expensive line item in a WMS cutover is not the software license. It is the inventory you cannot explain on Monday morning.
I learned this the hard way in the fall of 2022, sitting in a 3PL warehouse office in Chino, California at 2 a.m. on a Saturday. Two laptops on the desk. The legacy system showed 4,218 pallets. The brand-new WMS we had just loaded showed 4,204. Fourteen pallets, gone.
Two hours of digging gave us the punchline: we had frozen data at 8 p.m. Friday, and the import finished at 1 a.m. Saturday. In that five-hour gap, the night shift rushed an expedite order through the old system — which was still live, with user permissions still on. We had frozen nothing.
I have told this story a dozen times because almost every WMS replacement trips over the freeze point. Get it wrong and you spend the first month after go-live scrubbing bad data instead of running the warehouse. The worst case I ever saw: six weeks of "the system says we have it, the warehouse says we don't" complaints, until the owner shut the building down for two full days to recount everything. Those two days cost more than the entire WMS implementation.
A freeze is a sequence, not a moment
Most teams treat the freeze point as a single timestamp: old system off at midnight, new system on at 12:01. That is how you end up with fourteen missing pallets.
A warehouse is a living operation. Receiving keeps arriving, outbound keeps shipping, cycle counts keep adjusting. You cannot stop fifty people and thirty forklifts on the same second. A real freeze point is a schedule — different types of data freeze at different times, and anything that moves after its freeze is caught by a defined process.
I break cutover data into four buckets, each with its own freeze timing. Static master data — items, locations, vendors, customers — can freeze one to two weeks early. It barely changes, so freezing it early costs the business nothing, and the window gives you time to clean house. Every legacy system I have touched had dirty master data: one item with three codes, location IDs in mixed case. Scrub it before it lands in the new system, not after.
Inventory balances are the dangerous bucket and must freeze together with operations. My rule: freeze receiving first, outbound second, with a physical count window in between. Receiving freezes first because staging inbound freight for a day or two is cheap and shippers accept it. Freeze outbound early and customer orders stop shipping, and the phone calls start.
In-transit documents and open tasks are the buckets everyone forgets. At the moment of freeze, the old system always holds half-finished work: a trailer half unloaded, a wave half picked, transfers never confirmed. Migrate those as-is and you import half-built transactions the new system cannot close.
My weekend cutover timeline usually runs like this — adjust the hours to your shifts. Friday 6 p.m.: freeze receiving. Later arrivals go to a segregated staging area, physically separated and separately counted, and get received directly in the new system after go-live. Friday 10 p.m.: freeze outbound and internal moves. Wave releases stop, replenishment stops, transfers stop. From this moment the legacy inventory numbers should not move; any true emergency ships on a manual ticket, entered into the new system later with dual verification.
Then the count window, Friday 10 p.m. to Saturday 4 a.m.: a full wall-to-wall count, or at minimum a complete count of A movers plus a sample of B and C. Book the adjustments in the old system first, then export. These are the hardest hours of the whole project and the most valuable — had we counted that night in Chino, the fourteen pallets would have surfaced on the spot. Saturday 4 a.m.: export the final snapshot, import, and run a three-way reconciliation — legacy snapshot, new system import, count sheets. All three must agree, down to the last unit. Saturday 8 a.m.: go-live. The old system goes read-only for three to six months, access limited to IT and finance. Do not decommission it early; in the first two weeks someone will always ask what a transaction looked like in the old world.
In-transit documents get their own rule: finish them in the old system under restricted access, or rebuild them as opening tasks in the new one. Never split one document across both systems. I once watched a return sit unclaimed for three months because QC was logged in the old system and the putaway confirmation landed in the new one.
Three places your data rots after go-live
First, open tasks. "Allocated but not picked" and "pick in progress" records must be closed or canceled before the freeze. A wave that is half picked — product already off the shelf, system never confirmed — cannot migrate; it has to be rebuilt by hand. My policy: four hours before the freeze, force-close every open task. Cancel what cannot close. Slow is fine; loose ends are not.
Second, serials and lots. Bulk inventory only needs to tie out in totals, but serialized and lot-tracked product must reconcile line by line. Run a validation pass before import: serial counts and lot lists compared across the legacy system, the new system, and the count sheets. Pharma and food warehouses, take note — mismatched expiry dates become audit findings.
Third, the finance handoff. When inventory balances move, work-in-process and goods-received-not-invoiced move with them. Plenty of projects cover the warehouse and forget finance, and finance blows up on day one with costs that will not reconcile. Put finance on the freeze schedule at least a week out, and have them in the building on cutover day.

If there is one question to ask before you sign off on any cutover plan, it is this: where is the rehearsal? Run a full shadow freeze on a quiet weekend before the real thing — freeze receiving, freeze outbound, count, export, import, reconcile, timed with a stopwatch. Every project I have seen that rehearsed went live meaningfully faster and calmer than every one that did not. One lost weekend buys everybody a full night of sleep on go-live night. Ask your implementation partner when the rehearsal is. If the answer is a blank stare, you have your real risk register.










