← Airbnb Interview Insights

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

SeniorPrefer not to say
Jun 2026

Summary

System design round at Airbnb for a software engineering role. The question was a classic chat system design but the scope they expected you to cover was pretty wide, from WebSocket tradeoffs to sharding strategy, and I felt like I was racing the clock the whole time.

Questions Asked (1)

Q1

Design a chat system that supports both 1:1 and group messaging at scale. Walk through your requirements, architecture decisions, and how you'd handle things like message delivery guarantees, online presence, and read receipts.

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 functional and non-functional requirements, then propose a high-level architecture that separates concerns (e.g., connection handling, message routing, storage). Dive into specific challenges like delivery guarantees, presence, and read receipts, explaining trade-offs and scaling strategies.

Pro tip: Emphasize idempotency and deduplication for message delivery, and discuss how to handle the 'last seen' and read receipt updates efficiently without overwhelming the system.

1. Clarify Requirements

Ask about scale (DAU, messages per second), latency expectations, delivery guarantees (at-least-once, exactly-once), and features like group size limits, media support, and offline handling.

2. High-Level Architecture

Propose a layered architecture: clients connect via WebSockets to gateway servers, which route messages through a message service that persists to a database and pushes to recipients via a pub/sub system.

3. Data Modeling and Storage

Design schemas for users, conversations, messages, and receipts. Choose databases (e.g., Cassandra for messages, Redis for presence) and discuss partitioning and indexing for efficient retrieval.

4. Delivery Guarantees and Reliability

Explain how to ensure message delivery using acknowledgments, retries, and idempotent message IDs. Discuss ordering, offline storage, and handling failures.

5. Presence and Read Receipts

Describe how to track online status with heartbeats and pub/sub, and how to update read receipts efficiently, possibly batching updates and using a separate service.

Key Points to Mention

  • WebSocket connections for real-time bidirectional communication, with load balancing and sticky sessions or connection routing.
  • Message queue (e.g., Kafka) for decoupling producers and consumers, ensuring durability and scalability.
  • Database choices: Cassandra for write-heavy message storage, Redis for presence and caching.
  • Idempotency and deduplication using unique message IDs to handle retries.
  • Presence service using heartbeats and pub/sub to broadcast online/offline status.
  • Read receipts: efficient updates via batching and asynchronous processing to avoid write amplification.

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