FEFO vs. FIFO, Explained

“Ship the oldest stock first” sounds like one rule. For anything with an expiration date, it’s actually two different rules that usually agree with each other — and occasionally disagree in a way that matters a great deal.

Two different questions

FIFO — first in, first out. Ship whichever stock arrived first. It’s a rule about receiving order, and it’s the natural default: the oldest inventory physically sitting in the building goes out the door before the newer inventory does.

FEFO — first expired, first out. Ship whichever stock expires soonest. It’s a rule about expiration date, and it only applies to items that carry one.

Most of the time these two rules pick the identical lot, because items usually get a fixed shelf life counted from the day they’re produced — so whatever arrived first also happens to expire first. FEFO and FIFO only pull apart when that assumption breaks: a vendor ships a partial batch late, a shorter-dated substitute item fills a backorder, or two production runs with different shelf lives get received in the “wrong” order relative to each other. When that happens, FIFO will confidently tell a warehouse to ship the lot that expires later — which is exactly backwards from what the business actually wants.

Worked example — a food importer

Vellano Imports stocks a 500 ml extra virgin olive oil, item EVOO-500, tracked by lot with a mandatory expiration date captured on receipt. Two lots currently sit in the same bin:

LotReceivedExpiresQty
L2601earlier2027-07-1510
L2603later2027-11-0110

A customer orders 6 units. FIFO says: L2601 arrived first, ship from L2601. In this particular case FIFO and FEFO happen to agree, because the earlier-arriving lot also happens to expire first — the ordinary, ninety-percent-of-the-time case.

Now picture the same bin a season later, after a second production run arrives with a shorter shelf life than usual — a common enough real-world cause, alongside a delayed shipment or a shorter-dated substitute filling a backorder:

LotReceivedExpiresQty
L2601earlier2027-11-014
L2604later2027-08-2010

Here L2604 arrived second but expires first. A strict FIFO-only warehouse, following “ship whatever arrived first,” would draw the next order against L2601 — the later-expiring lot — while L2604, the lot actually closer to its date, keeps sitting in the bin untouched. Every order filled that way leaves L2604 a little older relative to its remaining shelf life, until eventually it’s too close to expiry to sell at all, or a customer receives it closer to its date than the business would ever knowingly ship. A FEFO-aware pick, sourcing by expiration date rather than arrival order, draws from L2604 first in this exact scenario — correctly, and without anyone needing to notice the two production runs had different shelf lives in the first place.

Strict Expiration Posting: closing the loop further

Business Central has a second, stricter setting worth knowing about: Strict Expiration Posting, turned on at the item tracking code level. Where FEFO sorting alone still lets an already-expired lot appear in a pick list (just last, behind everything unexpired), Strict Expiration Posting excludes expired stock from the pick entirely. That’s a meaningfully different guarantee — FEFO sorting optimizes which good lot ships first; Strict Expiration Posting stops an already-bad lot from being offered to a pick at all, which matters most in categories where shipping expired stock isn’t just wasteful but a genuine compliance failure.

Why this is a real compliance and waste problem, not a nitpick

For food, pharmaceuticals, and many chemicals, shipping the wrong lot first isn’t a paperwork inconvenience — it’s the actual mechanism by which perfectly good stock turns into a write-off, and in regulated categories it can be the mechanism by which an expired unit reaches a customer at all. A warehouse that ships strictly by arrival order, with no expiration-date discipline layered on top, is quietly building up an inventory of stock that ages past its usable window before anyone gets to it — and it typically won’t notice until a cycle count turns up cases nobody can legally sell, or a customer complaint arrives with an expired lot number attached.

Why a human eyeballing a shelf gets it wrong

FEFO sounds like something a careful picker could just do by reading the label on the way past. In practice, a pick that has to happen in a handful of seconds, from a bin holding two or three lots of near-identical-looking cases, under exactly the same time pressure as every other pick that shift, is precisely the condition under which a printed date gets missed. It isn’t a competence problem — it’s a rate problem. Multiply one missed date, per shift, across every tracked item in a real warehouse, and the failure isn’t “someone made a mistake once.” It’s a predictable, recurring rate of mistakes that no amount of individual care drives to zero, because the task itself — compare several similar-looking dates, quickly, repeatedly, without fatigue — isn’t one people are reliably good at under pressure.

This is why FEFO, wherever it actually matters to a business, has to be enforced by the system rather than left to good intentions on the floor. It has to compare dates a worker can’t necessarily see at a glance across every lot sitting in a bin, every single time, without ever getting tired near the end of a shift the way a person does.

Business Central actually supports this natively

This isn’t a gap that only a third-party tool can close. Business Central can sort item-tracked picks and movements by expiration date automatically, at any location where that’s turned on and for any item that’s tracked with an expiration date — the mechanism is a Pick According to FEFO setting on the location’s own Bin Policies, not an add-on.

Mechanically, when FEFO is on: Business Central gathers the item-tracked quantities available to a pick into a temporary list ordered by expiration date, earliest first. If two lots or serial numbers share the same expiration date, the tie is broken by the lower lot or serial number; if those are also identical, whichever was registered first is selected first. The ordinary bin-level rules that already govern picking — bin ranking, break-bulk handling — are then applied on top of that FEFO-ordered list, so FEFO doesn’t replace a warehouse’s existing pick logic, it layers expiration-date priority into it.

Two setup conditions have to both be true before any of this engages: the item’s item tracking code has to have serial, lot, or package warehouse tracking turned on, and the item actually has to be posted into inventory carrying an expiration date in the first place. A location can also turn on Strict Expiration Posting, which goes a step further and excludes already-expired stock from a pick entirely, rather than merely sorting it last. Skip either precondition — no expiration-date tracking on the item, or no date actually captured at receipt — and there’s simply nothing for FEFO to sort by, regardless of whether the location setting is on.

That last sentence matters more than it looks: FEFO enforcement only works if the system actually knows which lot expires when, which depends entirely on item tracking being attached correctly at the moment stock comes in the door. That mechanism — and a well-known way scanning tools get it wrong without ever raising a visible error — is the subject of the next article.

Where this goes next

See item tracking in Business Central, explained for exactly where expiration dates and lot numbers actually live, and why a tool can look like it’s capturing them correctly while silently failing to. For the warehouse configuration level where FEFO becomes available at all, see directed put-away and pick, explained.

Key terms

New to the vocabulary? FEFO, FIFO, lot number, expiration date, and bin ranking are defined in the glossary.

Further reading — Microsoft Learn

Enable Picking Items by FEFO — the exact setup preconditions and sorting behavior described above. Manage Warehouse Activities — the FEFO mechanism in context alongside bin ranking and break-bulk.

Questions about WarehouseQ?

Support: support@dynamicspro.ca · 416-843-6575