← All postsEngineering

How to balance delivery routes between drivers without just splitting the stop count

iotoms team · October 2, 2026 · 5 min read

A bakery and snacks distributor running five vans out of one depot split its territory the obvious way: count the customers, divide by five, hand each driver a roughly equal list. On paper, every route had between 21 and 24 stops. In practice, one van was back at the depot by 1:30 every day and another almost never made it in before 5.

The dispatcher's first guess was that the late driver was slow, or slacking. He wasn't. His route had the same number of stops as everyone else's — it just had three large supermarkets that each took twenty-five minutes to unload, a stretch of highway between two of his customers with no shortcut, and a cluster of small corner stores that were individually quick but ten minutes apart. The early van, by contrast, had twenty-two tiny bodegas packed into six blocks downtown. Same stop count, completely different day.

Why counting stops feels right and isn't

Stop count is the number every dispatcher already has, so it's the number that gets used. It's visible on the route sheet, it's easy to divide evenly, and it feels fair — same number of customers, same workload. But a stop isn't a unit of work. A stop is a bundle of different costs: drive time to get there, service time once you're parked, and whatever constraint (a loading dock, a delivery window, a locked gate) adds friction on top. Two routes with identical stop counts can differ by two hours of actual work, and nothing on the route sheet shows it until the day is already over.

The cost compounds quietly. The overloaded driver starts arriving at his last few stops near closing time, so those customers start pushing their orders to the next day "to be safe," which bunches demand and makes the route worse the following week. He racks up overtime that never shows up as a line item anyone questions individually. The underloaded driver, meanwhile, finishes early enough that the depot starts handing him odd jobs, and eventually someone proposes giving him two more stops — picked, again, by count, so the imbalance doesn't actually close.

The turning point: optimizing for time, not stops

The distributor's ops lead stopped dividing by stop count and started dividing by estimated route duration — drive time plus service time, summed across each candidate assignment — and let an assignment pass balance the vans against that number instead. The rebalanced routes still had uneven stop counts: one van kept 19 stops, another got 27. But every van's estimated finish time landed within about twenty minutes of the others, and the gap between the earliest and latest van home closed from three and a half hours to under thirty minutes within the first week.

What the balancing actually computes

This is a capacitated assignment problem, a close cousin of the bin-packing problem: you have a fixed number of vans (bins), each with a capacity — not just physical load, but a time budget for the day — and a set of stops (items) that each consume part of that budget. The goal is to assign every stop to exactly one van so no van's total exceeds its budget, while keeping the total cost (mostly drive time) low across all vans combined.

A few things make this harder than plain bin-packing, and matter in practice:

  • Service time isn't uniform. A supermarket with a loading dock and a receiving clerk who checks every case against the invoice can take ten times longer to unload than a convenience store that just signs and waves the driver off. Any balancing pass that treats a stop as a flat unit of time will misjudge exactly the stops that cause the most trouble.
  • Geography still matters inside the balance. You can't balance purely on time and ignore location, or you'll assign a van two stops that are individually quick but an hour apart, which destroys the route even though the "time budget" math looked fine on paper. Balancing has to happen within geographic clusters, not across the whole territory at once — cluster first, then balance load within and between neighboring clusters.
  • The constraint set shifts daily. A customer with a 7–9 a.m. delivery window, a van in for repair, a new account that just signed — any of these changes which assignment is actually balanced today, which is why this has to run as a recompute, not a static territory map redrawn once a quarter.
  • "Balanced" isn't always "equal." A newer driver still learning a territory, or a smaller van with a capacity limit, may need a lighter load than an experienced driver with a bigger box — the optimization target is an even finish time given each van's real constraints, not identical numbers.

What to check if your routes are split by stop count

  • Compare actual finish times across drivers for a week, not stop counts. A two-hour spread between the earliest and latest van home is the clearest sign the split isn't balanced, whatever the route sheet says.
  • Look at which stops are driving the imbalance — usually a handful of high-service-time accounts (big stores, strict receiving docks) rather than distance.
  • Check how often routes get rebalanced. If territory assignments were drawn once and haven't moved since, new accounts and changed order patterns have almost certainly broken the balance quietly.
  • Ask whether a van going down for a day triggers a real reassignment of its stops across the remaining vans, or just gets skipped entirely.

iotoms computes route assignments from live stop-level data — service history, current order volume, delivery windows — so a territory split is based on each van's actual time budget rather than a stop count fixed when the routes were first drawn, and it can be recomputed the moment a van, a customer, or an order changes.

See your own routes running on iotoms

Book a demo