← Uber Interview Insights

Uber·Software Engineer·Onsite - System Design / Architecture·Senior

Senior
Jun 2026

Summary

System design round at Uber focused entirely on building a heatmap ingestion and query system. Pretty deep dive, they pushed hard on every layer of the stack.

Questions Asked (1)

Q1

Design a heatmap system that ingests high-volume geo-tagged events and supports queries returning aggregated heatmap tiles for a given bounding box, zoom level, and time range.

System DesignTechnical Trade-offsData Modeling
Author's notes

This one sprawled fast.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements (event volume, latency, accuracy, tile format) and then propose a scalable architecture that separates ingestion, storage, and query serving. Use a spatial index and pre-aggregation to efficiently compute heatmap tiles for arbitrary bounding boxes, zoom levels, and time ranges.

Pro tip: Mention that heatmap tiles are typically served as vector tiles (e.g., Mapbox Vector Tiles) and that you can pre-aggregate at multiple zoom levels to balance query latency and storage cost. Also, discuss how to handle time-range queries by partitioning data by time (e.g., hourly/daily) and using a rollup strategy.

1. Clarify Requirements and Constraints

Ask about event volume (e.g., millions per minute), query latency SLA (e.g., <100ms), accuracy vs. performance trade-offs, and tile format (raster vs. vector). Also clarify time range granularity and retention.

2. Design Ingestion Pipeline

Propose a scalable ingestion layer (e.g., Kafka) that buffers events and writes to a storage system. Consider partitioning by time and geo-hash to enable efficient writes and later queries.

3. Choose Storage and Indexing Strategy

Select a storage solution that supports spatial indexing (e.g., geohash, S2, or Quadtree) and time-series partitioning. Consider a columnar store (e.g., Parquet on S3) for cost-effective long-term storage and a fast lookup store (e.g., Redis, Cassandra) for recent data.

4. Pre-aggregate and Serve Tiles

Pre-compute heatmap tiles at multiple zoom levels and time buckets (e.g., hourly, daily) to serve queries quickly. Use a tile server that can fetch and merge pre-aggregated tiles for the requested bounding box, zoom, and time range.

5. Address Trade-offs and Optimizations

Discuss trade-offs between pre-aggregation and on-the-fly computation, storage cost vs. query latency, and accuracy vs. performance. Mention techniques like dynamic aggregation, caching, and approximate algorithms (e.g., HyperLogLog) if needed.

Key Points to Mention

  • Spatial indexing techniques (geohash, S2, Quadtree) for efficient bounding box queries
  • Time-series partitioning and rollup strategies to handle time-range queries
  • Pre-aggregation of heatmap tiles at multiple zoom levels to reduce query latency
  • Use of vector tiles (e.g., Mapbox Vector Tiles) for efficient client-side rendering
  • Scalable ingestion using message queues (Kafka) and stream processing (Flink, Spark Streaming)
  • Trade-offs between accuracy, latency, and storage cost; caching strategies

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.