A live map with a moving dot on it looks simple. The pipeline behind it — device, ingestion, storage, and rendering — has a few genuinely tricky problems worth understanding if you're planning a tracking product.
The device side
A tracking device (commonly ESP32-based in our work) needs to report position at a sensible interval — frequent enough for a useful live view, infrequent enough not to drain power or flood the network. It also needs to handle connectivity gaps gracefully: buffering position data locally when offline and syncing once connectivity returns, rather than simply losing that window of data.
Live state vs. historical state — two different problems
"Where is this vehicle right now" and "where has this vehicle been" are different data problems. We keep current position in a fast in-memory store (Redis) for live map rendering, and log the full history to a document store (MongoDB) for route playback and reporting. Modeling both needs as one system usually means compromising on both.
Routing and ETAs
- Route calculation and ETA estimation run on top of map data — we use OpenStreetMap for the underlying map and OSRM for fast route computation.
- Self-hosting this stack avoids per-request commercial map API costs, which matters directly at fleet scale.
- ETA accuracy depends on the quality of the underlying map data for a given region — this is worth validating early for a new geography.
What actually breaks at scale
The failure mode we see most often isn't the map rendering — it's the ingestion pipeline choking on write volume as fleet size grows, because position updates are frequent and constant. Designing for this from the start (batched writes, appropriate indexing, a fast path for "just update the live position" separate from the historical log write) is the difference between a tracking platform that scales cleanly and one that needs a rewrite at 200 vehicles.
Related services
Related technologies
Related articles

