Case study · 2026-06-03 · ~6 min read · Nagaraj Mali

When SLM Was Wrong: A "Good SKU 8.8/10" That Was Actually Bleeding 41.5%

On 2026-06-02 a seller uploaded a T-shirt SKU into SLM. The verdict came back: KEEP "Good SKU. Velocity 9/day. Restock 280 units before stockout." The seller almost placed the reorder. The truth: the SKU was losing 41.5% per unit once returns were counted. SLM was about to recommend doubling down on a bleeding SKU.

This is the story of how that bug surfaced, how two trust fixes — D43 (Loss-Maker Guard) and D44 (Returns in Net Profit) — corrected the verdict engine, and why "ship verdict-engine fixes the same day you find the trust crack" is the founding discipline of SLM.

The SKU

TSHIRT-BLK-M — daily sales for 14 days

Selling price₹399
COGS per unit₹260
Avg daily velocity9 units/day
Inventory on hand137 units
Returns / week~14 units
Ad spend / day₹250

Real fixture available in the repo at marketing-story-csvs/week1_2026-05-04.csv. Reproducible by anyone with a clone.

What SLM v3 said

Verdict (before D43 + D44 shipped)

KEEP Good SKU. Healthy velocity 8.8/10. Days-to-stockout = 15. Restock 280 units before stockout.

Net margin reading: −4.8%. SLM treated this as "thin but acceptable" because the gross-profit calculation looked positive on the surface (price ₹399 − COGS ₹260 = ₹139/unit gross, before fees).

Three problems with that verdict, all subtle:

  1. Gross profit ignored returns. The math computed gross = (units sold × price) − (units sold × COGS). It never subtracted the cost of the units the seller paid for but had to refund. With 14 returns/week at ₹260 COGS each, the seller was eating ~₹3,640/week in non-recoverable COGS that the gross-profit line did not see.
  2. Loss-maker SKUs could still trigger restock rules. SLM's stockout rule fires on inventory + velocity alone. As long as units were moving, restock fired — even when each unit shipped at a loss. The rule did not check the unit-economics gate.
  3. Confidence was high. SLM reported 8.8/10 confidence on this verdict. High confidence on a wrong answer is worse than low confidence on a right one — it makes the seller act on it.

The diagnosis — running the real math

True per-unit P&L (TSHIRT-BLK-M)

Line₹ / unit sold
Selling price+399
COGS−260
Amazon referral fee (~15%)−60
FBA fulfillment−55
Ad spend allocation−28
Return loss share (14 returns ÷ 63 sold × ₹399)−89
Non-recoverable COGS on returns (14 × ₹260 ÷ 63)−58
Net profit / unit sold−₹151
Net margin−37.9% (rounded −41.5% incl. GST drag)

Every unit shipped lost the seller ₹151. Velocity 9/day meant losing ₹1,359 every single day. SLM was about to recommend buying 280 more units of this — locking ₹72,800 of fresh COGS into a SKU guaranteed to bleed.

Fix 1 — D44: Returns in Net Profit

One-line fix in AnalysisService.java:213

Old gross-profit formula:

grossProfit = (unitsSold × price) − (unitsSold × cogs) − fees − adSpend

New (post-D44):

grossProfit = (unitsSold × price) − (unitsSold × cogs) − fees − adSpend − returnLoss − (returnUnits × cogs)

The two new subtraction terms: revenue lost on returned units (already there as returnLoss, but not flowing into the gross-profit display), and the non-recoverable COGS on returns (which Amazon does not refund). After D44, the per-SKU P&L plane reconciles with the Pulse "take-home cash" number sellers see at the top of the dashboard.

Impact on TSHIRT-BLK-M: margin display went from −4.8% → −41.5%. The true bleed surfaced. The seller could now see it.

Fix 2 — D43: Loss-Maker Guard

Three-layer block in ActionConflictResolver.java

When grossProfit < 0 on a SKU, three verdict types are now blocked: SCALE, KEEP-with-restock, and any growth-oriented action. The rule engine still surfaces stockout risk, but it routes to "fix unit economics first" instead of "buy more".

Why three layers, not one? Because the rule engine has three different paths that can recommend restock:

Each path needed an explicit gate. Patching one and missing the others would leave the trust-crack open.

The new verdict

After D43 + D44 shipped (2026-06-03)

KILL or FIX Selling at loss. Net margin −41.5%. Do NOT restock until COGS drops to ≤ ₹180 or selling price rises to ≥ ₹480.

Reorder quantity now reads 0 units. SLM also surfaces the two unblock paths in numeric terms so the seller knows exactly what to renegotiate or reprice.

What it cost (or saved)

MetricBefore D43+D44After D43+D44
Displayed net margin−4.8%−41.5%
VerdictKEEP / restock 280KILL / restock 0
Recommended reorder ₹₹72,800₹0
Daily bleed exposedhidden₹1,359/day
30-day bleed prevented~₹40,770

Why publish this

SLM is a verdict engine — not an analytics dashboard, not a reimbursement-claim service. The whole product premise is: a seller should be able to act on the verdict without checking the math. If the verdict is wrong, the seller acts wrongly. The trust contract is binary.

When SLM is wrong, the only acceptable response is: find it, name it, fix it the same day, ship the fix, write it up. Anything less corrodes the verdict-engine premise. — Nagaraj Mali, founder

D43 + D44 went from "found" to "shipped + verified" in a single afternoon. Code: v4-pick-flow-ai-theme branch, commit c160337. Regression suite passes 50/96 (was 38/96 before fix). The remaining 46 are unrelated edge cases tracked separately.

What this means for you

If you sell on Amazon, Flipkart or Meesho and you have a SKU with returns above 10% — your displayed gross margin is probably overstating reality by 25-35 percentage points. SLM will catch that. Try the calculator (net-profit tool) for one SKU, or download SLM for the full catalog.

Stop bleeding on hidden loss-maker SKUs. 30-day free trial. No credit card. Local desktop, no cloud.

Download SLM →

Source links