A pharmacy chain in Tangerang came to me with a problem they had been treating as inevitable. Every month they wrote off a meaningful pile of expired medicine, and every month at least one branch turned away a customer for a product that was sitting, unsold, on a shelf at another branch two kilometers away.

This pharmacy stock management case study is worth telling because the root cause was not exotic and neither was the fix. There was no forecasting model, no machine learning, no expensive enterprise platform. The problem was blindness. No branch could see any other branch's stock, so each one ordered as if it were the only store in the world. The rest followed from there.

Let me walk through what was actually broken, what we built, and the numbers that changed, because the lesson generalizes to almost any multi-branch retail operation.

The Compound Problem: Everyone Ordering Blind

The chain ran six branches. Each branch manager ordered independently from suppliers based on what they saw on their own shelves. Individually, every manager was doing a reasonable job. Collectively, it was a mess.

The failure had two faces that fed each other:

  • Simultaneous overstock and stockout. One branch would over-order a slow-moving medicine while another branch ran out of the same item. The chain held plenty of total stock; it was just in the wrong places, and nobody could see that.
  • Expiry losses. Overstocked items sat until they expired. In pharmacy, expiry is not a markdown, it is a total write-off, often with disposal cost on top. The overstock did not just tie up cash, it turned into a monthly loss on the P&L.

The manager's instinct was to ask for better demand forecasting. That was the wrong ask. You do not need to predict the future when you cannot even see the present. The medicine that would solve today's stockout already existed inside the company. The problem was that no system let anyone find it.

What We Built: Visibility First, Then a Transfer Workflow

We resisted the temptation to build something clever and instead built something obvious, in two stages.

Stage one: a single shared view of stock across all branches. Every branch's inventory flowed into one place, updated close to real time. For the first time, a manager, or the owner, could look at one screen and see that Branch 3 was short on an item while Branch 5 had six months of it aging quietly.

Just the visibility changed behavior immediately. Managers stopped panic-ordering things the chain already had. But visibility alone still left the work of moving stock as a messy series of phone calls, so we added stage two.

Stage two: a simple inter-branch transfer workflow. A branch that needed stock could request it from a branch that had a surplus, with a clear approval and a record of what moved where. Nothing fancy: a request, an approval, a confirmation, and stock levels that updated on both sides automatically.

We also added one quiet but high-value feature: an expiry-aware view that surfaced items approaching their expiry date, ranked by value at risk. This turned expiry from a monthly surprise into a weekly worklist. Items nearing expiry at a slow branch could be transferred to a high-traffic branch and actually sold before they died.

This ordering, visibility before automation, is a pattern I use everywhere, and it echoes a similar turnaround in A Hotel Group Clawed Back Direct Bookings From the OTAs. Fix what people can see before you automate what they do.

The Numbers That Changed

Within about four months, the results were clear and boring in the best way.

Metric Before After
Monthly expired-product write-offs Baseline Down roughly 60%
Stockouts of items available elsewhere Frequent, weekly Rare
Emergency supplier orders Common Sharply reduced
Working capital tied in slow stock High Meaningfully lower

The expired-product reduction alone paid for the system in the first few months. The chain had been quietly losing tens of millions of rupiah a year to expiry, most of it avoidable, all of it invisible until someone put the six branches on one screen.

The softer win mattered too. Branch managers stopped feeling like they were competing with each other for supplier attention and started behaving like one network. The transfer workflow gave them a legitimate, recorded way to help each other, which is much healthier than informal deals over WhatsApp that nobody tracks.

Why This Generalizes

If you run any multi-location business holding physical stock, retail, food, spare parts, this case study probably describes a version of your reality. The symptoms are the same: overstock here, stockout there, write-offs everywhere, and a manager asking for better forecasting when the real problem is that nobody can see the whole picture.

The sequence that works:

  1. Get all locations onto one shared, near-real-time view of stock. This alone changes ordering behavior.
  2. Add a simple, recorded workflow to move stock between locations. Requests, approvals, automatic updates.
  3. Make the expensive risk visible. For pharmacy it is expiry; for you it might be seasonal obsolescence or slow-movers. Surface it early enough to act.

Notice what is not on the list: predictive analytics, AI forecasting, a full ERP replacement. You may want those eventually. You do not need them to capture the first, largest chunk of value.

The Takeaway

This pharmacy stock management case study comes down to one line: you cannot manage what you cannot see. The chain was not short on medicine or on capable managers. It was short on visibility, and that single gap produced both the stockouts and the expiry losses.

Before you invest in forecasting or fancy analytics, ask whether every part of your operation can even see the same picture right now. Usually the biggest win is hiding in that answer. If you want help finding it in your own operation, that is exactly the kind of problem I take on with partners.