Why Routing Engines Disagree
Run the same two Berlin coordinates through HERE, Google, TomTom and Mapbox and the routes diverge. The divergence is the information: every engine minimizes a cost function built for a different user.
Read article →Run the same two Berlin coordinates through HERE, Google, TomTom and Mapbox and the routes diverge. The divergence is the information: every engine minimizes a cost function built for a different user.
Read article →Field notes from building geospatial systems, data pipelines, and AI that actually ships
Two open-source repos, a free route planner, and a live event site: our R&D lab and our portfolio through the same door, and why a consultancy this small refuses to keep either behind glass.
A race course deserves to ship as a dataset: real Garmin Connect traces, geometry computed in the browser, and a cutoff calculator that tells athletes the truth even when that truth is a miss.
An agent answers 'the nearest cafe is 300 meters ahead' in a sentence that sounds right whether or not it is. Grounding it in geography takes tools that return verified geometry, and the honesty to say when the data layer underneath has nothing.
HERE's iOS SDK is Swift-only. We wrapped it in a NativeBridge, bound the bridge with Objective Sharpie, and shipped one C# surface for both platforms. Interop turned out to be a memory-management problem in disguise.
A hiking app whose tile cache has no expiry and no eviction sounds like a dare. On a trail it is the correct reading of what a tile is, and the storage cost comes with a manual valve instead of a policy.
Run the same two Berlin coordinates through HERE, Google, TomTom and Mapbox and the routes diverge. The divergence is the information: every engine minimizes a cost function built for a different user.
Ask WayMaker for a 10k loop near Tahoe and it draws one in seconds, occasionally through a gate that closed years ago. The router is the easy 20 percent; what makes a trail route real is the filter, the elevation join, and the discipline to distrust the ways that lie.
Locking one geospatial API into your stack is a tax you pay whether or not you ever switch. Where a trait-based client helps, where it cannot, and the line between the two.
A phone in a pocket recorded three points near the Brandenburg Gate; the car was on Unter den Linden. How map matching turns three noisy dots into a street, and exactly where it stops being able to.
Why we won't quote a fixed price before someone has loaded a sample of your data, and what two weeks of scoping on the real pipeline buys that a proposal never does.
A quoted travel time is a claim about the road network. Here is how to check it with isochrones, worked through on one real address, and where the polygons quietly lie.
A public dataset lands with one free-text address column and a deadline. At this scale geocoding is an ingestion problem, and it is solved with a validation loop, not with a better vendor.
Ninety-nine percent autonomous is the most dangerous score an AI agent can post. A field rule for deciding where agents earn their setup cost, where they must never act, and when a single LLM call will get you there weeks sooner.
Every GPS feed has one: a shipment resting in the Gulf of Guinea at exactly (0, 0), reported before the GPS got its first fix. Where coordinates break the assumptions of standard ETL, and the design decisions that stay cheap only if you make them first.
Ten thousand vehicles reporting every five seconds are 2,000 position updates a second, and shift changes can triple it. The map is the easy part. What decides whether dispatchers trust it is the pipeline underneath.