Supply Chain / Operations
Case 09 / 13
Cutting excess and obsolete inventory by 29%
Variance reporting that traced forecast error to its root causes, plus a redesigned shelf-life and offload process that recovered $300K of at-risk stock.
Botrista · 2023–2025 · Demand Planner; owner of variance reporting and the offload process
- Automated variance reporting showed where forecast error came from, not just how big it was.
- Excess and obsolete inventory fell 29%.
- Redesigning the shelf-life and offload process, and negotiating with vendors, recovered $300K of at-risk stock.
The numbers
- −29%Excess and obsolete inventory
- $300KAt-risk stock recovered
- 24%Forecast accuracy improvement
- Python
- Google Sheets
Find what will expire unsold
Interactive — synthetic dataDrag the trigger and the recovery rate. The table shows which lots get flagged and what is recovered.
Excess = units on hand beyond what current velocity will sell before expiry. Recovery rate is illustrative.
- Inventory that will expire unsold
- $14,683
- Recovered by acting at the trigger
- $7,501
$7,181 still written off.
| Lot | On hand | Days to expiry | Excess units | At risk | Action |
|---|---|---|---|---|---|
| SKU-A1042 | 1,800 | 12 | 1,320 | $4,092 | Offload now |
| SKU-B2210 | 2,400 | 21 | 930 | $2,232 | Offload now |
| SKU-C0457 | 900 | 26 | 588 | $3,998 | Offload now |
| SKU-D3319 | 3,200 | 34 | 140 | $266 | Offload now |
| SKU-E1180 | 700 | 41 | 372 | $3,050 | Offload now |
| SKU-F0921 | 1,500 | 47 | — | — | Sells through |
| SKU-G2754 | 2,100 | 58 | 360 | $1,044 | Watch |
| SKU-H0033 | 600 | 75 | — | — | Sells through |
| SKU-J1608 | 2,800 | 90 | — | — | Sells through |
| SKU-K4412 | 1,100 | 110 | — | — | Sells through |
The lever is timing. The same excess is recoverable at 45 days and worthless at zero. Raise the trigger and more lots get flagged while there is still time to renegotiate, redirect, or move them; lower it and the table shows what quietly becomes a write-off.
Lots, costs, and recovery rates are synthetic. The logic is the part that is real: flag excess against current velocity, and act while there is still time to recover value.
How it fits together
- 1Forecast vs actual
- 2Variance by SKU
- 3Root-cause classification
- 4Shelf-life exposure
- 5Early offload trigger
- 6Vendor renegotiation
Read the full case study Hide the case study
The problem
Forecast error was being measured as a single number, which says how wrong the plan was and nothing about why. Meanwhile inventory that would not sell through before expiry was discovered when it expired.
Why it mattered
Excess and obsolete stock is capital and shelf space already spent. Once a lot is past its recovery window it is a pure loss; a few weeks earlier the same lot could be renegotiated with a vendor, redirected, or moved at a discount.
What I built
Automated planning analytics and variance reporting that decomposed forecast error by SKU and cause, so the fix could target the actual driver. On top of it, a redesigned shelf-life process with an early trigger for offloading inventory that current velocity would not sell before expiry, paired with vendor contract negotiation. Excess and obsolete inventory fell 29%, and $300K of at-risk stock was recovered.
What I learned
Most excess inventory is visible weeks before it is a loss. The savings came from acting at the point where there was still a choice — renegotiate, redirect, or offload — rather than writing it off at expiry, and from making that point a standing trigger instead of a judgment call.
What I would do next
Tie the offload trigger to a per-SKU cost of capital and shelf life, rather than one fixed window for every item.
Prior employer. Described without supplier, customer, or financial detail beyond the headline figures. Any figures in the demo are synthetic.