Ask ten warehouse managers if they use FIFO, and nine will say yes. Ask them to define it precisely, and the definitions start to drift. Somewhere between "first in, first out" and "we mostly just pick from the front of the rack" is a gap — and for any business handling perishable, dated, or batch-tracked stock, that gap is where expired product gets dispatched.
FIFO and FEFO are not interchangeable terms for "be sensible about old stock." They are two different sorting rules that happen to agree most of the time — and disagree at exactly the moments that matter most.
What FIFO actually means
FIFO — First In, First Out — dispatches stock in the order it was received into the warehouse. The lot that arrived first leaves first, full stop. It has nothing to do with expiry dates, shelf life, or quality. It's purely a function of receipt timestamp.
This works perfectly for non-perishable goods. Steel fittings, fasteners, packaging materials, industrial components — none of these degrade meaningfully over the timeframes a warehouse typically holds stock. For these categories, FIFO is not just sufficient, it's the correct and complete rule. There is no second variable to track.
FIFO: dispatch order follows receipt order only. No expiry date is part of the calculation.
What FEFO actually means
FEFO — First Expired, First Out — dispatches stock based on which lot will expire soonest, regardless of when it arrived. A lot that came in yesterday but expires next week goes out before a lot that's been sitting for a month but doesn't expire for another year.
This is the rule that matters for anything with a meaningful shelf life — frozen and chilled food, dairy, bakery, pharmaceuticals, and certain chemical products. The receipt date becomes almost irrelevant. What matters is the date printed on the lot itself.
If your supplier delivers two batches of the same item — one with a longer shelf life, one with a shorter one — and the shorter-life batch happens to arrive later, FIFO and FEFO will give you opposite pick instructions. FIFO says dispatch the older receipt first. FEFO says dispatch the nearer-expiry lot first, even though it just arrived. Only one of those instructions avoids dispatching expired stock.
The difference that matters
For most of the time, in most warehouses, FIFO and FEFO produce the same pick order — because stock usually arrives in roughly the same sequence its shelf life would suggest. That's exactly why the distinction gets blurred in conversation. The two methods agree often enough that people stop noticing when they don't.
The comparison below is the version we wish every warehouse manager had pinned above their desk.
| What it sorts by | FIFO | FEFO |
|---|---|---|
| Sort key | Receipt / GRN date | Expiry date on the lot |
| Ignores | Expiry date entirely | Receipt date entirely |
| Best suited to | Non-perishable goods — fasteners, fittings, packaging | Perishable or dated goods — food, pharma, chemicals |
| Risk if used wrong | Minimal — no expiry risk to manage | High — expired stock can be dispatched to a customer |
| Typical industries | Manufacturing, trading, hardware distribution | Cold storage, food and beverage, pharma |
When FEFO is mandatory, not optional
For non-perishable items, choosing FIFO over FEFO is a minor efficiency decision. For perishable or dated items, choosing FIFO over FEFO is a liability decision — and often a regulatory one.
- Frozen and chilled food. Dispatching an expired lot to a customer isn't a paperwork error — it's a food safety incident. The lot expiry has to be enforced, not just recorded.
- Pharmaceuticals and vaccines. Regulatory bodies in most jurisdictions explicitly require FEFO for batch-tracked medical products. This isn't a best practice suggestion — it's frequently a compliance requirement with audit trails attached.
- Certain chemical and industrial products. Anything with a defined shelf life that affects efficacy or safety after a certain date — adhesives, certain coatings, some agricultural inputs — falls into the same category.
The deciding question is simple: does dispatching an expired unit create a safety, compliance, or liability risk? If yes, FEFO isn't a nice-to-have feature in your WMS — it's the entire point of having lot tracking at all.
A cold storage operator running 200+ frozen lots at any given time was finding expired stock during routine freezer checks — a pure write-off, and a near-miss on customer dispatch. The root cause wasn't carelessness; it was that "FEFO" existed as a policy on paper but wasn't enforced at the point where it actually mattered: the picker's hands. Read the full story in our Igloo Frozen case study.
How Fast WMS enforces both — at the scanner, not on paper
A policy that lives in a training manual is a policy that gets ignored under pressure — when the shift is short-staffed, when a rush order comes in, when the nearest-expiry lot happens to be on the highest shelf. The only place a FIFO or FEFO rule actually holds is at the point of the scan.
Fast WMS handles this by generating the pick list in the correct order automatically, and then enforcing that order at the Android handheld:
- Pick list generation. For FIFO stores, the pick list sorts by receipt date — oldest GRN first. For FEFO stores, it sorts by expiry date — nearest expiry first. The picker never has to calculate this themselves.
- Scan-level enforcement. If a picker scans a lot that's out of sequence — a later-expiry lot before an earlier one is exhausted — the Fast WMS Android app rejects the scan and redirects them to the correct bin and lot.
- Dispatch validation. As a second layer, expiry dates are checked again at the dispatch scan. Even if something slipped through picking, an expired lot cannot be loaded onto a vehicle.
FIFO and FEFO, configured per store, enforced at every scan
Fast WMS lets you set the picking rule per store — FIFO for your raw material store, FEFO for your frozen and chilled zones — all inside one system. No separate spreadsheet, no manual cross-check, no relying on the picker to remember which rule applies to which aisle.
The Fast WMS Android app enforcing FEFO order at the point of the scan — not as a suggestion, but as a hard rule.
