A distributor had cash tied up in parts nobody wanted and kept running out of the ones customers came for. Reordering was one buyer's memory, applied to thousands of items.
The Problem
Most items in the catalogue sell rarely and unpredictably, which is exactly where averages stop working.
Reordering ran on one buyer's memory. He was good, and he could hold perhaps a few hundred items in his head, out of a catalogue in the thousands. Everything else was reordered when someone noticed it had run out, which is to say after a customer had already been told no. Meanwhile the warehouse filled with parts bought because they were cheap that month.
Working capital sitting on shelves
Cash committed to slow moving stock that would take years to sell, while fast moving items were funded out of whatever was left.
Lost sales never recorded
A stockout does not appear in the sales history. The business only saw what it sold, never what it failed to sell, so the data quietly understated real demand.
Knowledge held by one person
The reordering judgement lived with a single buyer. His leave, and eventually his departure, were genuine operational risks.
Constraints
The non negotiables that ruled out the obvious approach.
The typical part moves a handful of times a year in irregular bursts. Methods that assume a steady rate produce a confident fractional forecast that is useless for a purchase decision.
Periods of stockout look identical to periods of no demand. Training on raw sales teaches the system to keep under ordering exactly the items that sell out.
The output is a proposal a person approves, and every quantity has to be explainable in a sentence, or the buyer overrides everything and the system is abandoned.
The business cares about service level against cash tied up in stock. A more accurate forecast that recommends worse purchases is a failure.
How It Works
Group items by how they actually behave, apply a method that suits each group, and turn the result into a reorder quantity a buyer can argue with.
Periods when an item was out of stock are marked as unknown rather than as zero sales, so the history stops teaching the system to under order its best sellers.
Promotions, festival demand, a one off bulk order from a single customer. Left in, these become a phantom pattern that repeats in next year's plan.
Steady movers, seasonal items, irregular slow movers and items with too little history are genuinely different problems, and each gets a method suited to it rather than one model spread across all of them.
A purchase decision needs the range of plausible demand over the lead time, because the reorder quantity depends on the risk of the high end, not on the average.
Lead time, minimum order quantity, supplier packs and shelf life turn a forecast into a quantity that can actually be ordered. This layer, not the model, is where most of the value is.
Each line states why: expected demand over the lead time, current cover, the service level being targeted, and what the buyer would give up by ordering less.
The Hard Part
Early on I chased forecast accuracy, and improved it. The purchase proposals got no better, because for an item that sells four times a year the average is close to meaningless. What a buyer needs is the chance of demand exceeding what is on the shelf before the next delivery arrives.
Reframing the output from a number to a distribution changed the whole design. The reorder point falls out of a service level the business chooses per item group, so a critical fast moving part can be protected while a slow mover is allowed to run thin, deliberately and visibly.
That made the real trade off explicit for the first time. Higher service costs working capital, and the curve is steep at the top: the last few points of availability cost more than everything before them. Showing that curve let the finance and sales sides argue about a business decision instead of about a spreadsheet.
The censored history mattered more than any modelling choice. Treating stockout periods as zero demand had been quietly teaching the system to keep the best selling items scarce, which is the exact opposite of what the business needed. Fixing that one assumption moved the outcome more than every model change combined.
Technical Decisions
| Choice | Why | Instead of |
|---|---|---|
| Segment first, then model | Irregular slow movers, steady movers and seasonal items fail in different ways. Routing each group to a method that suits it beat one model tuned across everything. | A single model spread across the entire catalogue |
| Predict a range, not a point | A reorder quantity depends on the risk of the high end of demand over the lead time. A single expected value cannot answer that question. | One expected demand figure per item per period |
| Stockouts marked as unknown | Treating an out of stock period as zero demand trains the system to under order the fastest moving items, which is the most expensive possible error here. | Training directly on recorded sales |
| Constraints as a separate layer | Lead times, minimum order quantities and supplier pack sizes change constantly and are business rules, not statistics. Keeping them out of the model kept both parts simple. | Encoding purchasing rules inside the forecasting step |
| Service level as the reported metric | The buyer and the finance team are shown availability against stock value, which is the decision they actually own. Error metrics stayed internal to tuning. | Reporting forecast error to the business |
Outcome
What changed for the business.
Every item is reviewed each cycle rather than the few hundred a buyer can hold in mind, so quiet stockouts in the long tail stop happening unnoticed.
Service level is set per item group and the cost of it is visible, so protecting a critical part is a decision the business makes rather than an accident of who reordered it.
The reasoning behind each proposal is written down, so cover during leave stopped being a risk and a new buyer can see why a quantity is what it is.
Items that sell rarely are held deliberately thin, freeing working capital for stock that turns.
In Hindsight
What I would do differently.
I spent the first stretch improving forecast accuracy because it was measurable and satisfying. It moved the business outcome barely at all. The stockout correction and the purchasing constraints layer, both unglamorous, did nearly all of the real work.
I showed the buyer error metrics in the first review and lost the room. Once the same information was presented as availability against cash tied up in stock, the conversation became productive immediately. The metric you report is a product decision.
The parallel run should have been longer. It ran alongside the buyer for a few cycles, which was enough to build confidence in the fast movers but not enough to see a full seasonal swing before handover.
Get in Touch