← Uber Interview Insights

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

Senior
Apr 2026

Summary

Uber system design round for a software engineer role. The whole session was basically one big question about building a calendar scheduling service, but it branched into like six different sub-problems pretty fast. Felt like a reasonable interview but there's a lot of ground to cover.

Questions Asked (7)

Q1

Design a meeting scheduler service similar to Google Calendar or Calendly, supporting events with recurrence, attendee invites, RSVP tracking, and external booking links.

System DesignData Modeling
Author's notes

This is a wide question and I didn't scope it fast enough at the start.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying functional and non-functional requirements, then design a high-level architecture covering core entities like users, calendars, events, and bookings. Dive into data modeling for recurrence and RSVP tracking, and discuss scalability, consistency, and integration with external calendars.

Pro tip: Emphasize how you'd handle time zones and recurrence exceptions (e.g., modified or cancelled instances) early, as these are common pitfalls in calendar systems. Also, mention idempotency for booking links to prevent double-booking.

1. Clarify Requirements

Ask about scale (users, events), consistency needs, supported recurrence rules, and external integrations. Define core use cases: create event, invite attendees, RSVP, and public booking.

2. High-Level Design

Outline main components: API gateway, calendar service, event service, notification service, and external calendar sync. Sketch data flow for creating an event and sending invites.

3. Data Modeling

Design schemas for users, calendars, events, recurrences, attendees, and RSVPs. Discuss how to store recurrence rules (e.g., RRULE) and exceptions, and how to efficiently query events for a time range.

4. Deep Dive into Key Features

Explain recurrence expansion, RSVP tracking with statuses, and external booking link generation. Address time zone handling, conflict detection, and idempotency.

5. Scalability & Trade-offs

Discuss partitioning (e.g., by user or calendar), caching strategies, and consistency models (e.g., eventual for RSVP, strong for booking). Mention trade-offs between normalization and denormalization.

Key Points to Mention

  • Use of RRULE (RFC 5545) for recurrence and handling exceptions (modified/cancelled instances).
  • Time zone storage in UTC with conversion at display, and handling DST transitions.
  • RSVP tracking with statuses (accepted, declined, tentative) and notification mechanisms.
  • External booking links: unique tokens, expiration, and idempotent booking to avoid double-booking.
  • Scalability: sharding by user/calendar, read replicas, and caching frequently accessed events.
  • Integration with external calendars (Google, Outlook) via APIs and sync strategies (push/pull).

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

Q2

How would you efficiently find common free time slots across multiple attendees within a given time window?

Algorithms & Data StructuresSystem Design
Author's notes

Actually felt okay about this one.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the problem: inputs are multiple attendees' busy intervals and a time window, output is common free slots. Then propose an efficient algorithm: merge all busy intervals, sort them, and find gaps within the window. Discuss trade-offs between sorting and using a sweep line or interval tree for large-scale or streaming data.

Pro tip: Mention that in real systems like Uber, you'd likely need to handle time zones, recurring events, and scale, so consider using a min-heap for k-way merge or a segment tree for dynamic updates. Also, discuss how to optimize for the common case where attendees have few busy intervals.

1. Clarify requirements and inputs

Ask about the format of busy intervals, number of attendees, size of time window, and whether intervals are sorted. Confirm if we need to handle edge cases like overlapping intervals or all-day events.

2. Choose an algorithm

Propose merging all busy intervals into a single list, sorting by start time, then merging overlaps. Then iterate through the merged list to find gaps within the given window.

3. Analyze complexity and optimize

Discuss time complexity: O(N log N) where N is total number of busy intervals, due to sorting. For large N, consider using a min-heap for k-way merge if each attendee's intervals are sorted, reducing to O(N log k).

4. Handle edge cases and extensions

Address cases like no common free time, intervals outside the window, and multiple free slots. Mention potential extensions: time zones, recurring events, and dynamic updates.

5. Summarize and conclude

Recap the approach, complexity, and trade-offs. Emphasize clarity and efficiency, and invite further discussion on scaling or system design aspects.

Key Points to Mention

  • Merging intervals and finding gaps
  • Sorting and time complexity O(N log N)
  • Using a min-heap for k-way merge to achieve O(N log k)
  • Handling edge cases: no free slots, intervals outside window
  • Scalability considerations for large number of attendees
  • Time zone and recurring event handling in real-world systems

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

Q3

How would you handle time zone correctness across users, including storage and display?

System DesignTechnical Trade-offs
Author's notes

Store in UTC, display in local.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by establishing a clear principle: store all timestamps in UTC and convert to local time zones only at the presentation layer. Then discuss the trade-offs and edge cases, such as daylight saving time, user travel, and scheduling future events, and how you would handle them in a distributed system like Uber's.

Pro tip: Mention that you would use a library like IANA tz database and avoid storing time zone offsets, as they change with DST. Also, highlight the importance of testing with edge cases like Samoa's time zone jump or Lord Howe Island's 30-minute DST shift.

1. Clarify requirements and scope

Ask questions to understand the specific use cases: Are we dealing with ride timestamps, driver schedules, or user notifications? What are the latency and consistency requirements?

2. Define storage strategy

Store all timestamps in UTC (or epoch time) in the database. Additionally, store the user's time zone identifier (e.g., 'America/New_York') separately if needed for display or scheduling.

3. Handle display and conversion

Convert UTC to the user's local time zone at the client or API layer using a reliable time zone database. Ensure the conversion respects DST rules and historical changes.

4. Address edge cases and trade-offs

Discuss handling of future events (e.g., scheduling a ride), time zone changes during a session, and the trade-offs between storing offsets vs. time zone IDs.

5. Testing and validation

Outline a testing strategy that includes unit tests for conversion logic, integration tests with different time zones, and monitoring for anomalies.

Key Points to Mention

  • Store timestamps in UTC to avoid ambiguity and simplify comparisons.
  • Use IANA time zone identifiers (e.g., 'Europe/London') rather than fixed offsets to handle DST correctly.
  • Convert to local time only at the presentation layer, not in the database or business logic.
  • Consider the user's time zone context: it may come from their profile, device, or the location of the event.
  • Handle edge cases like DST transitions, time zone changes during a trip, and scheduling future events.
  • Leverage existing libraries and databases (e.g., PostgreSQL's timestamptz, Java's java.time) to avoid reinventing the wheel.

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

Q4

How would you design the data model for recurring events and exceptions to a recurring series?

Data ModelingSystem Design
Author's notes

This is where I got a bit tangled.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements: what types of recurrence (daily, weekly, monthly), how exceptions are defined (modified or cancelled instances), and query patterns (e.g., fetching events for a date range). Then propose a data model that separates the recurrence rule from individual events, using a master event with an RRULE and an exceptions table for overrides or cancellations. Discuss trade-offs between storing expanded instances versus computing on the fly, and how to handle time zones and scalability.

Pro tip: Mention that you would store recurrence rules in a standard format like iCalendar RRULE to leverage existing libraries and ensure interoperability, and highlight the importance of indexing for efficient range queries.

1. Clarify Requirements

Ask about the types of recurrence patterns, how exceptions are defined (modified or cancelled instances), and the expected query patterns (e.g., fetching events for a date range).

2. Choose a Representation for Recurrence

Decide between storing a recurrence rule (e.g., RRULE) or pre-expanding instances. Discuss the trade-offs: rules are compact but require computation; expanded instances are fast to query but storage-heavy.

3. Design the Schema

Propose tables: one for the master event with recurrence rule, and one for exceptions (overrides or cancellations) linked to the master event and a specific occurrence date. Include fields for time zone, start/end times, and metadata.

4. Address Querying and Indexing

Explain how to efficiently query events for a date range, possibly using a hybrid approach: store expanded instances for near-term and compute for far-term, or use a materialized view. Mention indexing on date and event ID.

5. Discuss Trade-offs and Edge Cases

Cover trade-offs like storage vs. computation, handling time zones and DST, and how to manage updates to the recurrence rule (e.g., 'this and future' changes).

Key Points to Mention

  • Use of iCalendar RRULE standard for recurrence rules
  • Exceptions table for overrides and cancellations
  • Time zone handling and DST considerations
  • Query patterns and indexing strategies
  • Trade-offs between storing expanded instances vs. computing on the fly
  • Handling updates to recurring series (e.g., 'this and future' edits)

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

Q5

How would you shard the database for a calendar service, and what are the tradeoffs of sharding by user versus by calendar?

System DesignTechnical Trade-offs
Author's notes

Sharding by user ID is the obvious answer since most reads are per-user.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements and access patterns of the calendar service, then propose a sharding strategy that aligns with those patterns. Compare sharding by user versus by calendar, highlighting tradeoffs in query performance, scalability, and operational complexity. Conclude with a recommendation based on the most critical access patterns.

Pro tip: Emphasize that the choice depends on the dominant query pattern: if most queries are 'get all calendars for a user', sharding by user is better; if queries are 'get events for a specific calendar', sharding by calendar may be better. Also mention that a hybrid approach or secondary indexes can mitigate tradeoffs.

1. Clarify Requirements and Access Patterns

Ask about the scale (number of users, calendars, events), read/write ratio, and typical queries (e.g., fetch user's calendars, fetch events for a calendar, fetch events across calendars).

2. Propose Sharding by User

Explain that sharding by user_id ensures all data for a user is co-located, making queries like 'get all calendars for a user' efficient. Discuss potential hotspots for power users and the need for cross-shard queries for shared calendars.

3. Propose Sharding by Calendar

Explain that sharding by calendar_id distributes load more evenly and makes queries for a specific calendar's events efficient. Discuss the challenge of retrieving all calendars for a user, which may require a secondary index or scatter-gather.

4. Compare Tradeoffs

Contrast the two approaches in terms of query performance, scalability, operational complexity, and data consistency. Highlight that sharding by user optimizes user-centric reads but may cause hotspots; sharding by calendar optimizes calendar-centric reads but complicates user-level queries.

5. Recommend and Justify

Based on the clarified requirements, recommend one approach or a hybrid (e.g., shard by user but replicate calendar data for shared access). Justify with expected query patterns and scalability needs.

Key Points to Mention

  • Access patterns: user-centric vs. calendar-centric queries
  • Hotspotting and load distribution
  • Cross-shard queries and scatter-gather
  • Secondary indexes or denormalization to support alternate access paths
  • Scalability and operational complexity (rebalancing, resharding)
  • Consistency and transaction boundaries (e.g., sharing calendars across users)

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

Q6

How would you handle concurrent updates to the same event, such as two attendees RSVPing or two organizers editing simultaneously?

System DesignTechnical Trade-offs
Author's notes

Optimistic locking with a version field was my answer.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements and constraints, such as consistency needs and scale. Then discuss concurrency control mechanisms like optimistic locking, pessimistic locking, and CRDTs, and recommend a solution with trade-offs. Finally, explain how to handle conflicts and ensure data integrity.

Pro tip: Emphasize that the choice depends on the specific use case—for example, RSVPs can tolerate eventual consistency, while organizer edits may need stronger consistency. Mentioning real-world examples from Uber's domain (e.g., ride requests) can show practical insight.

1. Clarify Requirements

Ask about consistency requirements, scale, and latency expectations. Determine if the operation is read-heavy or write-heavy and if conflicts are frequent.

2. Identify Concurrency Issues

Explain the problems that can arise: lost updates, dirty reads, and write skew. Give examples like two attendees RSVPing simultaneously or two organizers editing the same event details.

3. Evaluate Concurrency Control Strategies

Discuss optimistic locking (versioning), pessimistic locking (database locks), and distributed approaches like CRDTs or last-write-wins. Compare their trade-offs in terms of consistency, latency, and complexity.

4. Recommend a Solution

Propose a specific approach based on the requirements. For example, use optimistic locking with version numbers for RSVPs, and a combination of locking and conflict resolution for organizer edits.

5. Handle Conflicts and Edge Cases

Describe how to detect and resolve conflicts, such as retrying with exponential backoff, merging changes, or notifying users. Mention monitoring and logging for conflict rates.

Key Points to Mention

  • Optimistic locking with version numbers or timestamps
  • Pessimistic locking and its impact on scalability
  • Distributed transactions and two-phase commit (and why they might be avoided)
  • CRDTs and eventual consistency for collaborative editing
  • Idempotency and deduplication of requests
  • Conflict resolution strategies (e.g., last-write-wins, merge policies)

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

Q7

How would you ensure idempotent delivery of calendar invites and notifications?

System DesignAPI & Integrations
Author's notes

Mentioned idempotency keys on the invite job and a dedup table keyed on (event_id, attendee_id, invite_version).

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by defining idempotency in the context of calendar invites and notifications, emphasizing the need to avoid duplicate events or alerts. Then, outline a strategy using unique identifiers, idempotency keys, and deduplication mechanisms at both the API and consumer levels. Finally, discuss how to handle retries and failures to ensure exactly-once semantics.

Pro tip: Mention that idempotency should be enforced at the lowest level possible, such as the database, using unique constraints or upserts, to prevent duplicates even under concurrent requests. Also, highlight the importance of monitoring and alerting on duplicate attempts to catch issues early.

1. Define Idempotency Requirements

Clarify what idempotency means for calendar invites and notifications: ensuring that repeated requests (e.g., due to retries) do not create duplicate events or send duplicate notifications. Discuss the impact of duplicates on user experience and system load.

2. Design Idempotent APIs

Use idempotency keys (e.g., a unique client-generated UUID) in API requests for creating invites or sending notifications. The server should store these keys and associated results to return the same response for repeated requests.

3. Implement Deduplication at Storage Layer

Enforce uniqueness constraints on event IDs or notification IDs in the database. Use upserts or conditional writes to ensure that even if the same request is processed multiple times, only one record is created.

4. Handle Retries and Failures

Design retry logic with exponential backoff and ensure that retries are safe. For asynchronous processing, use message queues with idempotent consumers that check for duplicates before processing.

5. Monitor and Test

Implement monitoring to detect duplicate attempts and alert on anomalies. Write tests that simulate duplicate requests and verify that only one event/notification is created.

Key Points to Mention

  • Idempotency keys: client-generated unique identifiers for each request.
  • Database unique constraints and upserts to prevent duplicate records.
  • Idempotent consumers in message queues (e.g., Kafka) that track processed message IDs.
  • Retry mechanisms with exponential backoff and jitter.
  • Exactly-once semantics vs. at-least-once with deduplication.
  • Monitoring and alerting for duplicate detection and resolution.

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