It is the end of the quarter and the accounting team is signing off on a write-off report. On paper, the warehouse is still well stocked: dozens of pallets of raw materials and shelves full of finished goods. But on closer inspection, a significant share of that stock has already expired, or has too little shelf life left for customers to accept it. Meanwhile, the batches received last week have already been shipped out first. The business ends up destroying goods, placing urgent replenishment orders, and working with an inventory report that never quite reflects how much stock is actually usable.
This is a familiar story for manufacturers and distributors of food, pharmaceuticals, cosmetics and raw materials with limited shelf life. The problem is not a lack of stock. It is picking the wrong batch. This article explains the difference between FIFO and FEFO, when FEFO is needed, what data it depends on, and how to get started in a practical way.
High stock doesn't mean usable stock
A total inventory figure only tells you how much you are holding. It does not tell you how much can still be sold, used in production, or delivered to customers with strict remaining shelf-life requirements.
For products with an expiry date, the right question is not "how much do we have?" but rather:
- How much stock is still within its shelf life, and how much time does it have left?
- Which warehouse, location and batch is it in?
- Which batches should be shipped first to avoid write-offs?
If your system can only answer the first question as a single total, stock counts and customer rejections over short remaining shelf life will keep catching you by surprise.
FIFO vs FEFO: what's the difference?
FIFO (First In, First Out) means the batch that arrived first is shipped first. It is simple and works well for products without an expiry date, or with long and consistent shelf lives.
FEFO (First Expired, First Out) means the batch with the nearest expiry date is shipped first, regardless of when it was received.
In many cases the two rules give the same result, but not always. For example:
- A supplier delivers a batch produced some time ago. It arrives later but expires earlier than the stock already on hand.
- Customer returns are put back into stock with less shelf life than new goods.
- Raw materials come from several suppliers, each with a different shelf life.
- Finished goods are produced in multiple runs, each using materials with different expiry dates.
In these situations, FIFO lets short-dated batches get buried at the back until it is too late.
When do you need FEFO?
FEFO becomes essential when your business has one or more of the following characteristics:
- You handle food, beverages, pharmaceuticals, supplements, cosmetics, chemicals or other materials with an expiry date.
- Your customers (retail chains, distributors, hospitals, factories) require a minimum remaining shelf life on delivery.
- A single item is sourced from several suppliers or produced in several runs with different expiry dates.
- You operate multiple warehouses or storage locations, or regularly restock returned goods.
- You need batch traceability to handle complaints or product recalls.
If you have ever written off expired goods while the same item was still sitting in the warehouse, that is a clear sign it is time to move to FEFO.
Why spreadsheets and storekeeper experience fall short
Many businesses still track expiry dates in Excel or rely on the storekeeper's memory. That can work with a small range of items, but the weaknesses show as the business grows:
- Data is disconnected from delivery notes. The expiry tracker lives in one place and the goods issue documents in another. Nothing guarantees that the batch on paper is the batch that actually left the warehouse.
- It depends on individuals. An experienced storekeeper may remember which batches are close to expiry, but that knowledge disappears during leave, staff changes or busy shifts.
- There are no proactive alerts. A spreadsheet does not warn you when a batch is about to expire. People find out only when they happen to open the file or during a stock count.
- Real-time updates are difficult. When several people edit the same file, version conflicts, missing entries and duplicates are common.
- There is no audit trail. When you need to explain why one batch was shipped instead of another, there is no data to check against.
In other words, FEFO cannot just be a rule pinned to the warehouse wall. It has to be built into the daily goods issue process itself.
The data FEFO depends on
FEFO only works when the underlying data is complete and accurate. At a minimum, every goods receipt should capture:
- Batch or lot number: a unique identifier for each production run or delivery.
- Manufacturing date per batch.
- Expiry date per batch, not a single date for the whole item.
- Warehouse where the batch is stored.
- Location within the warehouse (zone, rack, level, bin) so pickers can find the right batch.
- Quantity on hand per batch in each warehouse and location.
It also helps to record supporting information such as supplier, receipt document, batch status (available, on hold, awaiting quality inspection) and the minimum remaining shelf life required by each customer group.
A 6-step checklist to get started with FEFO
- Choose a priority product group. Start with short-dated, high-value items or those that have already caused write-offs. There is no need to do everything at once.
- Standardise how batch, manufacturing and expiry data are recorded. Agree on formats for batch numbers and dates, and define who records them at which step of receiving.
- Recount stock by batch and location. Load actual figures into the system as your starting point. If opening data is wrong, every suggestion that follows will be wrong too.
- Build FEFO into the goods issue document. When a delivery note is created, the system should suggest the nearest-expiry batch that still meets the order's requirements, rather than leaving the choice to the user.
- Set alert thresholds. Define when a batch counts as "near expiry" for each product group, and who receives the alert and takes action (promotions, transfers, use in production).
- Review regularly and handle exceptions. Track cases where staff picked a different batch from the one suggested, find out why, and adjust the process or warehouse layout accordingly.
Common mistakes
- Tracking expiry only at item level. One item can have many batches with different expiry dates; a single date ignores the real problem.
- Applying FEFO rigidly and ignoring customer requirements. The nearest-expiry batch may not suit a customer who demands a long remaining shelf life. FEFO has to work alongside each order's conditions.
- Suggesting one batch but shipping another without recording it. Once reality drifts from the documents, batch-level stock reports become less reliable over time.
- Ignoring locations. The system knows which batch to ship, but the picker does not know where it is, so the nearest pallet gets picked instead.
- Forgetting returns and quarantined stock. These batches often have the shortest remaining shelf life and are the easiest to overlook.
- Treating FEFO as a warehouse-only task. Purchasing, sales, production and accounting all need visibility of expiry data to make the right decisions.
How NineERP supports FEFO
NineERP is developed by NINE PLUS SOLUTIONS,. JSC for small and medium-sized manufacturers and distributors in Vietnam, with an inventory module tightly connected to purchasing, sales and production. For shelf-life management, NineERP provides:
- Manufacturing and expiry dates per batch. Each batch carries its own dates from the moment it is received or produced.
- Near-expiry batch suggestions. When a goods issue is created, the system proposes batches according to FEFO for the user to confirm, reducing reliance on individual memory.
- Evidence of the selected batch on the goods issue. Batch, quantity and location are saved with the document, making reconciliation and explanations straightforward.
- Near-expiry alerts. You set your own thresholds so the relevant teams can act before goods have to be written off.
- Stock by warehouse, location and batch. See exactly where usable stock is, how much there is and which batch it belongs to, instead of a single total.
- Connected batch traceability. Trace a finished-goods batch back to raw material batches and suppliers, and forward to the customers who received it, supporting complaint handling and recalls.
Frequently asked questions
Does FEFO completely replace FIFO?
Not necessarily. FIFO remains suitable for items without an expiry date. For items with an expiry date, FEFO is the primary rule, and FIFO can be used as a tie-breaker when two batches share the same expiry date.
Do small businesses need FEFO?
Size is not the deciding factor. If you sell products with an expiry date and have ever written off expired stock while the same item was still in the warehouse, FEFO is worth it. You can start with a single priority product group.
What if a customer requires a minimum remaining shelf life?
The system should first filter batches that meet the order's remaining shelf-life requirement, then apply FEFO within that eligible group. Batches that do not qualify can be prioritised for other channels.
Do I need barcodes or scanners to run FEFO?
Not necessarily. Barcodes make batch capture faster and more accurate, but what matters most is recording batch, manufacturing date, expiry date and location correctly at goods receipt.
Further reading
- Batch traceability: why Excel is not enough – https://www.nineplus.vn/en/blog/truy-xuat-nguon-goc-lo-hang-vi-sao-excel-khong-du
A full warehouse but still writing off expired goods? NINE PLUS SOLUTIONS,. JSC is ready to give you a demo on sample data built around your real business processes · Hotline 0332.186877 · www.nineplus.vn (Contact section).




