Lesson 8 of 17
38. Design a Chat App (WhatsApp)

38.7 How do message IDs and ordering work?

3 min read+10 XP

Two IDs per message, each solving one problem:

  • client_id (made by the sender's app, unique per device): de-duplication. Mobile networks drop acks; the app retries; the server's unique key (chat, sender, client_id) turns the retry into a no-op. In the chapter's code, the second send of a-002 returns "duplicate" with the same seq, and the chat still has 2 messages.
  • seq (assigned by the server, per chat): ordering. Every member sees messages in seq order; gaps tell a client it missed something; "sync after N" is exact.

Assigning seq needs one writer per chat: route all messages for a chat to the shard that owns it (Chapter 15), and use an atomic counter there. That's fine because even busy groups send a few messages a second, not thousands.

The sender's app shows its own message immediately (optimistically) with a clock icon, then replaces it with the server's seq and one tick when the ack arrives.

Memory code: "The client ID stops repeats; the chat's sequence number sets the order."