The margin was on the shelf label. The cost was everywhere else.
In short. A supermarket chain read profitability from gross margin by category, which ignores what each category costs to move, store, handle and promote. A TDABC cost-to-serve model attributed those costs to categories and customer segments, and showed that promotional mechanics were consuming margin the gross number never revealed.
Published with the client's consent, identity withheld · TDABC
THE ENGAGEMENT
Scoping
Category reviews and promo evaluation framed as cost objects: categories, SKU classes, segments.
Data intake
WMS, transport, till and promo systems. Nothing new installed.
Model build
Pools along the chain, capacity cost rates, time equations per category and SKU class. CONFIRM: duration
Handover
The category view updates on the chain's normal reporting rhythm. CONFIRM: cadence
Thin margins, thick activity.
Between the supplier's truck and the customer's basket sits a chain of work: receiving, warehousing, picking, transport to store, shelf replenishment, markdowns, shrink, checkout and the administrative machinery of promotions.
The client, a supermarket chain with CONFIRM: number of stores, measured category performance on gross margin. By that measure, most categories looked acceptable. But gross margin treats a case of bottled water and a case of chilled ready meals as if they cost the same to handle. They do not, and the difference is the profit.
Promotions sharpened the problem. Every campaign had a planned funding line and a redemption forecast. None had a cost-to-serve line: the extra handling, the demand spikes, the residual stock, the price-system work. Whether a promotion created profit or merely moved volume was, honestly, unknown.
How do you attribute store and supply chain cost to a category?
With time equations built on drivers retail already records: cases, units, deliveries, facings, temperature regime, promo events.
Cost pools along the chain
Warehouse receiving and picking, outbound transport, backroom handling, shelf replenishment, checkout, markdown and shrink management, promo administration. Each pool with its practical capacity: labour hours, truck capacity, chilled space.
Capacity cost rates
Cost of capacity supplied divided by practical capacity, pool by pool. Chilled logistics carries its own rate; ambient its own. A minute of replenishment in the chilled aisle is not a minute in dry goods.
Time equations per category and SKU class
Handling minutes as a function of case size, sell-through speed, shelf-ready packaging or not, temperature regime, and promotional status. Promo lines received their own equation terms: additional receiving, display build, price changes, returns of residual stock.
Customer and segment lens
Basket data allowed the same cost-to-serve logic to roll up to customer segments: basket size, visit frequency and promo participation shape how much work a euro of revenue creates. CONFIRM: loyalty-card segmentation in scope for publication?
All of it from data the chain already had: WMS, transport, till and promo systems.
WHERE CATEGORY COST REALLY SITS
Gross margin and true margin ranked categories differently.
The ranking moved. Heavy, slow, chilled or high-shrink categories fell; light, fast, shelf-ready categories rose. CONFIRM: number of categories modelled and how many changed quartile
Promotions were the largest single blind spot. Once the extra handling and residual stock carried their true cost, a material share of promo events destroyed margin even when they hit their volume targets. CONFIRM: share of modelled promo events found unprofitable at full cost
Small-basket, high-frequency promo shoppers were the retail whale tail. The segment view showed the familiar curve: a minority of customer segments generating well over 100% of profit, cherry-picking behaviour giving part of it back. CONFIRM: peak of the segment whale curve as % of total profit
A promotion is a price decision that arrives with an operations bill attached.
PROMO P&L, BEFORE AND AFTER COST-TO-SERVE
Less debate about allocations, more decisions about mechanics.
Rebuilt the promo evaluation template
Every proposed event now carries a cost-to-serve line next to the funding line. Some mechanics were retired; others renegotiated with suppliers who fund them.
Adjusted range and shelf decisions
Shelf-ready packaging and case-size conversations with suppliers, grounded in handling minutes rather than instinct.
Priced the chill chain honestly
Chilled and frozen categories now carry their own logistics cost in category reviews.
Kept the model refreshing
The category view updates on the chain's normal reporting rhythm. CONFIRM: refresh cadence
Category reviews changed character.
The first full review cycle on the model produced CONFIRM: client-approved outcome, e.g. promo portfolio margin effect or number of mechanics retired.
Gross margin tells you what you bought well. Cost-to-serve tells you what you sold well.
Fair questions.
- Do we need item-level data for this?
- Category and SKU-class level is enough to start, and it is what most chains can extract in week one. Item-level refinement can follow where decisions need it, typically in promo evaluation.
- Is this the same as DPP, direct product profitability?
- Same ambition, better machinery. DPP models of the 1990s died under maintenance weight. TDABC time equations achieve the attribution with far fewer parameters, on data the systems already produce, so the model survives contact with the next range review.
- Will this tell us to stop promotions?
- No. It tells you which mechanics create margin and which merely create work. Most clients end up promoting differently, not less.
- How does customer segment profitability connect to this?
- The same activity costs roll up two ways: by category and by basket. Segments that buy small, often, and mostly on promotion consume disproportionate work per euro of revenue. Seeing both views on one model is the point.
What would your promo calendar look like at full cost?
A 30-minute scoping call with a senior partner, using your own category list as the agenda.