The Playbook
- 1. Why Inventory Health Is a P&L Problem, Not a Warehouse Problem
- 2. The Metrics That Actually Describe Health
- 3. Segmenting the Problem — The Health Matrix
- 4. The Economics of Waiting — Why Early Markdowns Win
- 5. Markdown Ladders & Depth Logic
- 6. The Exit Channel Stack
- 7. Provisions & NRV — Where Finance Meets the Warehouse
- 8. Prevention — The Buying-Side Fixes
- 9. The Operating Rhythm
Inventory health is the least written-about serious topic in e-commerce. Search for it and you'll find 3PL marketing posts and consulting one-pagers — nothing that shows the actual metrics, the actual economics, or the actual decision cadence. Which is strange, because for any retailer holding stock (1P retail, hybrid marketplaces, brands), slow-moving inventory is routinely the largest hidden loss line in the business: trapped working capital, storage fees, opportunity cost of warehouse space, and the write-down at the end.
This playbook is the missing document. It's written from the analyst's seat: what to measure, how to price the exit, and how to build the operating rhythm that stops the mountain from re-forming.
1. Why Inventory Health Is a P&L Problem, Not a Warehouse Problem
The cost of a unit that isn't selling has four parts, and only one of them is visible in most reports:
| Cost | Nature | Typical magnitude |
|---|---|---|
| Storage & handling | Visible, recurring — per-cubic-meter fees, insurance, counts | 15–30% of unit cost per year for slow movers |
| Cost of capital | Invisible — cash in stock is cash not funding growth | 8–15% of inventory value per year (your WACC) |
| Value erosion | Invisible until realized — electronics obsolete, fashion out-of-season, expiry dates approach | Category-dependent: 1–5% per month for electronics/fashion |
| Space opportunity cost | Invisible — every pallet of dead stock displaces a pallet of A-SKUs during peak | Spikes brutally in Q4 when warehouse capacity binds |
Add them up and a typical slow-moving unit costs 2–4% of its cost value per month just by existing. That number is the engine behind every recommendation in this playbook: the option of "waiting for it to sell at full price" is not free — it has a precise, compounding price.
2. The Metrics That Actually Describe Health
Five metrics, each answering a distinct question. Most companies track only the first.
| Metric | Definition | Question it answers |
|---|---|---|
| Aging brackets | Stock value by time-in-warehouse: 0–30 / 31–90 / 91–180 / 180+ days | How old is the problem? |
| Weeks of cover (WOC) | Current units ÷ recent weekly run-rate | How long until this sells out at current velocity? (∞ = never) |
| Sell-through rate | Units sold ÷ (units received) over a season/window | Did the buy match demand? |
| Inventory turns / DOH | COGS ÷ average inventory; days-on-hand is the inverse | The board-level capital efficiency number |
| Healthy stock % | Share of inventory value that is <90 days old AND has WOC < threshold | The single KPI to put on the exec dashboard |
The classic measurement mistake: aging alone. A 200-day-old SKU with 3 weeks of cover is fine — it's old stock that found its velocity. A 40-day-old SKU with 80 weeks of cover is a disaster in progress. Age tells you what already went wrong; cover tells you what's about to. Health = the two together, which is exactly what the matrix below does.
One implementation detail that matters: compute WOC on a recent velocity window (last 4 weeks, excluding stockout days — a zero-sales day with zero stock is not zero demand), and treat promo-driven spikes separately, or your "healthy" classification will flip-flop with every campaign.
3. Segmenting the Problem — The Health Matrix
Cross age with cover and every SKU lands in one of four boxes, each with one obvious action:
| Low weeks of cover (selling) | High weeks of cover (stuck) | |
|---|---|---|
| Young stock | ✅ Healthy. Protect availability, replenish, stockout-alert the A-SKUs | 🟡 Overbought. Stop reordering NOW; mild price action; investigate the buy — this box is where disasters are cheap to fix |
| Old stock | 🟢 Slow but alive. Let it drain; no panic markdowns; exclude from reorder | 🔴 Dead stock. Exit program: markdown ladder → channel stack (section 6). Every week of delay costs 2–4% |
Then rank within the red box by value at risk = cost value × monthly erosion rate, and work the list top-down. Ten SKUs usually cover half the problem value — inventory pain is always Pareto-shaped (see the SQL cookbook for the aging and ABC queries that produce this list).
4. The Economics of Waiting — Why Early Markdowns Win
Here's the argument that wins the markdown budget, laid out with real numbers. Take a unit that cost 100, priced at 140, that has stopped selling:
| Strategy | Timeline | Recovery | Holding cost paid | Net |
|---|---|---|---|---|
| Act early: −20% at day 90 | Sells within ~6 weeks | 112 | ~8 (4 months total) | +104 |
| Wait and hope: hold until day 240, forced −50% | Sells at ~month 9 | 70 | ~22 (9 months) | +48 |
| Deny until liquidation: bulk exit at day 365 | Liquidator pays 20–30% of cost | 25 | ~30 | −5 |
The early markdown recovers more than twice the wait-and-hope path. This asymmetry has a name in fashion retail — "the first markdown is the cheapest markdown" — and it exists because two clocks run against you simultaneously: holding cost accrues, and the product's market value decays (season passes, newer models launch, competitors clear their own stock). Yet organizations systematically choose the middle row. Why?
- Loss aversion: a markdown crystallizes a loss someone must own; holding keeps the loss hypothetical. The P&L eventually forces honesty, at a worse price.
- Anchor on cost: "we can't sell below cost" treats cost as a floor. Cost is sunk. The only question that matters: what is the highest net recovery available from this point forward?
- Nobody owns the clock: buying owns the purchase, commercial owns the price, finance owns the write-down — so aging stock is everyone's problem and no one's KPI. Fix: one owner, one aged-stock target, reviewed monthly.
Aged inventory is a melting ice cube: every week of delay simultaneously raises what you've spent and lowers what you can recover. The markdown you're avoiding is almost always cheaper than the one you'll eventually take.
5. Markdown Ladders & Depth Logic
A markdown ladder is a pre-agreed escalation schedule — it removes the weekly renegotiation and the loss aversion from the process:
# A typical age-triggered ladder (tune brackets per category)
# age 90+ and WOC > 26 : -15%
# age 150+ and still WOC > 26 : -25%
# age 210+ : -40% + eligible for bundle/outlet
# age 300+ : exit channels (B2B/liquidation), any recovery > 0 beats holding
def markdown_step(age_days: int, woc: float, sell_through_7d: float) -> float:
# escalate only if the previous step didn't restart velocity
if sell_through_7d > 0.05: # it's moving again — hold depth
return 0.0
if age_days >= 210: return 0.40
if age_days >= 150 and woc > 26: return 0.25
if age_days >= 90 and woc > 26: return 0.15
return 0.0python
Principles that make ladders work in practice:
- Steps, not slides: discrete jumps (15 → 25 → 40) outperform continuous small cuts — each step is a fresh demand event, gets merchandising surface ("new price drops"), and re-triggers price-drop notifications.
- Escalate on evidence: only deepen if the previous step failed to restart velocity
(the
sell_through_7dcheck above). A markdown that worked shouldn't deepen. - Depth from elasticity where you have it: electronics may clear at −15% while own-brand fashion needs −40%. Historical markdown events are your elasticity dataset — mine them.
- Mind the cross-effects: a deep markdown on one SKU cannibalizes its full-price neighbors (same logic as the promo playbook). Ladder at the product-family level for close substitutes.
- Protect the brand tier: premium assortment gets outlet/flash-channel treatment rather than public markdowns on the main storefront — price integrity is an asset with its own value.
6. The Exit Channel Stack
Markdowns on your own storefront are only the first rung. The full stack, ordered by recovery rate:
| Channel | Typical recovery (of cost) | Best for | Watch out |
|---|---|---|---|
| Own-site markdown | 70–110% | Anything with residual demand | Cannibalization; brand-tier dilution |
| Flash sales / deal events | 55–85% | Mid-tail with deal appeal | Deal-training your regulars (promo playbook, section 4) |
| Bundles ("free gift", multi-buy) | 50–80% (hidden in the bundle) | Low-value accessories & long tail; clears units without a visible price cut | Operational picking complexity |
| Outlet section / outlet marketplace | 40–70% | Fashion, seasonal, cosmetically damaged / open-box | Keep it separated from the premium storefront |
| B2B / wholesale exit | 30–50% | Large homogeneous lots; export to price-insulated markets | Contractual channel restrictions from brands |
| Liquidators | 10–30% | The final 5% nothing else moved | Grey-market resurfacing of branded goods |
| Donation / recycling | 0% (+ possible tax relief, − disposal cost) | Expired, unsellable, or when handling cost > recovery | Do the math — sometimes this genuinely beats a 10% liquidator offer net of logistics |
The operating principle: every SKU in the red box gets an assigned channel and a deadline. The stack is a waterfall — items that fail a channel's timeline drop to the next. What kills recovery is not choosing a low channel; it's items floating channel-less for months while their value melts.
7. Provisions & NRV — Where Finance Meets the Warehouse
This is the part analytics people usually don't know, and it's why finance suddenly cares about your aging report at quarter-end. Accounting standards (IAS 2) require inventory to be held at the lower of cost and NRV — net realizable value: the price you can actually sell it for, minus the costs of selling it. When expected recovery falls below cost, the company must book a provision (write-down) — a direct P&L expense, now.
- The aging report drives the provision matrix. A typical policy provisions a rising % of cost by age bracket (e.g., 10% at 180 days, 25% at 270, 50% at 365+). Your analytics feed this directly — which means aging data quality is a financial-statement issue, not a dashboard issue.
- Good liquidation analytics literally reduces provisions: if you can demonstrate systematically higher recovery rates (your channel-stack track record), the provision assumptions can reflect it. Cash saved on paper, but real for earnings.
- The perverse incentive to know about: once an item is provisioned to 50%, selling it at 45% of cost books as a gain against the provisioned value. Teams sometimes delay exits until after provisioning to "sell at a profit." The cash economics didn't change — only the optics. Measure recovery against original cost, always.
Career note for analysts: being the person who connects the warehouse view (aging, WOC) to the finance view (provisions, NRV, working capital) makes you unusually valuable — that bridge is chronically understaffed in most retail organizations, and it's where inventory decisions actually get made.
8. Prevention — The Buying-Side Fixes
Exit programs treat symptoms. The disease is over-buying, and it has known analytics fixes:
- Close the loop to the buyer. Sell-through by buy decision, per buyer, per season — reviewed openly. Most organizations never show buyers the aged outcome of their purchase orders; the feedback loop alone changes behavior.
- Buy to quantiles, not averages. Order quantity should come from the demand distribution and the newsvendor logic (overage cost vs underage cost), which is exactly what quantile forecasts provide — see the ML playbook, section 4.
- Smaller first buys, faster re-buys. Where supplier lead times allow, shift from one season-sized bet to test-and-chase: initial buy covers the lead time, re-order the winners. Inventory risk drops roughly with the square root of order frequency.
- New-item WOC alerts at day 30–45. The yellow box (young + overbought) is where intervention is cheapest — a supplier return, order cancellation, or early mild markdown at day 40 beats any liquidation at day 300.
- Assortment discipline on the C-tail. Every quarter, the ABC analysis (SQL cookbook, pattern 5) should kill SKUs. A catalog that only grows is a warehouse that only ages.
9. The Operating Rhythm
The analytics is necessary but not sufficient — the cadence is what makes it work:
| Cadence | Ritual | Output |
|---|---|---|
| Weekly | Health matrix refresh; ladder triggers fire; new entries to the red box flagged | Automated markdown list + channel assignments |
| Monthly | Aged-stock review: value by bracket vs target, recovery rate by channel, top-20 value-at-risk items with owners | Decisions on escalations; buyer feedback loop |
| Quarterly | Provision alignment with finance; ladder depth calibration from realized elasticities; C-tail assortment kill list | Updated policy parameters; catalog pruning |
And one scoreboard metric over it all: healthy stock % of total inventory value, trended weekly, target agreed with leadership. When that number is on the exec dashboard, everything else in this playbook acquires an owner.
This is the playbook I wish existed when I started working on liquidation analytics. If you're building one inside your company and want to compare notes: sharmavikas.9798@gmail.com.
Sources & Further Reading:
Umbrex: Markdown Optimization •
Inventory Aging Reports •
BoF: Managing Markdowns •
The Newsvendor Model