Design a hot-listing waitlist API
Company: Airbnb
Role: Software Engineer
Category: System Design
Difficulty: hard
Interview Round: Onsite
Design a waitlist API for high-demand listings. When a user wants a date that is unavailable for a given listing, they can join a per-listing, per-date waitlist; when inventory becomes available, notify waitlisted users. Define REST/gRPC endpoints, request/response schemas, data models, and storage. Explain ordering/fairness (e.g., FIFO with priority tiers), capacity limits, deduplication, idempotency, and how users join/leave the waitlist. Describe the notification subsystem (push/email/SMS), delivery guarantees, retries, and user preferences. Address concurrency and race conditions to prevent double-booking; discuss transactions, optimistic locking, and exactly-once vs at-least-once semantics. Cover scalability for spikes, sharding strategy, backpressure, rate limiting, observability, and end-to-end testing.
Quick Answer: This question evaluates proficiency in system design competencies such as API design (REST and gRPC), data modeling for per-listing per-date inventory, concurrency control and race-condition prevention, notification delivery, ordering and fairness policies, scalability and observability, and end-to-end testing strategies.