Why does expired stock cost more than it looks?
Because the loss is silent. Cash theft gets noticed within a day; a crate reaching its expiry date at the back of a shelf is simply never sold, and it shows up only as a margin that is quietly worse than it should be. Nobody reports it, so nobody investigates it.
The loss is also double. You paid for the stock, and you occupied the shelf space and working capital that a sellable item could have used. For fast-moving perishables such as milk, bread, yoghurt and fresh produce, that shelf turn is the whole business model.
What is a stock batch, and why not just count the product?
A batch is one delivery of one product. The crate of milk that arrived on Tuesday and the crate that arrived last week are the same product but not the same stock: they have different expiry dates, and quite possibly different costs.
If you only track "milk: 48", you can answer how much you have but not which of it goes off first, or what any of it actually cost. Those are the two questions that decide whether perishable stock makes or loses money, so they are the two questions worth being able to answer.
| Question | Tracked as one product | Tracked as batches |
|---|---|---|
| How much do I have? | Answered. | Answered. |
| What goes off first? | Unknown. You check the shelf. | Known per batch, with the date. |
| What did it cost me? | An average across deliveries. | The real cost of that delivery. |
| What is about to expire? | Not reportable. | A list you can act on this week. |
| What did expiry cost me last month? | Invisible. | A number. |
What does first-expiry-first-out actually mean?
First-expiry-first-out, or FEFO, means that when something sells, it comes off the batch with the nearest expiry date rather than whichever arrived most recently. It is different from first-in-first-out: the delivery that arrived first is not always the one that expires first, and it is the expiry date that costs you money.
Done by hand, FEFO depends on whoever is stacking the shelf remembering to rotate. Done by software, it should be automatic and invisible: the person on the till scans the item and the system decides which batch the stock came out of, with no extra step at the counter.
Why must perishable stock always have an expiry date?
Because one undated batch poisons the report. Expiry reporting and FEFO both work by sorting on the expiry date; a batch without one cannot be placed in that order, so it either sorts to the wrong end or is skipped. Either way the report quietly stops being true, and you will not notice until you are standing in front of stock it did not warn you about.
This is why it is worth insisting on the date at the moment stock is received, when someone is holding the delivery note, rather than treating it as an optional field to be filled in later. Later never comes.
There is a second reason, beyond your own reporting. Prepackaged food sold in Uganda is subject to labelling requirements set by the Uganda National Bureau of Standards, and date marking is part of what an inspector expects to see honoured on the shelf. A shop that cannot say which batch is oldest cannot demonstrate it is selling in date order either.
How should a stock count be recorded?
Honestly, which means keeping both numbers. A count produces two figures: what you expected to find and what you actually found. The useful information is the gap between them. That gap is your shrinkage, your miscounted delivery, or your quietly expiring stock.
Software that simply overwrites the system figure with the counted one destroys exactly the information you were counting to obtain. The count should record the difference, and the reason, and who did it.
- Count the physical shelf before looking at the expected figure, because knowing the target biases the count.
- Record what you counted and what was expected, so the variance is preserved.
- Give the variance a reason: damage, expiry, miscount, theft. Over months this becomes the most valuable stock data you own.
- Count fast-moving perishables far more often than everything else. That is where the loss concentrates.
What should a Ugandan shop fix first?
Start with the products that expire fastest and sell hardest, not with the whole catalogue. Fresh dairy, bread and produce give you the fastest visible return, and the discipline built there transfers to everything else.
- Record expiry dates on perishables from the next delivery onward. Do not try to backfill history; start clean.
- Get every delivery in as its own batch rather than adding to one running total.
- Count your top ten perishables weekly, with the variance and a reason recorded each time.
- Once a month, look at what expired and what it cost. That number is the argument for everything else on this list.
None of this requires new software to begin. A disciplined book will get you most of the way. Software matters when the shop gets big enough that memory and rotation stop being reliable, and when you want the expiry report without spending an evening building it.