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:

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

← Back to all posts