Building an Assortment Rationalisation
Framework for Dark Stores
Assortments are launched across stores, but performance diverges quickly.
Some SKUs find their audience; others quietly accumulate in stores where they don't belong.
The real challenge isn't identifying low performers and removing them, it's knowing whether low performance is structural or fixable.
Building a rule-based framework to answer that question at scale. One that separates genuinely weak SKUs from those being held back by availability gaps, pricing mismatches, or low visibility, so the business could act on evidence rather than instinct.
12,400+
SKUs Evaluated
> 1 %
conversion drop
(ATC → Checkout)
90% → 11%
stores above
storage capacity
10%
reduction in
perishable disposal losses
ROLE
Senior Business Analyst /
Product Strategy
PROJECT TYPE
Assortment optimization /
Decision framework
STAKEHOLDERS
Category, Merchandising,
Supply Chain, Pricing,
Store Ops
TIMELINE
~ 8 Weeks
TOOLS
SQL, BI dashboards,
Pricing inputs,
Sales & inventory data
MY CONTRIBUTION
Defined the framework logic i.e. what to check, in what order, and why. Designed the safeguards
and translated business intuition into an auditable,
stakeholder-trusted system.
The team's ask
As dark store assortments expanded, a long tail of low-performing SKUs began consuming limited shelf space, increasing replenishment and picking complexity, and in some cases driving disposal losses. The business needed a scalable way to decide which SKUs should remain active, which needed intervention, and which could be delisted.
How might we reduce assortment inefficiency in dark stores without accidentally delisting SKUs that are new, under-discovered, or strategically important?

Low performance has many causes —
not all of them mean "delist"
Delisting looks straightforward from the outside. But it's easy to remove the wrong SKU. The real challenge is separating structurally weak demand from demand that's being temporarily suppressed.

What we were trying to solve?
Dark stores operate under hard space constraints. Every weak SKU displaces something faster or more profitable. An oversized assortment tail compounds this: more replenishment complexity, lower shelf productivity, higher disposal risk.
The business problem was not just too many SKUs. It was the lack of a reliable, explainable way to decide which products were genuinely worth retaining.

Goal
Build an explainable delisting framework that could identify structurally weak SKUs, protect
healthy ones early, avoid penalizing suppressed demand, and recommend the right action instead of forcing a binary keep-or-remove decision.

Non-goals
• Not a black-box ML score
• Not a replacement for category judgment on special cases
• Not intended to redesign store assortment from scratch
• Not a full assortment optimization engine in V1
Design principles that guided the framework
Deliberately designed the framework as an explainable funnel rather than a single composite score. That made it easier to reason about, easier to validate, and easier for business teams to trust.

The data signals that power each decision
The most important design decision was separating demand suppression signals from demand signals. A SKU with low sales but poor availability isn't weak but it's constrained. Treating these as distinct categories is what prevents the framework from penalizing fixable problems. For example, availability below 60% was treated as a suppression signal, not a performance signal.




The 9- Step Delisting Funnel
Every SKU enters at the top and is evaluated sequentially. At each step, a SKU either exits with a clear recommendation or moves to the next check. Only SKUs that pass through all 9 gates are recommended for delisting.

Recommend Delist
SKU has failed all 9 checks.
Only SKUs that pass through every gate reach this point.
Disposal + Inventory Cost Override Logic
Perishable or short shelf-life SKUs needed separate treatment. Some SKUs were not just weak - they were actively margin-destructive because expected sell-through did not justify the disposal risk.
This override catches cases where disposal risk is orthogonal to demand signals. A SKU can have decent conversion but still lose money if its shelf life doesn't match its sales velocity.

Guardrail + Edge Case Protection

Three outcomes, each with a clear action



Watchlist Sub Recommendations -
New SKU
Increase Availability
Increase discoverability
Decrease prices
Improve forecasting
High repeat purchase
Prevent subtype wipeout
Example SKU walkthroughs -



*SKU names are illustrative. Signals and outcomes are based on real framework outputs
In most watchlist cases, a single fixable constraint was the difference between recovery and removal.
What the framework found
12,400+
SKUs Evaluated
62%
recommended Active
23%
moved to Watchlist
15%
recommended Delist

Freed shelf space was reallocated to new SKU trials, some of which graduated to high performers within the review period.

Data shown is illustrative and represents relative proportions,
not actual figures.
What the framework found
The framework ran monthly on the 28th of each cycle. Outputs were automatically distributed to category managers via emailers, with each manager receiving their category's watchlist and delist recommendations alongside the reasoning for each flag.

What I'd build next
V1 was deliberately kept explainable and rule-based so category managers could trust and override it. The next versions go deeper — moving from flagging weak SKUs to actively optimizing what should replace them.



SNIGDHA NAGPAL
Built at Noon · 2025