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