Out of the best sellers. Overstocked on the rest.
a company that keeps stock on hand against demand it has to predict ·
Abstract
Every month, the people who do the buying have to decide what to reorder and how much of it. They asked us for a better way to make that call.
The reason was specific. The products that sold most consistently were the ones customers couldn't get. At the same time, stock that barely moved kept arriving, and then sat there doing nothing. Both problems were running at once, off the same decision.
Problem
They described it as a forecasting problem. Give us a clearer view of demand so we stop guessing.
Guessing wasn't the cause. Nothing in the operation said how much cover any item actually had, and without that number the only signals left are the loud ones. A customer asks for the top seller and it isn't there, so somebody orders more. Nobody ever complains about the stock in the corner that isn't moving, so it keeps getting reordered out of habit. Buying from memory means buying from whatever went wrong most recently.
That explains one failure. It doesn't explain why both were happening at once, and that took longer to see.
A forecast is only as good as the count it starts from, and the count wasn't telling the truth. Stock in the building isn't the same as stock you can use. Some of it is damaged. Some is already promised to a customer. Some is in motion, and some isn't even theirs to sell. Counted as available, all of it says you have more than you do, and that is exactly how a business runs out of its best seller while the record insists everything is fine.
Then there's the stock nobody was looking at properly. Some items never sell on their own. They get used up inside something else that sells. Judged on their own sales history they look like products nobody wants, right up to the moment their absence stops something else. They're not slow. They're invisible.
So the real constraint was never the forecast. Nothing turned movement into a forward view, and the numbers anyone would have built that view from didn't mean what they appeared to mean.
Solution
A single monthly view covering every item they hold. Not a list of exceptions, not an alert when something drops low. Everything.
For each item it shows how much is genuinely available, how fast it's going out, how long the current cover will last, and a suggested quantity to buy.
The measure is a length of time, and that choice is the whole thing. A low-stock alert only catches one of the two failures. Ask how long the cover lasts instead and one number answers both questions: a small number means a shortage is coming, a large one means money is already sitting on a shelf. That's why the view covers everything rather than flagging the exceptions. Both failures are the same measure pointing different ways.
Availability is defined honestly, which is less glamorous than it sounds and was the precondition for everything else being worth anything. The system counts only what can actually be used, and it says inside the sheet what it has left out. A number that quietly excludes things is a number people stop trusting the first time it surprises them.
Items that get consumed inside something else are counted on what gets used, not on what gets sold. Items that have been retired stop being reordered on their own past momentum.
And it suggests. It doesn't order. That was deliberate, because a number has to earn its way into a purchase order before anyone should let it write one. The buying team still makes the call, in the spreadsheet they already work in. They ask for the sheet, and it turns up when it's ready.
The decision still belongs to a person. It just isn't being made from memory any more.
The system described here is one we built and run. The situation around it is drawn rather than reported, because the details that would make it specific are the ones that would identify a client.
← All use cases