← Reddit Interview Insights

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

SeniorPrefer not to say
May 2026

Summary

Reddit system design round, one big question about building a live chat system from scratch. Covered a lot of ground and I think I did okay but the group chat fan-out piece got a bit messy toward the end.

Questions Asked (1)

Q1

Design a live chat system that supports both 1:1 and group conversations, including message delivery, presence indicators, read receipts, message history, and offline push notifications.

System DesignTechnical Trade-offsAPI & Integrations
Author's notes

I started with requirements and that part went fine.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then design a high-level architecture that separates real-time messaging (WebSockets) from persistent storage and push notifications. Focus on the message flow for 1:1 and group chats, and discuss trade-offs for delivery guarantees, presence, and read receipts.

Pro tip: Emphasize idempotency and ordering: use client-generated message IDs and per-conversation sequence numbers to handle retries and ensure consistent ordering, which is critical for a reliable chat system.

1. Clarify Requirements and Scale

Ask about expected user base, message volume, latency requirements, and features like message editing or typing indicators. Define scope for 1:1 vs group chats and offline scenarios.

2. High-Level Architecture

Propose a microservices-based architecture with separate services for connection management (WebSocket gateways), message handling, presence, and notifications. Use a message queue (e.g., Kafka) for asynchronous processing.

3. Data Model and Storage

Design schemas for users, conversations, messages, and receipts. Choose databases: Cassandra for messages (high write throughput), Redis for presence and recent messages, and a relational DB for user metadata.

4. Message Delivery and Real-Time Communication

Explain how messages are routed: sender -> WebSocket gateway -> message service -> persistence -> fan-out to recipients via their gateways. Discuss delivery guarantees (at-least-once, idempotency) and ordering.

5. Presence, Read Receipts, and Offline Notifications

Detail presence tracking using heartbeats and Redis pub/sub. For read receipts, update per-conversation read markers. For offline users, trigger push notifications via APNs/FCM and store undelivered messages.

Key Points to Mention

  • WebSocket for real-time bidirectional communication, with fallback to long polling
  • Message ordering and idempotency using client-generated IDs and sequence numbers
  • Fan-out strategies for group chats: write to each recipient's inbox vs. pull on read
  • Presence service using Redis with TTL and pub/sub for scalability
  • Read receipts: per-conversation read markers and efficient updates
  • Offline push notifications: integration with APNs/FCM and handling undelivered messages

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