Most of the time the oldest-received lot is also the soonest to expire, so FIFO and FEFO agree and the distinction doesn't matter. The cases where they disagree are exactly the cases that cause real spoilage losses.
FIFO and FEFO give the same answer whenever lots are received in the same order they'll expire — which is the common case, since most suppliers ship in production order and shelf life is fairly consistent batch to batch.
They diverge when that assumption breaks. A concrete example: Lot A arrives on March 1 with a 12-month shelf life (expires March 1 next year). Lot B arrives on March 15 but was manufactured in a rush run with only a 6-month shelf life (expires September 15). FIFO says sell Lot A first — it arrived earlier. FEFO says sell Lot B first — it expires six months sooner. Following FIFO here would leave the shorter-dated lot sitting while the longer-dated one sells, which is exactly backwards from what avoids waste.
This isn't a rare edge case for categories with real batch variability: supplements and cosmetics frequently see shelf-life differences across manufacturing runs (a reformulation, a different production line, a delayed shipment that ate into remaining shelf life before it even reached your warehouse). See supplements and cosmetics for category-specific detail. Food and beverage sees this constantly with variable ingredient sourcing. See food and beverage.
The practical requirement FEFO imposes: expiry data has to be recorded per batch, not per SKU. A SKU-level "this product expires in 12 months" field can't support FEFO at all — it collapses every lot into the same assumed date, which defeats the purpose.
FEFO by itself only answers "which lot to sell first" — it doesn't touch the reorder decision. That's a separate, related mechanism: see expiry-aware inventory for how Foreshelf factors expiry risk into how much to reorder, not just which lot to sell first.
Free, no signup.