← Meta Interview Insights

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

SeniorRejected
May 2026

Summary

System design round at Meta for a software engineer role. The prompt was an Uber-like taxi service with a twist on the driver matching flow, and I left feeling pretty confident I bombed it.

Questions Asked (1)

Q1

Design a ride-hailing service where a trip request is broadcast to multiple drivers simultaneously, the user selects a driver from those who respond, and the chosen driver must then confirm acceptance before the ride is booked.

System DesignTechnical Trade-offsData Modeling
Author's notes

My pacing was terrible.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying functional and non-functional requirements, then design the core components: a broadcast service, a driver response handler, and a booking state machine. Focus on the state transitions and consistency mechanisms (e.g., distributed locks or optimistic concurrency) to handle concurrent responses and ensure the chosen driver confirms before booking.

Pro tip: Explicitly discuss how you handle the race condition where multiple drivers respond simultaneously and the user selects one—use a two-phase commit or saga pattern to avoid double-booking. Also, mention how you'd handle driver timeouts and retries to maintain a good user experience.

1. Clarify Requirements and Scope

Ask about scale (e.g., number of concurrent trips), latency requirements, and consistency guarantees. Define the key entities: user, driver, trip request, and booking.

2. High-Level Architecture

Sketch the main components: API gateway, trip service, driver matching service, notification service, and a database for trip state. Explain how a trip request is broadcast to nearby drivers via a pub/sub system.

3. Detailed Design of Broadcast and Selection

Describe how drivers receive the request (e.g., WebSocket or push notification) and how their responses are collected. Design the user selection flow and the subsequent driver confirmation step, including timeouts and retries.

4. Data Model and State Management

Define the trip state machine (e.g., REQUESTED, BROADCASTED, DRIVER_SELECTED, CONFIRMED, BOOKED, CANCELLED). Specify the database schema and how you ensure atomic state transitions using transactions or distributed locks.

5. Trade-offs and Scalability

Discuss trade-offs between consistency and availability (e.g., using a strongly consistent store vs. eventual consistency). Address scaling the broadcast to many drivers and handling failures (e.g., driver goes offline after selection).

Key Points to Mention

  • Use of a pub/sub or message queue (e.g., Kafka, Redis Pub/Sub) for broadcasting trip requests to multiple drivers.
  • Handling concurrent driver responses and user selection with optimistic concurrency control or distributed locks to prevent double-booking.
  • Designing a trip state machine with clear transitions and idempotent operations to handle retries and failures.
  • Implementing timeouts for driver responses and user selection, with fallback mechanisms (e.g., re-broadcast if no driver confirms).
  • Ensuring scalability by sharding trip data and using geospatial indexing for driver proximity queries.
  • Considering consistency models: strong consistency for booking vs. eventual consistency for driver location updates.

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