It was 2:30 in the morning, the week before Thanksgiving, peak season breathing down our necks. I was walking the night shift at a cold storage warehouse outside Chicago — the night that taught me what FEFO warehouse expiry management really costs when it only lives in software. One of my pickers came rolling up on a pallet jack. "Boss, this yogurt order doesn't look right." I went over. Same pallet, two layers, expiry dates 40 days apart — one batch expiring end of November, another end of December. Whoever put it away had mixed two lots on one pallet to save a trip. The customer was a grocery chain. They check expiry on every inbound pallet. One day short and the whole shipment comes back. Eight hundred plus cases, rejected on the dock, and we ate the return freight.

Let me be straight with you: standing outside that freezer at 2:30 a.m. with cold air running down my neck, I had exactly one thought in my head. FEFO was switched on in our WMS. So how did it fail this badly?

Checking a Box in the WMS Is Not FEFO

The story starts three years back, when we took on our first food customers — yogurt, juice, vitamin gummies. Sales promised every one of them the same thing: yes, we support FEFO, first expired, first out. IT configured an allocation rule in the WMS that sorted by expiry date. On paper, we were covered.

But here's what nobody tells you: a checkbox in the system and FEFO actually happening on the floor are two different universes. FEFO sounds simple — whoever expires first ships first. Getting it to work is a minefield. We stepped on two big mines. Both hurt.

Mine number one, summer of 2023. A shipment of vitamin gummies arrives. The manufacturer only gave 14 months of shelf life. Receiving was slammed that day, so the guy logged the lot number, left the expiry date blank, and moved on. In the WMS, that lot had a null expiry. The allocation rule hit the null, skipped it, and fell back to receipt date — which is just FIFO wearing a costume. Three months later the customer complained: the product they received only had 9 months of life left, and their retail channel required 12 months minimum at the shelf. Full return. Over twenty grand in product, charged straight back to us. QA did the root-cause review. One line: the expiry date never got entered in the one minute that mattered.

Mine number two, early 2024. We'd learned our lesson, or so we thought. Receiving was now forced to enter expiry dates, and we added what felt like a smart rule: anything with fewer than 45 days of life left gets auto-frozen, no QA release, no ship. Then peak season hit and the system froze half the freezer. Short-life products like yogurt live inside that 45-day window in normal rotation — the rule locked up perfectly good, fast-moving inventory. Pickers stared at their screens. Drivers leaned on their horns at the dock door. We spent a week manually unfreezing pallets at 11 p.m. every night. A rule is dead. Product is alive. A one-size-fits-all freeze threshold is just digging your own grave.

The One Minute at Receiving Decides Everything

After those two mines, the lesson finally landed: the real battlefield of FEFO warehouse expiry management is not the allocation-rule screen. It's the one minute at receiving. The smartest system in the world can't survive a skipped field or a mixed pallet. So we put all our effort into receiving and putaway — the two steps where it actually breaks.

Receiving is now dual-mandatory: lot number plus expiry date. Missing either one, the receipt can't close. Expiry dates get entered by scanning the manufacturer's case label with a gun — manual keying is only allowed as a QA-supervised correction, because every warehouse manager alive knows what hand-typed dates look like after a 12-hour shift. The moment the date goes in, the system calculates remaining life and tags it into a tier.

Putaway is physical separation: same SKU, different lots, never on the same pallet. And the slot labels in the freezer print the expiry date big enough to read from ten feet away. It's a low-tech move and it works better than anything. The system can segregate lots perfectly on screen — one lazy mixed pallet on the floor and it's all fiction.

Dairy pallets staged by expiry tier inside a cold storage warehouse

Our Five FEFO Rules, Taped to the Receiving Office Wall

Two years of trial and error boiled down to five rules, printed and taped to the wall in the receiving office. This is how we run FEFO warehouse expiry management now:

One — dual-mandatory receiving. Lot plus expiry, no exceptions, no workarounds. Covered above.

Two — tiered freeze thresholds, never one line for everything. Short-life products (90 days total life or less) freeze when remaining life drops below one-third. Long-life products freeze at 60 days remaining. Frozen lots go to QA's morning huddle every day — release it, or tell the customer it's time for a promotion.

Three — allocation sorts by expiry, but with a picking-efficiency window. Lots of the same SKU within 7 days of each other's expiry can be picked by shortest travel path. Let me be straight: strict FEFO sends your pickers running all over the building, and in peak season that kills you. Seven days of expiry difference versus an extra half hour of walking — you have to do that trade-off math honestly. Our answer: inside the 7-day window, efficiency wins; outside it, expiry wins.

Four — a 30/60/90-day expiry alert, every morning at 7 a.m., straight to QA and customer service. The 90-day alert is for talking to the customer about promotions or transfers. The 60-day alert schedules priority outbound. The 30-day alert is red — it goes on the morning meeting agenda, no debate.

Five — a monthly expiry-only cycle count. We count expiry dates, not quantities. Quantity counts belong to finance. Expiry counts keep you alive. Separate jobs, separate days.

The Math, From Our Own Floor

Before (FEFO "enabled") Now (FEFO actually running)
Expiry-related returns Two or three a year, each one painful Basically zero for two years
Receiving time Fast — and full of land mines 1–2 extra minutes per receipt
Picking efficiency Looked fast, lots of rework About even, thanks to the 7-day window
Audits Couldn't produce expiry records, sweated through them Full lot-to-expiry traceability

One thing to be clear about: the FDA never wrote the words "you must use FEFO" anywhere. But 21 CFR Part 117 requires food facilities to control storage conditions as needed and keep the records to prove it. Walk into an inspection with expiry management in chaos and you'll find your name on a Form 483. If you run food product, you already know what that means. Regulations do get updated — check the FDA website for the latest.

A Few Words for Fellow Warehouse Managers

Here's the uncomfortable truth most people get wrong: expiry management is not about the product that's almost expired. It's about the product whose expiry "looks fine." Nobody watches it. By the time someone remembers, it's too late. Our 90-day alert exists precisely for the "looks fine" inventory.

And one counterintuitive call I'll stand behind: products with 12-plus months of total shelf life often don't need strict FEFO at all. FIFO plus a regular alert usually does the job — forcing FEFO on long-life SKUs just buys you extra travel time for nothing. Save the strict FEFO for the short-life stuff. Don't roll FEFO across the whole building on day one. Look at your SKU mix first.

If you run a food warehouse, do one thing tonight: open your WMS, pull 10 random SKUs that carry lot numbers, and check how many have blank expiry fields. More than three blanks? Forget about FEFO configuration. Real FEFO warehouse expiry management starts in the one minute at receiving. The checkbox in the system was always just the beginning.

By Chen Feng, Warehouse Operations Manager