FIFO, LIFO, FEFO — which rotation strategy to choose

Andrzej Lenkowski,

FIFO, LIFO, FEFO - three letters, three philosophies of stock management. They look like simple ordering rules, but in warehouse practice each strategy has its own logic, its own equipment requirements and its own financial consequences. The choice is not neutral: a wrong rotation strategy can cost a warehouse tens of thousands of zlotys per year in expired stock or in incorrect accounting valuations. Below are a few things worth knowing before deciding which rotation to apply to which assortment.

FIFO - First In First Out

The rule looks simple: first in, first out. In WMS practice it means that out of the available pallets with a given product, the operator should pick the one with the earliest receipt date. The date is unrelated to the expiry - it refers to the moment the goods physically entered the warehouse.

FIFO makes sense everywhere the goods don't have an expiry date but we still want to avoid specific pallets sitting too long. A classic example: electronics, tools, metal parts. They won't go bad, but if a pallet enters a rack and gets squeezed between others, after two years the carton is crushed, the label is peeling and in the meantime the supplier has changed the SKU number. FIFO disciplines the rotation and forces older stock to move.

From an accounting standpoint FIFO is the most common method of valuing outflows - 70-80% of companies in Poland use it. The Accounting Act (art. 34 sec. 4) allows it, IAS/IFRS effectively require FIFO or weighted average.

LIFO - Last In First Out

The opposite of FIFO: the latest received goes out first. From the warehouse logistics perspective LIFO is practically illogical - why would we move a fresh pallet first and leave the old one on the rack? The answer lies in accounting, not in operations.

In times of rising prices LIFO artificially lowers inventory value (because old, cheap items stay on the balance sheet) while increasing cost of sales (because outflow is valued at fresh delivery prices). This reduces taxable income - which is why LIFO is popular in the US. In Europe the situation is different: IAS/IFRS have banned LIFO since 2005, so any company reporting under those standards cannot use it.

In Poland the Accounting Act formally allows LIFO, but very few companies use it in practice - mainly those with specific group requirements or warehouses of bulk goods (coal, sand, aggregates), where physically the fresh delivery just sits on top of the previous one. For a typical pallet-and-rack warehouse, LIFO simply doesn't work operationally.

FEFO - First Expired First Out

A variation of FIFO based not on receipt date but on expiry date. The pallet whose date expires first goes out first - regardless of when it physically arrived. Contrary to appearances, FEFO and FIFO don't always point at the same pallet: a supplier may bring goods with a shorter date than the ones already on stock from a previous delivery.

FEFO is the standard in food, pharma, cosmetics, building chemicals, animal feed and veterinary. Generally everywhere the goods have an expiry date and breaching it means scrap, complaint or a legal problem. A warehouse serving a retail chain without FEFO has practically no chance of passing a quality audit - chains do random checks and drop suppliers who deliver goods with shorter remaining shelf life than what is on the shelves.

In Weaver WMS, FEFO is configured as a parameter on the SKU or product group. The system, on every pick, sorts available lots by ascending expiry date and directs the operator to the pallet with the shortest date. The operator has no choice - the terminal shows a specific location and a specific lot.

HIFO - Highest In First Out

A purely accounting strategy, almost absent at the operational warehouse level. HIFO assumes that the first item out of the valuation is the one received at the highest price. It works only on the valuation layer - physically goods are not moved differently than in other strategies.

The point of HIFO is similar to LIFO during inflation - it lowers inventory valuation and raises cost of sales. In Polish practice it's rarely used, occasionally appears in fuel or non-ferrous metal valuations, where prices change in steps and the board wants a conservative valuation. It still requires the auditor's consent - it's not a standard method under the Accounting Act.

Industries and their strategies

After 17 years of deployments we see fairly stable patterns. They don't always fit, but as a starting point they're reliable:

  • Food, pharma, cosmetics, household chemicals - FEFO without discussion, plus lot tracking. Required by quality audits and food law (Regulation 178/2002).
  • Electronics, tools, machine parts - FIFO. No expiry dates, but we want older stock to move so it doesn't gather dust on the racks.
  • Bulk goods (aggregates, coal, grain in silos) - LIFO operationally and often for accounting too. Physically the fresh batch lies on top - that's how it gets picked.
  • Seasonal clothing, fashion accessories - FIFO, sometimes with manual overrides at the end of a collection (they go to clearance first, regardless of date).
  • Building materials (cement, plaster, adhesives) - FEFO, because these have a production date and lose properties after 3-12 months.
  • Wood, timber materials - FIFO on pallets, but often with an additional moisture criterion - material that's too fresh simply isn't fit to ship.

Implementation in WMS

At system level the rotation strategy is enforced in three places:

  • Definition on SKU or product group. Each item has an assigned strategy - FIFO, FEFO, LIFO. Whoever has permission to edit this field decides whether the strategy is fixed or operators can override it.
  • Picking queue sort. The WMS algorithm sorts available locations holding the product according to the chosen strategy and gives the operator a specific pallet to pick.
  • Picking blocks. If the operator tries to scan a different location than the recommended one, the system either blocks the operation or requires supervisor approval.

Configuring blocks is an organisational decision. A hard lock guarantees order, but in unusual situations (damaged pallet, blocked location, forklift breakdown) it stops the work. A soft lock with supervisor authorisation is more flexible, but requires the supervisor to be present and accountable. In larger warehouses we see a tendency toward hard locks with a dedicated "exceptions" workflow - the operator reports the exception, the supervisor approves it in their app, the goods go from another pallet with the reason logged.

FEFO pitfalls

FEFO looks simple on slides, but several situations expose a poorly configured system:

  • Two lots with identical expiry date. The system has to decide which pallet to point to. Practical rule: the older lot (by receipt date) goes first - that's FEFO + FIFO as a tiebreaker. Without it the operator gets an arbitrary pallet and may end up walking three different aisles for the same product.
  • Lot without an entered expiry date. Goods received without a date (e.g. operator forgot to type it in) cannot fit into the FEFO order. Safe configuration: lot without a date goes into quarantine and waits for manual entry. Unsafe: lot without a date treated as "infinite date" and pushed to the end of the queue - it may never be shipped.
  • Tolerances at outbound. Some chains (especially food) require the goods to have at least X days of remaining life on receipt. The standard is 1/3 of total shelf life, but each chain has its own table. The WMS has to enforce this tolerance - if less than X days remain, the goods are flagged as not suitable for that customer.
  • Soft and hard dates. "Best before" is a quality date - passing it does not automatically mean disposal. "Use by" is a hard date - after it the goods are not fit to sell. The WMS should distinguish between the two, because the post-date procedure differs.

Common mistakes

  • Strategy in the policy but not in the system. The supervisor says FEFO, the WMS isn't configured for it, the operator picks whatever. Six months later the warehouse has 15% past-date stock and the manager asks "how did this happen".
  • No location-driven picking. The operator gets an order "pick 10 units of product X" without a specific location. They go to the closest pallet - usually the second one in the row, the one easiest to reach. Location-based picking is the foundation of FEFO; without it the strategy is fiction.
  • Manual strategy override without a log. The supervisor presses the "override strategy" button 30 times a day because "it's faster". A year later the audit shows FEFO is overridden in 40% of picks. Every override should be logged with a reason - undocumented overrides will start to disappear over time.
  • One strategy for the whole warehouse. One client had FEFO configured globally while 30% of their goods had no expiry dates at all. The WMS threw errors at every receipt and operators learned to ignore them. The strategy should be tied to SKU or group, not to the warehouse.
  • No post-fact verification. The strategy is configured but no one checks the reports showing whether it works. If FEFO is doing its job, goods with longer dates never leave before those with shorter ones. It's worth checking this regularly.

Mixed strategies

A larger warehouse rarely runs only one strategy. A typical example: a food and supplements distributor has 6000 SKUs in the portfolio - 4500 with expiry dates (FEFO), 1200 long-life supplements treated with FIFO, and 300 accessories (mugs, spoons, promo folders) that don't need rotation at all.

Practical model: strategy is an attribute of the product group. The whole "fresh food" group is FEFO, "supplements" is FIFO, "marketing items" have an "any" strategy. The operator doesn't know which strategy applies to which item - they only see which pallet to pick. The WMS does the rest.

The exception is goods under special supervision - drugs in pharma, sensitive cosmetics (UV filters, retinol), ice cream, fresh fish. Beyond standard FEFO there's an additional remaining-life threshold that changes pick priority. Goods with 25% remaining shelf life get a lower priority - we want to push them toward customers who tolerate shorter dates (e.g. local catering instead of a retail chain).

Rotation audit

Configured strategy is one thing; actual behaviour is another. A few reports worth running regularly in Weaver WMS:

  • Stale pallet report. Lists pallets that have sat the longest without movement. In FIFO and FEFO these should be picked first - if they've been there three months, the strategy isn't working.
  • Strategy override report. A list of every pick where the operator or system ignored the recommendation. Typically should be below 5% of all operations - more means the configuration is detached from reality.
  • Near-expiry report. Goods with remaining life below a defined threshold (e.g. 20% of original shelf life). FEFO should naturally minimise this list. If it grows, the strategy isn't working.
  • Disposal report. Goods that passed expiry while still in the warehouse. A direct measure of the cost of inefficient rotation. A healthy food distributor keeps this below 0.5% of turnover.

Our clients receive these reports automatically, once a month, by email to the supervisor. From our experience: the first three months after go-live show a huge gap between theory and practice. After six months of discipline and corrections the numbers stabilise.

Wrap-up

Choosing the strategy doesn't start with the WMS - it starts with the type of goods. Food, pharma and cosmetics = FEFO. Electronics and parts = FIFO. Bulk goods = LIFO operationally. Accounting valuation is a separate decision, often going a different way than the operational logic - and that's fine, as long as both are deliberate.

Weaver WMS supports all these strategies natively. The strategy is an attribute of the SKU or group, can be mixed within a single warehouse, can be overridden with a log, can be reported on. The hardest part - as usual - is on the pre-deployment analysis side: walking through the assortment with the client and assigning the right logic to each group. Without it, even the best-configured system will keep pointing the operator to the wrong pallet.