Lessons · Lesson 3 of 3
Nine weeks later, and nobody made a mistake
Close the phase: the attribution error that starves the shops doing the fulfilling, the residue the router left in the best shops, and the four defensible decisions that produced a bad season together.
Lesson 3 of 3 · 36 min
The reckoning
A shop assistant packs a parcel for an online customer. The garment leaves that shop's shelf, and the sale is recorded against the website. Nothing about that is wrong, because it really was an online sale. But the shop's sales figure no longer describes how much stock the building got through. And next season's delivery to that shop is worked out from exactly that figure.
Sunday 7 June 2026 closed week 9, and the phase with it. All 9,600 pairs of CRV-4120 mid indigo are gone. Here is where they went.
| Route to the customer | Units | Recorded as |
|---|---|---|
| Bought in a shop by a customer who walked in | 6,120 | a sale at that shop |
| Bought online, picked and posted from Hartswood | 2,898 | an online sale |
| Bought online, picked and posted from a shop | 582 | an online sale |
| Total | 9,600 |
Every figure in this course is net of returns. Corvedale's online return rate on denim is much higher than its in-store rate, as it is at every clothing retailer that sells trousers on a website. A size curve or a rate of sale built from gross sales is wrong by exactly that difference. Course 18.5 owns returns. Here it is enough to say the figures above are net, and to say it once, loudly, because half the omnichannel arithmetic that goes wrong goes wrong on that word.
The channel split is correctly recorded. An online sale is an online sale wherever the parcel came from, and Corvedale's profit and loss account, its channel reporting and its VAT are all right. Nothing in that table is an error.
What the shop's report says, and what the shop actually did
Wenlock Gate is Corvedale's largest shop. Its report for the phase says it sold 214 pairs of CRV-4120.
Wenlock Gate also picked, packed and posted 61 pairs for online customers. Those 61 pairs came off its rails, out of its stockroom, in its sizes, using its colleagues' hours. They are not in its 214.
So 275 pairs left that shop, and 214 were recorded against it. The shop's own record understates what its stock actually did by 22.2%.
Now ask what that number is used for.
Corvedale allocates next season's denim to shops on each shop's rate of sale in the same phase last year, which is exactly the recorded figure. The ten grade-A shops recorded 2,180 pairs between them, out of the 6,120 recorded across all 62 shops — 35.62%. Those same ten shops picked 431 of the 582 store-fulfilled pairs, because the router sent the work to the shops nearest the customers. What actually left them was 2,611 of the 6,702 pairs that left shops at all — 38.96%.
| Grade-A share | Pairs allocated to the ten grade-A shops | |
|---|---|---|
| On recorded shop sales | 35.62% | 2,636 |
| On what actually left the shops | 38.96% | 2,883 |
| Difference | 247 pairs short |
Two hundred and forty-seven pairs, 8.6%, taken off the ten shops that sell fastest and given to shops that sell more slowly. And it is done by an allocation rule doing exactly what it was designed to do, with the only data it was given.
The fix is not complicated and it is not a project. The allocation input needs to be units that left the shop, not units sold and credited to the shop. Both figures already exist in the order-management system, because it has to know which node picked each line in order to send the pick there. It is a matter of joining two reports, not of collecting new data. What makes it hard is that the two figures live in different reports owned by different people, and neither owner has ever been asked a question that needs both.
The residue the router left behind
The other half of the bill is on the rails.
At the close of week 9 the ten grade-A shops held 418 pairs of CRV-4120 between them. Twelve of those 418 were size 12 or size 14 — the two sizes that are 40% of Corvedale's denim demand. Those shops ran out of the middle of the size run in week 7, and traded the last three weeks of the phase on end sizes: 6s, 8s, 16s and 18s, on a wall that looked full.
All 418 went to clearance at GBP 29.50. Against the full price of GBP 59.00, that residue cost GBP 12,331.00 in markdown.
How much of that is the router's fault? Some of it, and Corvedale cannot say how much, and it should say so rather than pick a number. The honest position is this. The 389 pairs pulled across the phase from shops that would have sold them did not lose Corvedale the sale. That revenue arrived, online, at full price, which is what the −GBP 3.70 in lesson 2 already accounts for. What the pulls did was empty the middle of the size run in the best shops earlier than it would otherwise have emptied. A shop with no 12 and no 14 sells fewer 10s and 16s than a shop with a complete size run.
That last claim is the one Corvedale cannot price. It would need a controlled comparison — shops matched on grade and catchment area, some routed on cover and some on distance — and Corvedale has never run one. Naming a mechanism you cannot measure, and refusing to attach a figure to it, is not weakness. Attaching one anyway is how a plausible number becomes next year's assumption.
The season, in one table
| Units | Price | Value | |
|---|---|---|---|
| Sold at full price | 6,980 | GBP 59.00 | GBP 411,820.00 |
| Sold at the first markdown, 20% off | 1,740 | GBP 47.20 | GBP 82,128.00 |
| Cleared at 50% off | 880 | GBP 29.50 | GBP 25,960.00 |
| Net sales | 9,600 | GBP 519,908.00 | |
| Cost of goods, 9,600 at GBP 22.42 | GBP 215,232.00 | ||
| Gross margin | GBP 304,676.00 |
Check it with a calculator, because the relationship between the last two lines is the one everybody quotes and few people work out.
Intake margin was 62.0%. At full price on every pair the style would have taken GBP 566,400.00 and returned exactly 62.0%, because that is what intake margin means. It returned GBP 304,676.00 on GBP 519,908.00, which is an achieved margin of 58.60% — the margin actually earned, and 3.40 points below intake.
The markdown taken was GBP 566,400.00 less GBP 519,908.00, or GBP 46,492.00: 8.94% of net sales. Notice that a markdown worth 8.94% of sales costs 3.40 points of margin rather than 8.94. The reason is that the cost of goods does not move when the price ticket does. The pairs still cost GBP 22.42. Full-price sell-through for the phase was 72.71%.
Four decisions, each defensible
Nothing above required anybody to be careless. Here is the whole season as decisions, with the person who made each one and the case they would make for it.
- Sasha bought 9,600 pairs on the measured size curve. The curve came from Corvedale's own denim sales. It was also built from seasons where the 12s ran out early, so it understates 12s — the measurement was cut short, and the buy inherits that. Defensible: it is the best curve she had.
- Owen set an exposure buffer of two units. It cut pick failures from 7.4% to 2.1% and saved GBP 4,141.20 across the department. Defensible: it paid for itself several times over. It also treats a broken stock count as a permanent feature of the estate rather than something to repair.
- The router ranked candidate shops by distance. Cheapest carriage, fastest promise, fewest missed collections. Defensible on every measure it was asked about — and it sent two pulls in three to a shop that was going to sell the pair anyway, at −GBP 3.70 each.
- Nadia allocated next season on recorded shop sales. That is the standard input, and the only one her report contains. Defensible: nobody has ever handed her the other figure.
Add them up and the phase produced 418 pairs of broken-size-run residue in the best ten shops. On that residue there was GBP 12,331.00 of clearance, and GBP 28,157.00 of routing value left on the table across the denim department. It also produced a next-season allocation that takes 247 pairs away from the ten shops that sell denim fastest.
The general shape
Omnichannel does not add a channel. It makes every unit visible to every channel, and in doing so it takes three things that used to be one number and separates them:
- what is owned, which is an accounting figure and is nobody's operating answer;
- what can be promised, which is owned stock minus everything committed, in motion, unknown or deliberately held back;
- what can be sold, which is limited by the scarcest size in the mix customers arrive in, at the node they arrive at.
Every failure in this course lives in the gap between two of those three. And every one of them was invisible in the reporting, because the reports were built when the three numbers were one.
Check yourselfYour ship-from-store programme reports rising fulfilment volumes and a falling cancellation rate every quarter, and your best shops' like-for-like sales are drifting down. Somebody proposes closing two of them. What do you check first?Show the answer
Whether those shops' recorded sales include the units they picked for online customers. If the router sends work to the shops nearest the customers, the best shops are fulfilling the most, and every pair they pick and post leaves their stock but is recorded against another channel. Ask for units that left the shop beside units sold at the shop for the same period. At Wenlock Gate that was 275 against 214, an understatement of 22.2%. A like-for-like line drifting down while the stock leaving is flat is not a shop losing customers. It is a shop being read wrongly. Closing it removes both the sales and the fulfilment capacity that made the online numbers look good.
Prompt · Find out whether my best shops are being read wrongly
Before a store-closure decision, or before next season's allocation is signed off on last season's rate of sale.
Act as a retail planner auditing an allocation input. I think my allocation may be reading a channel figure as a shop figure. My inputs: department [DEPARTMENT], period [PERIOD], estate [NUMBER] shops with grades [PASTE THE GRADE BANDS AND SHOP COUNTS], and for each shop: units sold at the shop as recorded [PASTE], units the shop picked and packed for online customers [PASTE OR SAY NOT AVAILABLE], and units received [PASTE]. Next season's store allocation is [UNITS] and the rule is proportional to recorded rate of sale in the same period last year. Do the following. First, for every shop, put recorded sales beside what actually left the shop, which is recorded sales plus units the shop fulfilled for other channels, and give me the understatement as a percentage. Second, work out next season's allocation both ways and give me the difference in units per grade band, naming the shops that lose most. Third, describe the loop this creates in five steps and say at which step it starts confirming itself. Fourth, tell me exactly which field in an order-management system already carries the answer, and why this is a join between two reports rather than a data-collection project. Fifth, if I told you the picked-for-online figure is not available, tell me what to ask for and from whom, and what I must not conclude in the meantime. Do not recommend closing a shop on recorded sales alone. If any shop's like-for-like sales are falling while the stock leaving it is flat, say so in the first line.
AI can make mistakes — check anything you act on.