Ship from store when the alternative is a markdown in eight weeks

A method for deciding which stores and which items should fulfil online orders, scored on markdown avoided and picking labour consumed rather than on the parcel miles saved.

Omnichannel5 November 20269 min read
In short

Four numbers move when a store ships an online order: the parcel cost difference, the pick and pack labour, the store sale you may have consumed, and the markdown you may have avoided. Only the first two appear in most business cases, and they are the two smallest. On a slow seasonal line the expected markdown avoided runs to double digits per unit against an incremental fulfilment cost of about three, and on a core replenished line the same arithmetic says leave it alone. Store record accuracy sets which nodes can be exposed at all, and the reserve that protects against a phantom unit should be sized from each store's own count variance rather than set flat across the estate.

A customer in Leeds orders a lambswool jumper at 21:40 on a Tuesday. The distribution centre shows zero. Six of them are folded on a table in a store that has sold one in the last eight weeks, and that store will mark them down by forty per cent in early January because that is what happens to jumpers in early January. The order gets cancelled at 06:00 the next morning by a batch job, and nobody connects the two events.

Most ship-from-store programmes start from that story and then get implemented as a network-wide switch. Every store becomes a fulfilment node, the routing rules pick whichever node is nearest the delivery address, and the business case is written on parcel cost and delivery speed. Those are real benefits and they are the two smallest numbers in the calculation. The money is in which units get consumed and what those units would otherwise have been worth.

The four numbers that move when a store ships the order

Work one order line at a time and there are four quantities that change, two of which are usually missing from the model.

The parcel cost difference. Shipping from a store that is two zones closer than the DC saves something real, often one to three units of currency on a small parcel. It can also go the other way, because stores hand parcels to a carrier on a retail rate card rather than the DC's negotiated one, and the difference sometimes swamps the zone saving.

Pick and pack labour. A colleague walks the floor, finds the item, packs it, prints a label and stages it. Four minutes is a reasonable figure for a single-line order in a store that has done this before, and the first month is much worse.

The store sale you consumed. If that unit would have sold in the store before its next replenishment, shipping it away moves the sale rather than creating one, and what you lose is the chance of a second sale with the gross margin attached to it.

The markdown you avoided. If that unit would not have sold before the season ended, its realistic value is the terminal clearance price. Shipping it at full price at the end of November converts a unit that was heading for a forty per cent cut into a full margin sale.

The first two are costs, the last two are opportunity terms with opposite signs, and which one dominates is decided entirely by how the item is selling in that store. Any rule that treats stores as generic proximity nodes gets both opportunity terms wrong at once.

The arithmetic on a slow seasonal line

Take the jumper. Retail 60, cost 24, so gross margin 36. Store parcel cost 6.20 against a DC cost of 4.10 for the same delivery address. Pick and pack at four minutes on a fully loaded hourly rate of 14 gives 0.93. Incremental fulfilment cost is therefore 2.10 plus 0.93, call it 3.03.

Now the opportunity side. The store has six units and has sold one in eight weeks. Ten weeks of season remain, so on that run rate roughly one and a quarter more will sell at full price, and the rest will not. The probability that this particular unit is one of the survivors is high, in the region of 0.75. Last season the same category cleared at forty per cent off, which on a 60 retail is a 24 reduction in realised revenue.

Expected markdown avoided is 0.75 multiplied by 24, which is 18. Against an incremental cost of 3.03, the decision is not close. You would take that trade even if your parcel estimate were wrong by a factor of two.

The point of writing it out is that the winning term comes from merchandising rather than from logistics. It lives in the markdown history and the store-item sell-through rate, and neither of those is in the transport management system where the ship-from-store rules usually get configured.

The same arithmetic says no on your best sellers

Run the identical calculation on a core replenished line and it reverses. A basic white tee, retail 12, gross margin 7. The store holds nine, sells about eleven a week, and its next delivery is Thursday. The probability that this unit sells in the store before replenishment arrives is close to 0.9, and the item never gets marked down because it carries over.

Expected cost of consuming the unit is 0.9 multiplied by 7, which is 6.30, plus the pick labour, against a parcel saving of maybe 1.50. Shipping it from the store destroys about five units of margin per order, and because the item is high volume, the routing engine will do it hundreds of times a week.

There is a second-order effect on the same item that makes it worse. Store replenishment is usually driven by the store's own depletion, so consuming units for online orders pulls the next delivery forward and increases case handling. Some retailers see their fastest lines cycling through stores faster after ship-from-store goes live and read it as demand growth.

The rule that falls out of these two examples is simple to state and awkward to implement. Expose the units that are unlikely to sell where they are standing, and protect the units that will. That means a per-item, per-store eligibility decision refreshed at least weekly, driven by remaining sell-through against remaining season, rather than a flag on the store master.

Record accuracy decides which stores you can expose at all

The unit you promised has to be there. DeHoratius and Raman, in Management Science in 2008, audited roughly 370,000 inventory records across 37 stores at a retailer and found about 65 per cent of them did not match the physical count. That figure gets quoted loosely, so the useful part is the structure they found underneath it: inaccuracy was systematic by store and by item characteristics rather than randomly sprinkled, and it grew with the time since the last count. Kang and Gershwin, in IIE Transactions in 2005, showed how small persistent stock loss produces long invisible stockouts because the system keeps believing it has cover.

For ship-from-store the consequence is a cancellation, which sits in a different cost class entirely. You lose the order rather than a margin point, you pay a customer service contact, and on a marketplace channel you take a defect rate penalty that can affect your ability to sell at all.

The usual protection is a reserve: hold back two units at every store and only expose the rest. A flat reserve is the wrong shape, because the variance it is protecting against differs by an order of magnitude between a well-counted store and a badly counted one. Size it from the store's own audited discrepancy instead. If a store's count discrepancy on a category has a standard deviation of 1.8 units, a reserve of two units leaves a meaningful chance the exposed unit is missing, while three units gets you to roughly the ninety-fifth percentile. In a store where the discrepancy standard deviation is 0.4, a flat reserve of two is quietly hiding most of the useful inventory on low-count items.

That calibration needs count data you may not have. Cycle counting the categories you intend to expose, for eight weeks before go-live, produces both the reserve parameters and an honest list of stores that should not be nodes yet.

Picking capacity has a shape, and it collides with footfall

A store's fulfilment capacity is a labour number, and it is small. One colleague on a ninety minute picking window at four minutes a line handles about 22 lines a day. Two hundred stores at that rate is a real network, and any single store that receives forty orders because it happened to be nearest to a demand cluster will miss its cutoff.

The collision is worse than the daily average suggests, because online order arrival peaks in the evening and store labour peaks against footfall in the middle of the day. The pick window that is cheapest for the store is the one before opening, which is the window furthest from the order arrival time and therefore the one that puts most pressure on the promise.

Bayram and Cesaret, in the European Journal of Operational Research in 2021, studied ship-from-store fulfilment policies with capacity and holding constraints and found that good policies take a threshold form: accept store fulfilment while the store's position is above a state-dependent level and hand the order elsewhere below it. That structure is worth knowing because it tells you the control you need is a dynamic threshold per store per day, rather than a static on and off switch, and a threshold is something a rules engine can carry.

Scoring stores instead of switching them on

Put the four terms into one expected value per candidate store-item-order and rank the candidates. Expected net benefit equals markdown avoided, minus the probability the store sells it multiplied by gross margin, minus the parcel difference, minus the pick labour, with the whole thing set to minus infinity when the exposed quantity is below the store's calibrated reserve.

Then apply the capacity constraint across the day, which turns node selection into a capacitated assignment rather than a per-order lookup. This is ordinary capacitated facility location machinery applied at a daily horizon, and the reason it matters is that the best node for one order depends on how many other orders that node has already absorbed.

Test it by replay rather than by pilot. Take ninety days of actual online order lines, the store on-hand positions as they stood at the time, and the markdown history for the items involved, then run the candidate rule against the rule you have. Replay gives you the same orders under both policies, which a store pilot never does, because the pilot stores differ from the control stores in exactly the ways that drive the result.

Where this stops

The markdown term is a forecast, and it is the largest term in the model. On carryover basics there is no terminal markdown, so the whole argument collapses to a parcel and labour comparison that usually says no. On fashion lines the terminal discount depth varies by season and by how the buy landed, so a number taken from last year's clearance can be several points out. Sizing the term from a distribution of historical clearance depths, and looking at what happens at the pessimistic end, is more honest than using a point estimate.

Small stores are the harder case. An item selling one unit every three weeks in a given store gives you almost nothing to estimate a sell-through probability from, and the natural fix is to pool to a class of similar items in a cluster of similar stores. Pooling is a modelling choice that will be wrong for the item that behaves differently in that one store, which is often the local line somebody added for a reason.

The failure that gets blamed on the model is usually organisational. The store carries the labour cost and the fulfilment centre's budget collects the parcel saving, so unless the transfer is priced into the store P&L, compliance drops after the launch enthusiasm fades. Pick rates slip, cancellations rise, and the effect looks like a modelling problem for about two quarters.

Master data breaks the parcel term quietly. If item weights and cartonisation dimensions are wrong, the store shipping cost estimate is wrong in the same direction every time, and the ranking inherits the error.

Pull the last ninety days of online order lines your DC could not fill, join each one to the store on-hand positions as they stood that night, and count how many of those units were sitting in a store that later cleared them at a discount.

More on this in omnichannel on the DemandLabs platform.

See DemandLabs on Your Own Data

A 45-minute walkthrough with a solution architect.