Routing

Every field CRM stores the route. This one solves it.

A route typed into a form is a list. A route solved against drive time, time windows, pinned stops and a day budget is a plan. The optimizer reports the gap between the two in miles every time it runs — on your own file, so you never have to take our word for how big it is.

Field day · Tuesday · Houston West11 calls
  • Window08:00 – 14:20
  • Drive32.5 mi
  • Deferred2
Tuesday’s zone, routedMonday through Friday each own one contiguous zone. Tuesday’s is drawn as a map rather than a box because it is the one being shown. The faint gray lines are the real road network for the territory and the heavy line is the route the router returned through all eleven stops, in call order. The two stops that did not fit the clock are marked separately, off the corridor.MONWEDTHUFRIAliefWestchaseSharpstownSugar Land2 miTUE2 deferred
  1. Westheimer EndocrinologyHigh Potentialstart of day08:00
  2. Briar Forest Family MedicineTop 501.6 mi · 4 min08:26
  3. Gessner Park Internal MedTop 503.1 mi · 7 min08:56
  4. Dairy Ashford Primary Care2nd Top 503.3 mi · 9 min09:26
  5. Eldridge Metabolic HealthHigh Potential3.6 mi · 10 min09:58
  6. Lunch — Memorial Drive Internal MedStop 8, 0.6 mi off stop 7 · zero detour11:50
  7. 6 more stops through 14:20
  8. Kirby Endocrinology · Bissonnet Internal Med9 and 7 miles off the cluster. Adding both ends the day at 16:40 — rolled to next Tuesday, highest cadence debt first.
A real routed day, on real roads. Generated from a sample territory workbook, not a customer’s — but the line on the map is the road geometry the router returned, not a drawing of one. The clock is arithmetic you can check: 11 calls at 22 minutes, a 60-minute lunch, and the 78 minutes of driving the router costed for 32.5 road miles is a day that ends at 14:20.

What a hand-built day actually costs

Not the twenty minutes of typing. The compounding, invisible part.

A rep given a target file and a routing template builds the week the only way a person can: they pick a town, scan the list for names in that town, and write them down in roughly the order they remember the roads. It is a reasonable thing to do and it produces a route that crosses itself two or three times, because a human reading a spreadsheet cannot see a tour.

The waste does not show up as a complaint. It shows up as a day that ends at 16:40 instead of 15:00, as the last two calls of the day being dropped “because traffic”, and as a Coverage-tier practice on the same street as stop four never getting visited at all — because it was never on the list, because nobody could see that the route already went past its door.

It also shows up as an argument. When a manager asks why a territory is behind cadence, neither of them has anything to point at. The plan was in a spreadsheet, the actual week was in a car, and the two were never comparable.

How the tour is built

Nearest neighbor, then 2-opt, then or-opt — in that order

A field day is eight to forty stops. That is small enough that exact solving is unnecessary and metaheuristics are overkill. Three passes land within a couple of percent of optimum in under a millisecond, which is the property that matters: it is fast enough to re-solve on every toggle in the interface, so a rep who drags a stop sees the real consequence immediately instead of a stale number.

  • Nearest-neighbor seed. Deliberately cheap and deliberately mediocre. Its only job is to hand 2-opt something with no crossings by construction. Ties break on the lower index, so the same list never reorders itself between page loads — reps notice that, and stop trusting the tool when it happens.
  • Full 2-opt. For every pair of edges, test reversing the span between them and keep it if the four-edge delta is negative. Runs to a local optimum or a bounded iteration count.
  • Or-opt second, and this is the point. 2-opt can only reverse a contiguous span. A single outlier wedged in the middle of the tour is a 2-opt local optimum no matter how many sweeps you run. Or-opt relocates runs of one to three stops, which is exactly the move that unpicks it.
Same eight stops, two ordersReal road geometry
As listedThe same eight stops driven as listed, totaling 16.5 mi on real roads.

As listed16.5 mi

OptimizedThe same eight stops driven optimized, totaling 11.5 mi on real roads.

Optimized11.5 mi

Eight real stops, driven on real roads. Both loops are drawn from the same routed leg geometry the product uses, and both mileages are the road distance for that order — not straight lines between pins. The saving is not a marketing figure: the optimizer reports baselineDistanceMi alongside the result, so the number a rep sees is the difference between the order the file was in and the order they will drive.

Time windows

Geometry first, then the clock — and an impossible day says so

A practice that only signs in visitors before eleven is a hard constraint, not a preference.

Arrival times are computed along the tour

Once the geometry is settled, arrival and departure are walked forward stop by stop. An early arrival waits rather than being counted as on time — the wait is real minutes and it belongs in the day’s total.

Violations are repaired, then reported

Stops that miss their window are relocated by a repair pass scored lexicographically: fewest violations first, then fewest late minutes, then distance. Distance is the last tiebreak, not the first.

An impossible day is never quietly produced

If a set of windows genuinely cannot all be met, the result carries the violations. It does not return a tidy day that will fail at 10:40 on a Tuesday, which is the failure mode of every route planner that treats windows as advisory.

Pinned stops behave the same way. A confirmed in-service at 09:00 is a fixed position in the tour, and the optimizer works around it rather than moving it and telling you afterwards.

Overflow

Deferred by priority. Named. Never truncated.

This is the smallest decision on the page and the one that decides whether anyone trusts the output.

When a day exceeds its hour budget or its stop cap, something has to come off. The lowest-priority unlocked stop is removed, the tour is re-optimized, and the check runs again — one at a time, because removing the right two stops is not the same as removing two stops.

What comes back is not a shorter list. It is a shorter list plus a set of deferred stops, each with the reason it did not fit. A rep looking at Tuesday can see that Kirby Endocrinology is nine miles off the cluster and would have pushed the day to 16:40, and can decide to take it anyway. What they cannot do is fail to notice that it vanished.

The same rule runs at territory scale. When a zone’s cadence commitments alone overrun the clock, the plan records that as a fact about the zone rather than trimming names until the arithmetic looks comfortable.

Distance

No map key required to plan a territory

Distances come from an analytic road model, with a real matrix provider injectable over the top when a route is being finalized.

Straight line to road miles
Haversine multiplied by a road-circuity factor — 1.28 for the general case, 1.20 inside a metro where the grid is denser. Two buildings in one ZIP still cost a minimum leg, because they do.
Miles to minutes
A distance-banded speed curve rather than one average: a short hop is city speed, a long hop is highway speed. Territory planning uses a flat 26 mph between offices, which is what mid-morning metro driving actually averages.
When you want real numbers
A matrix provider — Mapbox Matrix, Google Distance Matrix — can be injected and the same optimizer runs against measured times instead of modeled ones. The model is what lets you plan a hundred territories without a bill; the provider is what you turn on for the day being driven tomorrow.
Why this matters for a pilot
You can evaluate this product on your own territory file with no API keys, no procurement conversation about a mapping vendor, and no network dependency in the middle of the demo.

Lunches and appointments

What is booked anchors the day. The rest of the route builds around it.

A lunch confirmed three weeks out, a specimen pickup every Tuesday at two, an eight o’clock in-service: book it on the calendar and the planner treats it as fixed. The day starts earlier or runs later to hold it, and the practices are sequenced around it. When nothing is booked, the day picks the lunch — the office the route already reaches at midday, at zero detour.

Book somewhere else and nobody stops you — but the cost is priced first, in miles and minutes, against the threshold the field plan sets. An eight-mile detour is a call you are choosing not to make, and it should read that way before you commit, not in the following week’s numbers.

  • Anchors become real optimizer input: a time window the tour must fit, and a pin when the appointment genuinely cannot move.
  • An hour at the table is the lunch, not a detour. Only the extra driving counts against you — folding the hour in would make every lunch look expensive and the warning would be ignored.
Book lunch · TuesdayPriced before you commit
  • Eldridge Metabolic HealthAlready stop 5. Zero detour — the route goes there at 12:10 anyway.
  • Kirby Endocrinology+9.2 mi, +21 min. Past the 8-mile threshold the field plan sets. Booking it drops one call from the day.
Illustrative. What is booked is fixed and the day is built around it; an open lunch is placed where the route already goes. You can still book the second one. You just do it knowing what it costs.

Do the arithmetic yourself

How many calls actually fit in a day?

This is the planner's own arithmetic with its shipped defaults. Move the two things that vary between territories and watch the number that everybody quotes as a target turn out to be a consequence.

22 min
Sign in, wait, and the few minutes you actually get with the provider. The shipped default is 22.
5.0 mi
Straight line. A tight suburban cluster is under 2; a zone that spans a metro is 8 and up. The planner's own Houston zones sit between 1 and 6.

Held fixed, because these are the assumptions the planner ships with: an 08:00–16:00 field window, one 60-minute lunch, 26 mph between offices, and a 1.2× straight-line-to-road factor. A leg never costs less than 0.6 mi — two buildings in one ZIP still cost a drive.

12

calls fit in that day

  • Calls4h 24m
  • Driving2h 32m
  • Lunch1h 00m
  • Unused4m

This day lands inside the 10–12 goal band. Total driving: 66.0 road miles.

This is a derivation, not a measurement. Every figure it produces comes from the planner’s default assumptions — an eight-hour field window, a sixty-minute lunch, 26 mph between offices — applied to the two values you set. It is not an observed outcome from a customer, because there is no customer to observe. Change the assumptions and you change the answer, which is exactly the point being made.

Limits

What the routing does not do

Worth knowing now rather than in week three.

No live traffic, by default
The shipped model is analytic. Real-time conditions require a matrix provider to be configured, and even then the plan is built the night before — it is a call plan, not a navigation app.
No turn-by-turn navigation
We hand the tour to Google Maps, Apple Maps or the calendar. Building a worse version of an app already on the rep’s phone is not a use of anyone’s time.
One vehicle per day
The optimizer solves a single rep’s day. Splitting a territory between two reps is a zoning decision, made upstream, not a routing one.
Geocoding quality is your file’s quality
A row with a bad address geocodes badly, and a badly geocoded stop drags a tour. The import surfaces low-confidence matches for review rather than silently placing them.

The rest of what the product does around the routing is on the product page, and the two audience pages — for reps and for sales leaders — describe what each of them actually gets out of it.

Find out what the gap is on your territory.

Bring one file. You get back the tour it produces, the days that do not fit and why, and the mileage difference between the order your file is in and the order a rep would actually drive it.