June 9, 2026 · By John Thieszen, MD
FEFO vs FIFO: why first-expired-first-out matters more in a pharmacy
Every inventory-control class teaches FIFO — first in, first out. Sell the oldest stock first; don't let product age out at the back of the shelf. It is the right default for a grocery store, a warehouse, a parts bin. And it is almost right for a pharmacy.
The pharmacy version is FEFO: first expired, first out. Dispense the bottle that expires soonest, not the bottle that arrived earliest. The two rules sound interchangeable, and a lot of the time they produce the same answer. The problem is the times they don't — because in a pharmacy, arrival order and expiration order are not the same order, and the gap between them is exactly where medication expires on the shelf.
The two rules, precisely
FIFO ranks stock by when it arrived. The bottle that came in first goes out first. Expiration date never enters the decision; arrival order is used as a proxy for it, on the assumption that older stock expires sooner.
FEFO ranks stock by when it expires. The bottle that expires first goes out first, regardless of when it landed on the shelf. Arrival date is irrelevant to the dispense decision; the only thing that matters is which unit is closest to its expiration.
FIFO and FEFO agree only when arrival order and expiration order happen to rank the stock the same way. Whenever those two orders diverge, the rules give different instructions — and FIFO gives the wrong one.
Why arrival order and expiration order diverge in a pharmacy
In a tidy world, the oldest bottle on the shelf is always the soonest to expire and FIFO is FEFO by another name. Pharmacies do not live in that world. Three ordinary things break the assumption:
Short-dated deliveries. A wholesaler drop can include product with only a few months of shelf life left — sometimes shorter than stock you received weeks earlier. The newest box on the dock can be the soonest to expire. FIFO would shelve it behind older, longer-dated stock and reach for it last; FEFO reaches for it first.
Different dating across manufacturers and lots. The same drug from two manufacturers, or two lots of the same manufacturer, can carry expiration dates months apart. Restock the shelf from a longer-dated lot and the older, shorter-dated bottles can end up pushed to the back. Arrival order says "use the old ones"; it just can't see that a newer lot is actually closer to expiry.
Returns and re-shelving. Stock that was pulled and comes back — an order that wasn't picked up, a bottle moved between rooms — re-enters inventory out of its original arrival sequence. The physical shelf position no longer encodes arrival order, and arrival order no longer encodes expiration order. FIFO-by-shelf-position quietly stops being FIFO at all.
What FIFO costs you that FEFO catches
The failure mode is specific and familiar: a short-dated bottle sits on the shelf, behind or beside a fresher one, until it expires unused. Nobody made a mistake. FIFO was followed exactly — the staff reached for what looked oldest, or what was easiest to grab. The rule just pointed at the wrong bottle, because the bottle it should have flagged wasn't the oldest by arrival; it was the soonest by expiration.
That single expired bottle is the whole cost in miniature. It is product you paid for and threw away. If you missed the wholesaler's reverse-distribution window, it is also credit you can no longer claim. And on an audit, a bin with an expired unit in active stock is a finding — not because the loss was large, but because it signals the rotation isn't trustworthy. FEFO is the rule that targets that bottle directly, because the bottle's expiration date is the only thing it sorts on.
The catch: FEFO is harder to run by hand
There is a reason FIFO is the textbook default and FEFO is the thing pharmacies mean to do. FIFO is easy to run physically — put new stock behind old stock, always pull from the front, and shelf position does the sorting for you. You never have to read a number.
FEFO can't be run by shelf position alone. To pull the soonest-to-expire unit, someone has to actually read the expiration date on each candidate bottle and compare. Do that perfectly, every dispense, across hundreds of SKUs and several staff and every short-dated delivery, by eye, and FEFO works. Miss it on a busy afternoon — grab the front bottle without checking the date behind it — and you've silently fallen back to FIFO for that pick. The intention is FEFO; the execution drifts to FIFO under pressure, which is precisely when the short-dated bottle gets stranded.
Making FEFO the default instead of the intention
The way FEFO actually holds up is to stop relying on anyone reading and comparing dates in their head, and let the system carry the expiration order. A few things make that real:
- Capture the expiration date at receiving, per unit. If the date is recorded when stock comes in — by scanning the 2D barcode that already carries it, not by hand — the system knows every bottle's expiry from day one, and the FEFO order exists without anyone maintaining it.
- Surface a soonest-to-expire pull list. Instead of asking staff to find the right bottle, the system tells them: here is what expires next, sorted by date, across the whole shelf. The dispense decision stops depending on which bottle is easiest to reach.
- Flag short-dated stock at intake, not at expiry. When a delivery lands with a few months of life left, that should raise a flag the day it arrives — so it gets placed and used first — not discovered the week it expires.
- Keep the expiration order visible. A live, color-coded view of what's expiring — this week, this month, this quarter — means FEFO is something the staff can see, not a rule they're supposed to remember while doing six other things.
None of this changes the goal. The goal was always FEFO. It changes who is responsible for holding the expiration order in mind — moving it off the busy technician and onto a system that doesn't get distracted and doesn't grab the front bottle because it's a Friday.
The short version
FIFO uses arrival order as a stand-in for expiration order, and in a pharmacy that stand-in is wrong often enough to matter. FEFO sorts on the thing you actually care about — what expires next — and it is the correct rule for medication. The reason most pharmacies run "FEFO in principle, FIFO in practice" is that FEFO is hard to execute by eye. Hand the expiration order to a system that captures dates on the way in and shows you what's expiring, and FEFO becomes the default instead of the good intention.
RxRescue is built to make FEFO the default: expiration dates captured by scan at receiving, a soonest-to-expire pull list, short-dated flags at intake, and a live color-coded view of what's expiring. See how it works on the expiration tracking page and for independent pharmacies, or start a 30-day free trial.
Related
- The monthly pharmacy expiration check — and why it misses stock
- How pharmacies lose money to expired medication
- Receiving-date tracking — why "when it physically arrived" matters
- Cycle counting without closing the pharmacy
- Section-based pharmacy audits — turning a month-long count into a clean process