Zomato/Uber Eats Rider Tracking

Zomato/Uber Eats Rider Tracking

How food delivery apps track riders in real time, estimate arrival times accurately, and keep live location updates buttery-smooth — all while going easy on battery and network.

1–2 secUpdate Latency
100K+Concurrent Riders
6Core Components
~90%Fewer GPS Wakeups
← Back to Case Studies

Overview

Every time you order food and watch a little scooter icon glide across the map towards you, a surprisingly deep piece of engineering is running quietly underneath.

In plain terms: the app has to always know where the rider is, turn that into a smooth-looking dot on your screen instead of a jumpy one, and keep re-guessing when your food will actually arrive — all without murdering the rider's phone battery over an 8-hour shift.

Think of it like this: the rider's phone is a runner in a relay race, constantly passing a baton (their location) to the next teammate, until it lands perfectly in your hand as a moving dot on your screen — usually in under two seconds.

The Core Challenge

Rider tracking has to satisfy several competing constraints simultaneously:

Freshness

Customers expect the rider's position to feel "live," updating every few seconds.

Scale

Hundreds of thousands of riders can be actively delivering at once, all streaming updates.

Accuracy

Raw GPS is noisy; a stationary rider can appear to "jump" between nearby streets.

Efficiency

Riders are on the road for hours — tracking can't drain their battery or data plan.

Low-Latency Fan-out

A location change has to reach exactly the right customer's app within a second or two.

High-Level Architecture

The system is a pipeline: location is captured on the rider's device, streamed through an ingestion layer, processed and stored centrally, and pushed back out to exactly the customers who need it.

01

Rider Mobile App

Captures GPS/network location, batches pings, and adapts sampling rate based on movement, battery, and connectivity.

In shortThe rider's phone quietly checks "where am I?" every few seconds and gets ready to report it.

02

Location Ingestion Gateway

Lightweight WebSocket/MQTT edge servers accept high-frequency location pings from millions of riders concurrently.

In shortA front door that listens for location updates from every rider on the road, all at the same time.

03

Streaming Pipeline (Kafka)

Buffers and fans out location events to downstream consumers — storage, ETA engine, and live tracking service.

In shortA conveyor belt that carries each location update to everyone who needs to see it, in order.

04

Geospatial Store

Redis Geo / H3 keeps the latest rider location indexed for fast proximity queries and instant retrieval by order ID.

In shortA live whiteboard holding everyone's current position, so any order can be looked up instantly.

05

ETA Prediction Service

Combines current location, route graph, historical speed data, and live traffic to recompute arrival estimates.

In shortThe calculator that keeps re-guessing "how long until they arrive?" as things change.

06

Real-Time Fan-out

Pushes location + ETA updates to the exact customer app instance tracking that specific order, via WebSocket/SSE.

In shortThe delivery boy for updates — it hands the new position straight to your phone screen.

Data Flow, Step by Step

1

Location Capture

The rider's app reads GPS coordinates and, where GPS is weak (indoors, tunnels, urban canyons), fuses in network-based and sensor-based location for a more reliable fix.

In shortLike checking a compass — but with backups for when the signal gets foggy.

2

Adaptive Batching

Instead of streaming every point instantly, the app batches a few points together and sends them every 3–5 seconds while moving — cutting radio wake-ups dramatically.

In shortInstead of texting every second, it groups a few updates and sends them together.

3

Ingestion & Validation

The gateway authenticates the session, validates coordinates (rejecting GPS jumps), and stamps each ping with a server-side timestamp.

In shortA bouncer checks the update is real and not some glitchy, impossible jump.

4

Fan-out to Consumers

Kafka topics partitioned by rider/order ID let the geospatial store, ETA engine, and analytics pipeline process the same event in parallel.

In shortOne update, many readers — everyone who needs it gets a copy at once.

5

ETA Recomputation

The ETA service snaps the rider to the road network, calculates remaining distance, and blends in live traffic for a fresh estimate.

In shortThe "how long left?" number gets quietly recalculated in the background.

6

Push to Customer

The update is published to a pub/sub channel keyed by order ID — the customer's app renders it within a second or two.

In shortThe moving dot on your screen updates — usually before you even notice the lag.

Battery & Network Optimization

This is where rider-tracking design diverges most from a generic real-time app. Riders keep the app open for entire shifts, so every unnecessary GPS read or network call adds up fast.

Adaptive Ping Frequency

Interval scales with speed and movement — frequent while riding, rare when stopped — cutting battery drain and network chatter.

In shortTalks often while moving, goes quiet while parked — like a person, not a machine.

Geofencing Triggers

OS-level significant-location-change APIs wake the app only when the rider actually moves a meaningful distance.

In shortThe phone naps until you actually move somewhere, instead of staying wide awake.

Batched, Compressed Payloads

Multiple points bundle into one compact binary payload rather than one message per point.

In shortSends one small parcel instead of many tiny letters — cheaper postage, same info.

Connection Reuse

A single long-lived socket avoids repeated, expensive TLS/TCP handshakes per update.

In shortKeeps one phone line open for the whole trip instead of redialing every time.

Server-Side Smoothing

Raw points snap onto the road graph and interpolate between updates, so fewer points still look smooth on screen.

In shortThe server fills in the gaps so the dot glides instead of jumping.

Delta Updates

Clients receive only what changed — new coordinate + ETA delta — not a full state payload every time.

In shortOnly sends what's new, not the whole story every single time.

ETA Prediction

The simplest way to guess an ETA is: distance left ÷ how fast you're going. That's what a basic maps app might do — and it falls apart the instant there's a red light, a crowded street, or a turn to make. Here's how a rough guess compares to what production systems actually do:

Naive Approach
  • distance ÷ average speed
  • Ignores traffic, signals, turns
  • Wildly wrong near destination
  • Jumps around unpredictably
VS
Production Approach
  • Snapped to real road segments
  • Live traffic + historical speed blend
  • Fixed hand-off buffer near arrival
  • Smoothed, continuously re-forecast

Scalability & Reliability

With hundreds of thousands of riders active at once, two parts of the system take the most strain: the front door that receives every ping, and the delivery layer that pushes updates back out. Here's how they stay standing under load:

  • Splitting the work by rider/order — updates for the same order always land in the same lane, so the system can add more lanes (servers) without ever mixing up whose location is whose.
  • Safe-to-repeat updates — if a location ping gets sent twice by accident (a flaky network retry, say), processing it twice causes no harm — it just overwrites the same spot with the same answer.
  • Graceful degradation — if things get overloaded, the app quietly falls back to the last known position and a rougher ETA guess, instead of showing nothing at all.
  • Only serving who's actually watching — the system keeps a live channel open only for orders someone still has on-screen, freeing it up the moment they close the tracking view.

Typical Tech Stack

LayerCommon Choices
Mobile SDKFused Location Provider (Android), Core Location (iOS)
TransportMQTT or WebSocket over TLS for persistent connections
Streaming BackboneApache Kafka / Pulsar for durable, partitioned fan-out
Geospatial StorageRedis Geo, Uber's H3 hex index, or PostGIS
ETA EngineRoad graph (OSRM/Valhalla style) + ML on historical trips
Real-Time PushPub/Sub fanning into WebSocket/SSE gateways per session

Trade-offs & Lessons

  • Update frequency vs. battery life is the central tension — every product decision here is really a dial being tuned, not a solved problem.
  • Smoothness vs. raw truth — the displayed position is often a client-side interpolation between the last two known points, not literally "right now."
  • Centralized ETA computation is more accurate than client-side logic, but means recomputing for every active order on every meaningful location change.

Rider tracking looks simple on the surface — a dot moving on a map — but it's really a real-time, geospatially-aware distributed system balancing freshness, accuracy, scale, and device efficiency all at once.

Jargon, Decoded

A quick, no-nonsense translation of the technical terms used above — for anyone who isn't an engineer (or just wants a refresher).

GPS Ping

One "here's where I am" message sent from the rider's phone.

WebSocket

A phone-line-like connection that stays open, so updates travel instantly without hanging up and redialing.

Kafka

A high-speed conveyor belt for data — events go in at one end and multiple systems can grab a copy at the other.

Geospatial Index

A map-shaped filing cabinet — built to answer "what's near this point?" almost instantly.

ETA

Estimated Time of Arrival — the app's best current guess at when the rider will show up.

Idempotent

Safe to repeat — doing it twice by accident causes no harm, like pressing an elevator button that's already lit.

Pub/Sub

"Publish/Subscribe" — one sender broadcasts an update, and everyone who's interested automatically receives it.

Snapping to Road

Nudging a slightly-off GPS point onto the actual street it's on, so the dot doesn't appear to float through buildings.

← Back to all Case Studies

Contact Us




Send us a message