Logistics Dispatch System
A regional 3PL with 400+ daily shipments ran dispatch through a spreadsheet, a call rota, and the judgement of three senior planners. We replaced the judgement with an engineered decision layer.
A DTC health & beauty brand scaled from 50 to 500 orders a day using humans as the integration layer. We rebuilt the spine so the next 5× happened without adding headcount.
System view — not vague business talk.
Order-to-fulfillment was not a system — it was eleven tools stitched together by ops coordinators doing copy-paste, cross-referencing, and inbox-diving. Every 5× growth triggered by marketing bent the operation closer to breaking.
From 'order placed' to 'customer receives', eleven distinct human actions were required on the exception path, and four were always required on the happy path.
Shopify, the UK 3PL, the EU 3PL, and the returns sheet each held a different slice of the truth. Reconciliation was the returns lead's full-time job.
Returns started in Gorgias, moved to a shared inbox, were logged in a sheet, and eventually re-entered into Shopify by hand. Average resolution: 9 days.
A warehouse picking the wrong SKU for 48 hours was discovered by a Reddit thread, not a dashboard. There was no signal layer.
Every promo week, three additional temps were brought on. The ops team and the temp team never shared the same view of what had happened.
Workflow as it existed, with failure points marked.
A dozen systems pretending to be one operation. The 'system' was the ops team's collective memory plus six active Slack channels.
subscription + first-time flagged differently · no unified event
manualUK vs EU 3PL · by postcode rules in a sheet
manualtwo portals · different schemas · no idempotency
manualno visibility until despatched
blindby hand · up to 6h lag
manualGorgias ticket · no state machine
broken3-way cross-check · usually missed items
bottleneckTrigger · Decision · Execution · Data · Observability.
A single order spine. One event stream, two warehouse adapters, a state-machine-backed returns flow, and a signal layer watching the ratios the team used to rely on memory to notice.
Unified order events across Shopify + subscriptions
Shopify orders, subscription renewals, and back-orders collapsed into a single canonical event schema
Postcode-based region assignment moved from a sheet into versioned config
Routing, prioritisation, and policy
Selects UK vs EU 3PL by region, inventory, and SLA; resilient to either warehouse going dark
Expedited / standard / subscription tiers encoded explicitly, with measurable SLA contracts
Decides refund / replacement / store credit by cost, reason code, customer history
Idempotent writes to every downstream system
One adapter per warehouse, idempotency keys, retries, dead-letter queue
Tracking numbers pushed back to Shopify, Gorgias, Klaviyo from a single source
Temporal-backed state machine: requested → approved → received → resolved — with human-gated steps
Daily event batch to Xero, fully reconcilable against the event log
Single order-event log + projections
Every state change for every order, append-only, 7 years retention
Current-state view used by the dashboard and by support tooling
Live ratios, anomaly detection, alerts
Orders in flight, by stage, by warehouse, by region
Alert when picking error rate, refund rate, or warehouse latency drift beyond thresholds
A single screen showing customers currently affected by an in-flight incident
Shopify + subscriptions + back-orders collapsed into a canonical event stream. Schema-versioned, replayable end-to-end.
Two warehouse adapters, idempotent, resilient to either warehouse's API going offline for hours.
Temporal-backed flow covering six states from request to resolution, with human-gated approval under a defined SLA.
Streaming detectors on picking error rate, refund rate, warehouse latency, and carrier SLA — paging ops before customers do.
Replaces four spreadsheets and three tabs. Queue view by stage, drill-down by order, customer, or warehouse.
Daily reconcilable batch into Xero, driven entirely by the event log. Closes the prior week's books by Monday 09:00.
Numbers out of the production system — not testimonials.
Discrete state transitions executed by the system rather than a human.
Orders requiring manual correction post-despatch, measured across a rolling 12 weeks.
Median time from order placed to warehouse task queued.
Median time from return requested to refund or replacement executed.
The team never needed more hands. They needed the operation to stop requiring hands to hold it together. Once the order spine was real, every downstream 5× — in orders, in SKUs, in geographies — cost engineering hours, not headcount.
A regional 3PL with 400+ daily shipments ran dispatch through a spreadsheet, a call rota, and the judgement of three senior planners. We replaced the judgement with an engineered decision layer.
A 40-person creative agency in London was losing 1.5 FTE of project-management time to coordination that wasn't coordination. We rebuilt the intake-to-invoice spine.
Every case on this site started as an audit. If this study described a system that looks like yours, the fastest next step is a formal operations diagnostic.