All posts
Industries2026-04-23

Managing the DIY long tail: slow movers and project baskets

In DIY retail, cutting a slow-moving SKU can lose the whole project basket. Velocity per SKU is the wrong lens for a long-tail catalogue.

Kevin Didelot11 min read

A DIY or home-improvement retailer does not sell products. It sells the ability to finish a project — a bathroom retiled, a deck rebuilt, a leak fixed on a Saturday afternoon. That distinction looks academic until you look at the catalogue. A general merchandiser runs a few thousand SKUs where the top decile drives most of the revenue. A home-improvement chain runs fifty to a hundred thousand SKUs, and a large fraction of them sell only a handful of units per store per year.

Those slow movers are not noise to be cleaned out. One obscure compression fitting, one non-standard fastener size, one discontinued-format seal — each barely registers in a velocity report. Yet each is the part without which a customer cannot complete the job they walked in for. Cut it, and you do not lose a few units of annual sales. You lose the project, and very often the customer who was building it.

This is why standard SKU rationalization, the kind that works cleanly in apparel or grocery, breaks in DIY. The long tail here is not a margin drag to be trimmed. It is the structural promise of the category — and the defining decision problem of the business.

The project-completeness trap (cutting a slow mover can lose the whole basket)

Every assortment review eventually produces the same list: SKUs that haven't moved in months, tie up working capital, and occupy shelf space a faster mover could use. The instinct is correct in most retail. In DIY it is a trap.

The reason is that a DIY basket is project-shaped, not item-shaped. A customer retiling a bathroom does not buy tile. They buy tile, adhesive, spacers, grout, a trowel, sealant, edge trim, and the one fitting that matches their existing plumbing. Eight or ten adjacent SKUs, pulled by a single intent.

If the obscure fitting is out of stock or delisted, the customer does not buy nine items and skip the tenth. They abandon the project at your store and rebuild the entire basket somewhere that has all ten.

So the true cost of cutting a slow mover is not its own lost revenue. It is the conditional revenue of every basket that SKU completes. A part that sells twelve units a year, looked at alone, is an obvious cut. Looked at as the keystone of forty project baskets averaging several hundred euros each, it is one of the most valuable references in the store. The velocity report cannot see this, because the cost lands on other SKUs — the ones that sold fine, in baskets that never formed.

This is the inversion that makes DIY distinct. The damage from a wrong cut is invisible in the data the cut was based on. It shows up downstream, diffused across a basket that simply never appeared, attributed to nothing. By the time a falling capture rate on project categories becomes visible, the rationalization that caused it is months in the past and no longer suspected.

Large-format allocation across uneven catchments

Layer a second structural feature on top: the very large-format store. A home-improvement big-box carries tens of thousands of SKUs across thousands of square metres, and the chain operates dozens or hundreds of them across radically different catchment areas.

A store on the edge of a city with a dense ring of older houses sells a completely different long tail than one in a new-build suburb. The same obscure plumbing part is a weekly staple in one catchment and dead stock in another. Older housing stock pulls legacy fittings, repair parts, adaptation pieces. New-build areas pull standardized, current-generation references and bulk project volumes. The seasonal calendar shifts too — decking and outdoor categories peak weeks apart between a coastal store and an inland one.

This turns allocation into a problem that the apparel playbook does not cover, even though both are heterogeneous-network problems. We have written before about how initial allocation sets the box every later decision lives in. In DIY the heterogeneity is sharper still. The question is not only how much a store should receive. It is which slice of the fifty-thousand-SKU tail is live demand in that specific catchment, and which slice is shelf-clogging carryover.

Allocate the tail uniformly and you guarantee two failures at once. You stock out of locally critical parts in the catchments that need them — breaking project completeness exactly where demand was real. And you bury cash in parts that the other catchments will never pull, where they sit until they are written down. Both failures are catchment-specific, and both are invisible to a national velocity view that averages the two stores into a single mediocre number.

Why per-SKU velocity is the wrong lens (cross-SKU project dependency)

Almost every assortment and stock tool in DIY ranks references by their own throughput: units sold, turns, gross margin, weeks of cover. Each metric reads one SKU in isolation. That is precisely the lens that cannot see a long tail held together by project dependency.

The signal that actually matters is cross-SKU. Which references co-occur in baskets, which low-velocity parts are keystones that unlock high-value baskets, and which are genuinely dead with no completion role. Two SKUs with identical velocity can have opposite economic value. One is a redundant variant nobody misses when it's gone. The other is the single part that completes a recurring project, and removing it quietly collapses a whole basket pattern.

You cannot recover this from a velocity ranking, because velocity is the wrong unit of analysis. The right unit is the project-basket graph — the network of which SKUs pull which other SKUs, weighted by basket value and conditioned on the local catchment. A keep/cut decision is a question about that graph, not about a single node on it. This is the same shift from item to decision we describe in our work on the retail decision layer. The object you optimise is the decision and its consequences, not the metric of one record.

It also reframes liquidation. The classic weak signals that a product should be cut — falling velocity, ageing stock, thin margin — still matter. But in DIY they must be read through completion role. A slow, ageing, thin-margin SKU that completes no basket is a clean cut. The same profile on a project keystone is a trap dressed as an easy win.

What a decision layer does for the long tail

Making these calls by hand across fifty thousand SKUs and a hundred uneven catchments is not feasible. Category managers know the trap exists, so they hedge — keeping more of the tail than the velocity report justifies, just in case. That hedge is rational, and it is expensive. It funds itself in working capital and shelf space rather than in lost baskets, which is the lesser of two invisibilities but invisible all the same.

A decision layer changes the unit of work from the SKU to the decision about the SKU. Concretely, for the DIY long tail, it has to do four things a stock report does not.

  • Model cross-SKU project dependency. Build the basket graph from POS and e-commerce co-occurrence, so every keep/cut/allocate call carries the conditional value of the baskets that reference completes — not just its standalone velocity.
  • Resolve demand per store, not per chain. Estimate which slice of the tail is live demand in each catchment, so the same part is stocked where older housing pulls it and delisted where it only ages.
  • Price the wrong cut in lost-basket terms. Surface the expected basket value at risk from a delisting, so the trade-off between freed cash and broken completeness is an explicit number, not a gut hedge.
  • Push the call into execution. A keep/cut/allocate decision is worth nothing trapped in a dashboard — it has to propagate into the assortment, replenishment, and allocation systems that act on it, the way we describe in the orchestration layer.

This is exactly the layer Solya is built to be. Not a forecasting model that scores SKUs, and not another report that ranks them by turns. A decision and execution platform that models the project-basket graph, conditions it on per-store catchment demand, and turns the long-tail trade-off into a defensible keep/cut/allocate decision at catalogue scale. The category manager keeps the judgement calls — the strategic ranges, the supplier negotiations, the project narratives. They stop hedging an invisible risk by hand across fifty thousand references.

The real question to ask

If you run assortment or supply chain for a DIY network, ask one thing about your last rationalization pass. When you cut the bottom of the tail, did you measure what happened to project capture rate — or only to the line items you removed?

If you only watched the cut SKUs disappear cleanly from the cost base, you measured the visible half and missed the one that matters. The lost baskets do not announce themselves. They walk out the door, fully assembled, into a store that kept the one part you let go.


Is your long tail working for you or against you?

At Solya, we offer category management and supply chain leaders a 30-minute diagnostic on your own catalogue. We look at where slow-mover decisions are quietly costing you project baskets, and where uneven catchments are stranding the tail in the wrong stores.

You'll walk away with:

  • A read on which slow movers are project keystones versus genuine dead stock
  • An estimate of the project-basket value currently exposed to over-aggressive cuts
  • The first catchments where per-store tail allocation would recover margin within a season
Kevin DidelotCo-founder & CTO, Solya

Co-founder & CTO of Solya.

Related articles