Address aware route planning at scale

About
We designed and built a route planning tool for SIMAB, turning messy address spreadsheets into optimized driver routes in seconds. A layered address-resolution pipeline paired with a self-hosted routing engine handles tens of thousands of stops at zero per-call cost.
Services
Product Design, Full-stack Development
Tech stack
Next.js, TypeScript, PostgreSQL, MapLibre GL
Industry
Field services
SIMAB had already evaluated several off-the-shelf route planning tools. None fit how the team actually worked, and none could scale to the volume of addresses they needed to handle.
The decision to build came out of a conversation about how we develop with AI. What used to be a high-cost custom build is now fast and focused, purpose-fit for one team, without the budget that custom software used to require.
Their field teams visit thousands of properties across southern Sweden every year. Even with planning in place, drivers ended up crisscrossing the same areas and doubling back past addresses that would have been logical stops along the way. At thousands of stops per month, that adds up to real fuel and real hours.

Challenge
Route planning at this scale is harder than it looks. Addresses arrive with typos, OCR errors, and local nicknames that need to be resolved before any routing can happen. And once they are resolved, the optimal driving order is not obvious. Without it, drivers end up crisscrossing the same areas and missing addresses that would have been logical stops along the way.
The replacement had hard requirements baked in. Thousands of addresses needed to be ingested and geocoded accurately in one go. Tens of thousands of stops needed to optimize in single batches, not chunked across multiple runs. And the route had to come back in the team's exact existing format, same columns, same shape, just in optimized order, so nothing downstream needed to change.

Solution
We worked in fast cycles with close team check-ins, shipping iteratively rather than over a single long phase. That kept design decisions honest. Features landed in the team's hands quickly enough that we could see what worked and what didn't, and adjust before patterns calcified.
Mechanically, the team uploads the existing address list. The system resolves each address through four geocoding sources in sequence: an authoritative national registry first, an open-source geocoder second, and commercial providers as final fallbacks. The layered approach catches rural Swedish edge cases like local nicknames, inconsistent postal codes, and OCR errors in transcribed addresses, which any single source would miss. The route comes back as a re-ordered spreadsheet, same columns as the input, ready to load straight back into the team's existing system, so nothing downstream needs to change.
Under the hood, a self-hosted routing engine runs on the team's own data with the actual Swedish road network. The optimizer chains stops by real driving distance, so the next stop is always the nearest from where the driver currently is. That works equally well in dense urban areas and across long rural stretches, no manual re-sequencing required. Tens of thousands of addresses optimize in single batches, with zero per-call cost as planning volume grows.


Outcome
Fewer kilometres driven and fewer hours on the road for the same address count. Drivers no longer have to backtrack past stops they passed half an hour ago, because the next stop is always the nearest one from where they are. And because nothing about the team's existing workflow had to change, the tool was useful from day one without retraining anyone.

Turn Insight into Action
You’ve seen how we think. Now let’s put it to work. Whether you’re validating an idea, scaling a product, or transforming a business, we help you move forward with confidence.
Start a Project