Interactive controls are loading. Phone and email links are available.

Skip to main content
The decision that happens between checkout and the pick slip

Order Routing and Fulfilment Logic

The moment an order is paid for, something has to decide where it ships from. With one warehouse that decision is trivial. With a warehouse, eleven stores and a 3PL holding your bulky lines, it is the single piece of logic that determines your freight bill, your delivery times, how much your store staff resent online orders, and how often a customer gets an apology instead of a parcel.

Most businesses inherit this logic from a platform default and never revisit it. This page is about designing it deliberately: which location wins and why, when to split an order and when to hold it, how to stop one store absorbing every order, what happens when a store says it cannot find the item, and how to tell from the data whether your rules are actually helping.

What the Routing Decision Actually Controls

Every parcel
Freight cost starts here
Distance and carton count are decided before the carrier is ever chosen
Split or whole
One order, one or many cartons
Splitting satisfies the customer faster and costs more to ship
Store capacity
The limit nobody sets
An unbounded queue at one store is how ship from store gets abandoned
Rejection rate
The honest measure of stock accuracy
Every rejection is a reroute, a delay and usually a discount

Four Reasons Default Routing Costs You Money

Platform defaults are built to be safe and generic. Your network is neither, and the gap between the two shows up in freight, in labour and in cancellations.

Nearest is not the same as cheapest or fastest

Routing to the closest location by straight line distance sounds obviously right and frequently is not. A metropolitan store two hundred kilometres away on a daily carrier run will often reach the customer sooner and cheaper than a regional store that is closer but gets one pickup a day at 2pm. Real routing weighs carrier coverage, service levels available from that postcode, cut off times and actual transit lanes, not map distance. In Australia this matters more than in dense markets, because the difference between a capital city lane and a regional one is measured in days rather than hours.

Splitting is a commercial decision, not a technical one

When no single location holds the whole order, you can split it across two locations and ship two parcels, or hold the order until one location can fulfil it completely, or backorder the missing line and ship the rest. Each option trades freight cost against delivery speed against customer experience, and the right answer differs by order value, by product category and by how patient that customer segment is. Hard coding one behaviour for every order is how businesses end up paying two freight charges on a thirty dollar order, or making a customer wait nine days for an item that was in a store down the road.

Stores have a capacity your system does not know about

A store can pick a certain number of online orders per day before it starts affecting customers on the floor, and that number changes with staffing, with trade and with the season. Routing systems that ignore capacity will happily send eighty orders to a store with two people rostered, which produces late dispatch, rejected orders and staff who quietly stop looking. Capacity caps, daily limits and the ability to pause a location for a day are not nice to have features. They are what keeps store fulfilment working past the first busy week.

Rejection is normal and must be designed for

Stock records are never perfect. Items get damaged, misplaced, sold on the floor a minute before the order arrives, or turn out to be the display unit. A routing design that assumes the first location will always fulfil produces an operational dead end when it cannot. What you need is a clean rejection path: staff can decline in seconds with a reason, the order reroutes automatically to the next best location, the customer is told only if the promised date actually changes, and the reason codes accumulate into something you can act on.

Six Parts of a Routing Engine That Works

Routing is not one rule. It is a sequence of filters and a scoring step, followed by the operational handling that makes the decision stick.

Candidate locations

Eligibility filtering

Before anything is scored, rule out locations that cannot fulfil this order at all: insufficient sellable stock after buffers, a location not enabled for this channel or this brand, dangerous goods the store cannot ship, a product restricted in that state, a location closed today, or an order value above what that site is trusted to handle. Getting the filter right means the scoring step only ever considers genuinely viable options, which makes the whole engine far easier to reason about.

The winner

Scoring and location choice

Surviving candidates are scored against weighted factors: expected transit time to the delivery postcode, estimated freight cost, how complete the order can be from that location, current queue depth and remaining capacity, stock cover at that location relative to its own sales, and any commercial preference such as clearing ageing stock or protecting a flagship store. Weights are set by you and are visible, so when a decision looks wrong you can see exactly which factor drove it rather than guessing.

Fulfilment plan

Split and hold rules

When no one location can complete the order, policy decides. Split across two locations when the order value justifies a second freight charge, hold briefly when inbound stock is arriving within the promise window, backorder the outstanding line and dispatch the rest, or route the whole order to the location that can do the most and source the remainder internally. The rule set is usually tiered by order value and category, because a bulky low margin line and a small high value one deserve different answers.

Realistic promises

Capacity and cut offs

Each location carries a daily order cap, an operating calendar including state public holidays, and a dispatch cut off aligned to when its carrier actually collects. Orders arriving after cut off are promised against the next operating day rather than the current one. Locations can be paused or capped down for a day during a sale, a stocktake or a staff shortage, without anyone editing code or disabling the location entirely.

Second chance

Rejection and rerouting

A one tap decline with a reason code, an automatic reroute to the next best candidate, and a rule that escalates to a default location or to customer service after a set number of failed attempts rather than looping. Reason codes feed back into both stock accuracy work and the routing weights, so a location that rejects frequently is scored down until its accuracy improves.

Evidence

Measurement and tuning

Routing decisions are only as good as the feedback on them. Track freight cost per order and per location, time from order to dispatch, rejection rate and reasons by site, split rate and what splitting costs you, and how often the chosen location was genuinely the best available in hindsight. Review the weights against that evidence on a regular cycle, because a rule set tuned for last winter will be wrong by the following peak.

Routing Scenarios, Default Versus Designed

TaskTraditionalRouted DeliberatelyNotes
Order fully available in three placesFirst location in a fixed listScored on freight, transit and capacityThe commonest order type, and where most of the savings quietly sit.
No single location has everythingOrder sits unfulfilledSplit, hold or backorder by policyTier the rule by order value so you are not paying twice to ship a small order.
Store cannot find the itemPhone call, then a refundDeclined with a reason, reroutedReason codes are the input to fixing the underlying stock accuracy problem.
One store gets every orderNoticed when staff complainCapacity caps and queue depth scoringUnbounded queues are the most common reason store fulfilment gets switched off.
Order placed at 4:55pm FridayPromised as if it ships todayPromised against next operating dayCut offs must match when the carrier actually collects, not when the store shuts.
Remote postcode deliveryRouted to nearest storeRouted to the best served laneCarrier coverage from the origin postcode matters more than map distance.
Bulky item plus small accessoryBoth ship from the warehouseSplit by handling requirementBulky freight and parcel freight are different networks with different economics.
Stocktake at a locationLocation disabled, stock vanishesPaused for fulfilment, still visiblePausing and delisting should be separate controls, or availability drops for no reason.

Where Routing Projects Go Wrong

Routing on a stock number you do not trust

Every routing decision rests on the belief that the quantity shown at a location is really there. If your store stock accuracy is poor, sophisticated routing will simply distribute failures more evenly and more confidently. Before investing in routing logic, measure rejection rates by location and find out what accuracy you actually have. Often the right first project is cycle counting and receipting discipline, with conservative buffers on store stock in the meantime, and the routing refinement comes second. We would rather tell you that than build an engine on sand.

Optimising purely for freight cost

Freight is the easiest factor to measure, so it tends to dominate the weights by default. Routed hard on cost alone, orders drift to whichever location is cheapest to ship from regardless of transit time, and delivery performance degrades in a way that shows up months later in repeat purchase rates rather than immediately in a report. Weight transit time and completeness alongside cost, and review the balance against delivery performance and complaint volume rather than against the freight invoice on its own.

No pause control, so locations get disabled instead

When a store is short staffed or counting stock, somebody needs a way to stop orders going there for a day. If the only available control is disabling the location, its stock usually disappears from availability at the same time, which silently removes sellable inventory from the website and costs sales nobody attributes to the decision. Separate the two concepts from the start: a location can be visible and sellable while being temporarily unavailable for fulfilment, with automatic reinstatement so it does not stay off for a month.

Promising delivery dates the routing cannot support

If the website promises next business day metropolitan delivery, the routing has to be capable of choosing a location that can genuinely achieve it, and the cut off shown to the customer must match the real carrier collection time at the origin. Promises that outrun the operation create consumer law exposure as well as complaints, because representations about delivery timeframes are subject to the Australian Consumer Law provisions on misleading conduct. Align the promise with what the engine can actually deliver, and state the basis for it clearly.

Treating click and collect as just another routing case

Collection orders are routed by the customer, not by the engine: the customer chose that store. The logic you need there is different, covering stock validation at that specific location, what happens when the item is not found, whether you offer transfer from another store and how long you hold the order. Trying to force collection through the same scoring path as delivery usually breaks both. Keep them as separate flows that share the same underlying availability data.

Building custom routing when the platform can already do it

Several mainstream commerce platforms and order management systems ship with configurable routing that handles location priority, splitting and basic capacity perfectly adequately. If your network is a warehouse and four stores with similar characteristics, configuring what you already own is very likely the right answer and we will say so. Custom routing earns its cost when the decision genuinely depends on data the platform cannot see, such as live capacity from a workforce system, freight quotes across several carriers, or commercial rules about ageing stock and store performance.

How Yes AI Approaches Routing Work

We measure before we design

A sample of recent orders replayed against your current rules and against proposed ones, showing the difference in freight cost, origin mix and expected transit time. You see the likely impact in figures before committing to a build, and occasionally that analysis shows the current rules are fine.

Rules you can read and change

Weights, caps, cut offs and split policies live in configuration you can inspect and adjust, not buried in code. When a decision surprises you, the record shows which candidates were considered, what each scored and why the winner won.

Built, hosted and monitored by us

The routing layer runs on a managed cloud automation layer we operate, with record level logging on every decision and alerting when rejection rates or dispatch times move outside normal range. Problems reach a named person the same day rather than surfacing in a customer complaint.

A straight answer on build versus configure

If your commerce platform or order management system already does what you need, we will tell you to configure it and help you do that rather than quoting a build. Custom routing is worth it when the decision needs data the platform cannot reach, and not before.

From Default Rules to Deliberate Routing

Five steps. A first tuned rule set running live on a subset of orders is usually four to eight weeks depending on how many locations and systems are involved.

Baseline the current behaviour

Where orders route today, freight cost per origin, dispatch times, rejection rates and split frequency. Established from real order history so the later comparison is meaningful rather than theoretical.

Agree the policy

Which factors matter and in what order, the split and hold rules by value and category, capacity caps per location, cut offs matched to carrier collection, and what happens on rejection. Written in plain language and signed off before any build.

Simulate against history

The proposed rules replayed against past orders to show where each would have routed, what it would have cost and how it would have performed. Weights adjusted at this stage, where changes are free.

Pilot on a slice

Live on one channel, one region or one product group, with rejection and dispatch monitored closely and store staff asked directly whether the volume is workable. Issues surface here at low cost.

Roll out and tune on a cycle

Extended across the network with monitoring, then reviewed on a regular schedule and ahead of peak trading. Routing rules are not set and forget, and the review is where the compounding value is.

FAQ

What is order routing and why does it need designing?

Order routing is the logic that decides which of your locations fulfils each order. If you hold stock in one place it is not a decision at all. Once stock sits in a warehouse, several stores and possibly a third party logistics provider, something has to choose, and that choice sets your freight cost, your delivery time and the workload landing on each site. Most businesses run on a platform default such as a fixed location priority list, which works acceptably at low volume and becomes expensive as volume grows, because it ignores freight lanes, store capacity and whether an order could have been completed from one place instead of two.

Should we route to the nearest location?

Proximity is a useful factor but a poor sole criterion, particularly in Australia. A store that is geographically closer may sit on a worse freight lane, have a much earlier carrier cut off, or be a regional site with a single daily pickup, while a metropolitan location further away reaches the customer sooner and for less. The better approach is to score candidates on expected transit time to the destination postcode and actual freight cost for that lane, alongside how complete the order can be from that location and how much capacity it has left today. Distance then becomes one input rather than the answer.

When should an order be split across locations?

Splitting gets the available items moving immediately at the cost of a second freight charge and a second parcel for the customer to track. As a general approach, tier the decision by order value and category: on higher value orders the extra freight is usually worth the faster delivery, on low value orders it frequently is not and holding briefly or backordering the outstanding line is better. Consider also whether the items belong together, since splitting a set or a matched pair creates its own problems. The important thing is that this is an explicit policy you have chosen rather than whatever the platform does by default.

How do we stop one store being overwhelmed by online orders?

Give each location a daily capacity cap and include remaining capacity in the routing score, so volume spreads as sites fill up rather than piling onto whichever store happens to rank first. Add the ability to pause a location for a day or reduce its cap temporarily, for stocktakes, sales and staff shortages, with automatic reinstatement. Crucially, keep pausing fulfilment separate from disabling the location, because disabling usually removes that stock from what the website can sell. Store fulfilment programmes fail far more often from unmanaged workload than from technical problems.

What should happen when a store cannot find an item it is supposed to have?

Make declining fast and blameless, with a short list of reason codes such as damaged, sold on floor, cannot locate or display unit only. The order should then reroute automatically to the next best candidate, with the customer notified only if the promised delivery date actually changes. Cap the number of reroute attempts so an order cannot loop, escalating to a default fulfilment location or to a person after the second or third failure. Then use the accumulated reason codes properly: persistent cannot locate results point at a stock accuracy problem, and the location should be scored down until it improves.

Do we need custom routing, or can our platform handle it?

Many mainstream commerce platforms and order management systems include configurable routing covering location priority, simple splitting and basic capacity, and for a network of a warehouse and a handful of similar stores that is often genuinely sufficient. Configuring what you already own is cheaper to run and easier to hand over, and we will recommend it when it fits. A custom routing layer earns its cost when decisions depend on information the platform cannot see, such as live freight quotes across multiple carriers, capacity from a rostering system, or commercial rules about ageing stock, or when you are routing across systems that do not share a platform at all.

How do we know whether the routing is actually working?

Track a small set of measures consistently: freight cost per order broken down by origin, time from order placement to dispatch, rejection rate and reason mix by location, split rate and the freight cost attributable to splitting, and delivery performance against the promise shown at checkout. Reviewing these together matters, because improving any one in isolation usually degrades another. Freight cost falling while dispatch times stretch is not a win. Set a regular review cycle and always revisit the weights before peak trading, since a rule set tuned in a quiet month will behave differently under load.

Make the Routing Decision on Purpose

Book a call. We will look at where your orders route today, what that is costing in freight and dispatch time, and whether the fix is configuration or a build.

All discussions held in confidence. Australian-based consultants.