FIFO, LIFO, FEFO: what they really mean for your warehouse.
Three acronyms everyone in logistics uses, and surprisingly few follow through to the end: what they actually mean, in steel and in software.
Three acronyms everyone in logistics uses, and surprisingly few follow through to the end: what they actually mean, in steel and in software.
There are three acronyms everyone in logistics uses, and surprisingly few follow through to the end: what they actually mean, in steel and in software, for your warehouse. And the stakes aren't academic. For products with an expiry date, retailers reject goods that arrive with too little remaining shelf life — and a pallet rejected at receiving is simultaneously a wasted transport cost, stock to return, and a scratched commercial relationship. Stock rotation logic isn't an organizational preference; it's the mechanism that decides whether your goods reach the customer with the shelf life the sale promised.
This article takes them one by one — FIFO, LIFO, FEFO — then answers the question that actually matters: which logic is imposed by the physics of the rack, which by software, and what that means when you choose how to store your goods.
FIFO — First In, First Out. The first pallet in is the first one out. It's the natural logic for almost any product that ages: food, beverages, pharma, cosmetics. Stock rotates in production order — nothing gets forgotten at the back of the rack.
Suitable storage systems: gravity-flow racking (FIFO enforced physically, by construction), multi-depth satellite systems in an opposite-face configuration, and any selective storage — single-deep, double-deep, VNA, selective crane in high-bay — where FIFO is enforced by software. To avoid for strict FIFO: drive-in and floor-block storage, which impose reverse order.
LIFO — Last In, First Out. The last one in is the first one out. It sounds counterintuitive until you look at a floor stack of pallets: to reach the first pallet placed, you'd have to move all the others — so naturally, whatever went in last leaves first. LIFO isn't a wrong choice in itself; it's the natural logic for products that don't age significantly: industrial raw materials, packaging, parts, production buffers that empty out completely anyway.
Suitable storage systems: floor-block storage, drive-in racking, multi-depth satellite channels in the standard configuration (loading and unloading on the same face), channels served by the shuttle crane in high-bay. Exactly the highest-density systems — no coincidence: LIFO is the natural price of density, and where the product tolerates it, it's an excellent price.
FEFO — First Expired, First Out. The first to expire is the first one out. And here's the subtlety many miss: for products with an expiry date, the real commercial requirement isn't FIFO, it's FEFO. Most of the time they coincide — what came in first expires first. But not always: two batches produced on different days can reach the warehouse in reverse order; a return re-enters stock with a shorter expiry than the fresh goods already on the rack. FIFO looks at the date of entry into the warehouse; FEFO looks at the date on the label. For quality audits and for the retailer's delivery window, the second one is what counts.
Suitable storage systems: FEFO requires logical control by definition, so it excels in software-driven selective storage (single/double-deep, VNA, selective crane) and in multi-depth storage with batch dedication — one channel, one item, one batch. Gravity-flow racking supports FEFO only if batches enter in expiry order; drive-in and floor-block support it, likewise, only at the batch level for a whole channel.
Any discussion of FIFO in the warehouse becomes clear the moment you separate two things that always get mixed up: rotation imposed by rack construction and rotation managed by software.
Physical rotation means the storage geometry leaves you no alternative. Gravity-flow racking is the pure example: the pallet enters on one face, slides on rollers, and exits on the opposite face — FIFO guaranteed by gravity, impossible to violate even if you wanted to. At the opposite pole, floor-block storage and classic drive-in racking impose LIFO just as firmly: access exists only through the channel's face, so the last one in blocks the path of everything before it.
Logical rotation means physics imposes nothing, and the system decides the order. Selective racking — single-deep, double-deep, VNA, the selective crane in the high-bay warehouse — provides direct access to any pallet, at any time: FIFO, FEFO, or any other rule becomes a simple software decision, executed identically on every mission.
And between these two worlds sit multi-depth satellite systems, which deserve their own paragraph — because this is where the most expensive design mistakes happen.
A deep storage channel — 8, 10, 20 pallets one behind the other — operates, in the usual configuration with loading and unloading on the same face, in strict LIFO: the last pallet in the channel is the first one that can come out. For an FMCG manufacturer living under the expiry-date rule, that sounds disqualifying. And this is exactly where the confusion arises that leads either to unjustified rejection of dense storage, or — worse — to adopting it without understanding what you've signed up for.
The truth is more nuanced, and it rests on a simple question: at what level does rotation need to be correct — at the pallet level or at the batch level?
In FMCG practice, pallets from the same production batch share the same expiry date. If a channel is dedicated to a single item and a single batch — a rule the software can enforce automatically at putaway — then the order of pallets inside the channel becomes irrelevant: whichever comes out first, it comes out with the same expiry date. Correct rotation plays out between channels, not inside them: the system empties the channels with the batch expiring soonest first. LIFO at the pallet level, flawless FEFO at the batch level — and the audit is satisfied, because batch traceability is complete.
When does this NOT work? When batches are smaller than the channels — and channels mixed with different batches turn physical LIFO into a real problem. Or when the product's rotation requirement is so strict that every single pallet matters. For such cases, there's the opposite-face configuration (the channel becomes physically FIFO, like a gravity rack with a satellite) or, more often, simply a different storage type for that segment of items: selective with logical rotation. That's why well-designed warehouses combine zones — we've written at length about storage types and what each one requires.
FEFO has a peculiarity that sets it apart from FIFO: it can't exist without data. FIFO can be improvised manually too — you put new stock at the back, take it from the front, and discipline keeps the system alive (until it doesn't). FEFO requires the system to know the expiry date of every pallet — which means capturing it at intake, on every unit, with no exceptions.
This is where the difference between manual and automated operation shows most clearly. Manually, FEFO depends on a person reading labels and making the right call at every pick — including at 3 a.m., including at peak season, including when the label is at the back of the rack. Automated, the expiry date enters the system once, at receiving or at the end of the production line, and from there every retrieval mission picks the correct pallet without anyone reading a label again. The rule never gets tired, never rushes, and makes no exceptions — and the history of every movement exists by default, which turns the traceability audit from a chore into a report.
FIFO, LIFO, and FEFO are the basic vocabulary, but real warehouses — especially in FMCG — work with finer-grained rules. They're worth knowing, because some of them change the answer to "what storage system do I need."
FMFO / FPFO — First Manufactured (Produced), First Out. Rotation by production date, not by date of entry into the warehouse. The difference from FIFO becomes visible exactly in cases where arrival order doesn't match manufacturing order: goods brought in from two factories, transfers between warehouses, batches that sat in an intermediate buffer. For products where the expiry date is calculated from the production date, FMFO and FEFO practically end up in the same place by two different routes. It requires the same conditions as FEFO: data captured at the source and logically managed rotation.
Remaining shelf-life allocation per customer (minimum remaining shelf life). This is the most subtle logic — and, commercially, the most important one in modern FMCG — and the one written about the least. Each customer has its own requirement for remaining shelf life at delivery: a large retailer may reject goods below a certain percentage of total shelf life, exports to a distant market require more than local delivery, the discount channel accepts less. The counterintuitive consequence: sometimes the oldest batch does NOT ship first — deliberately. The system allocates batches by customer: the short-life batch goes wherever it still fits the window (local market, discount), the fresh batch is reserved for the customer with the strictest requirement or for export. It's no longer a simple ordering rule — it's an optimization across the order portfolio, impossible to hold in a shift supervisor's head, natural for software that sees the entire stock and all orders at once. As storage systems go, it requires logical access at the batch level: selective, or multi-depth with strict batch dedication.
Rotation by quality status. In pharma and food, stock moves through states: quarantine at receiving, released after inspection, blocked on suspicion, recalled when needed. Any rotation logic — FIFO, FEFO, allocation — applies only within released stock, and the software must make it impossible to retrieve a pallet under quarantine, no matter how "first" it is by age. In an automated warehouse, the block is absolute: a physically quarantined pallet can't be requested by any mission, unlike the orange label a rushed person can overlook.
Dedicated batch allocation. The case where a specific batch must go to a specific customer — batches certified for an export market, contractually dedicated production, or the recall scenario where a batch must be pulled from stock fully and fast. The practical test for any system: how quickly can you remove every pallet of a single batch from the warehouse, completely and demonstrably? With automatic move-level traceability, the answer is "immediately, with a report"; manually, the answer is an emergency inventory count.
And one final clarification, so things don't get mixed up: FIFO and LIFO also exist as accounting methods for inventory valuation — with their own tax rules, unrelated to the physical order in the warehouse. You can run FIFO for accounting and LIFO physically with no contradiction whatsoever: accounting values costs, the warehouse moves pallets. This article is about pallets.
If you take away one thing from this article, let it be the right order of questions. Not "which rack gives me the highest density?" or "is FIFO mandatory?" but:
The answers to these three questions aren't a matter of preference — they're calculated from your data: items, batches, pallets per batch, delivery windows. As always, the right configuration isn't an opinion; it's a result.
Not sure what rotation logic your product mix requires? Request analysis →
FIFO rotates stock by the date of entry into the warehouse (first in, first out); FEFO by the expiry date (first to expire, first out). For products with an expiry date, the real commercial requirement is FEFO — the two usually coincide, but not always: batches that arrive in an order reversed from production, or returns re-entering stock, make the difference visible.
Gravity-flow racking: pallets enter on one face, slide on rollers, and exit on the opposite face — the order is imposed by construction and can't be violated. Multi-depth satellite systems can be configured similarly, with loading and unloading on opposite faces.
Yes, with one design condition: each channel dedicated to a single item and a single batch. The order of pallets in the channel then becomes irrelevant (they all share the same expiry date), and the software ensures FEFO by emptying the channels with the batch closest to expiry first. Problems arise when batches are smaller than the channels and get mixed.
Last In, First Out — the last pallet in comes out first, the natural logic of floor stacks, drive-in racking, and channels accessed from a single face. It's perfectly acceptable for products with no aging constraint: raw materials, packaging, buffers that empty out completely — and it opens the door to the highest storage density.
The expiry date is captured once, when the pallet enters the system (at receiving or at the end of the production line). From there, the software selects the pallet with the closest expiry date at every retrieval, with no manual label reading, and the movement history ensures complete batch traceability for audits.
It's the logic by which each customer receives goods with the remaining shelf life their contract requires: large retailers reject goods below a certain threshold, exports require more than local delivery. The system allocates batches by customer according to these windows — which is why, sometimes, the oldest batch doesn't ship first, but instead goes to the channel where it still fits.
Fill in your project data — items, batches, flows — and get an initial assessment with the configuration that matches your products and flows.
Request analysis