38. Design a Chat App (WhatsApp)
1
The interview prompt2
38.1 What do you ask first?3
38.2 How big is this, really?4
38.3 What are the doors?5
38.4 What do we store?6
38.5 What does the whole system look like?7
38.6 How does the WebSocket gateway work?8
38.7 How do message IDs and ordering work?9
38.8 How do delivery and read ticks work?10
38.9 How does offline delivery work?11
38.10 How does group chat work?12
38.11 How does media work?13
38.12 What would you say in the last five minutes?14
Score yourself15
Variations to practise16
Sources17
Code lab38. Design a Chat App (WhatsApp)
38.4 What do we store?
3 min read+10 XP
messages chat_id, seq, sender, client_id, ciphertext, sent_at (sharded by chat_id)
unique (chat_id, sender, client_id) (de-duplication)
cursors (user, device, chat_id) → last delivered seq, last read seq
chats chat_id, members, type (direct | group), group key info
sessions (user, device) → gateway server (in-memory store, TTL)
devices user → devices, push tokens
media encrypted blobs in object storage; the message carries the blob ID and its key
Interviewer pushback:
- "Why a sequence number per chat instead of timestamps?" → Clocks on phones and servers disagree, and two messages can share a millisecond. A per-chat counter assigned by the server gives one clear order for everyone in the chat and makes "give me everything after 2" exact.
Memory code: "One socket per device; every message gets a client ID and a chat sequence number."