The cost of over-forecasting
A small bias left uncorrected for a few months turns into days of excess inventory and locked cash.
Extra DOI = 30 × months × bias. Cash locked = extra DOI × daily sales at cost.
I run S&OP, demand and inventory planning for a ₹2,800 Cr private-label portfolio, and I build the planning tools my team runs on.
Promoted from Assistant Manager to Manager in 18 months. I lead a team of four and own the planning chain from monthly consensus to daily replenishment.
Each case covers the problem, what I built or changed, and the result. Figures are as reported internally at Purplle.
Simplified versions of models I use at work. They run on dummy data, so you can move the inputs and see how I think about the trade-offs.
A small bias left uncorrected for a few months turns into days of excess inventory and locked cash.
Extra DOI = 30 × months × bias. Cash locked = extra DOI × daily sales at cost.
A plan built on the normal daily run rate stocks out mid-campaign. Adding the campaign multiplier to the forecast buys ahead in time.
Both plans review every 5 days and order up to lead time + 20 days of their own forecast. Opening stock is 20 days of cover.
Today's SWIS can look healthy while stock runs thin. Looking 7, 14 and 21 days ahead shows the gaps early, and which transfer closes each one fastest.
SWIS = share of daily sales (by run rate) on SKU-regions with cover at or above the horizon.
| SKU · region | Cover (days) | Share of gap | Fastest fix |
|---|
I write the business logic and build the tools myself (SQL, Python, HTML/JavaScript), with AI as a build partner. Several of them run in production at Purplle.
A self-hosted planning app covering 7,000 SKUs across 10 live channels, including Quick Commerce. It has a forecast editor with per-month multipliers, multi-tab planning views and a cloud database behind it. The whole app is a single 12,500-line file.
A pivot you can cut 9 ways, an editable forecast that re-splits totals exactly (Largest Remainder method), and an edit log with undo. Its output becomes the final demand number.
Forward availability by region and channel, with the root cause for each SKU gap and the fastest fix for it.
Picks the channel, discount depth and timing for slow-moving, discontinued and near-expiry stock.
Learns naming patterns and suggests short names and ranges for new SKUs.
A multi-step engine that splits national demand across warehouses, with floors and share rules.
Deduplicates product to barcode to SKU mappings in 8 priority steps, so each SKU maps to exactly one barcode and product.
A greedy algorithm that builds dispatch picklists against available stock.
I'm open to senior roles in supply chain planning, S&OP and inventory across FMCG, beauty and Quick Commerce. Based in Mumbai.