Design Sent, Delivered and Read Receipts for a Mobile Messaging App

Quick Overview

A system design question about the sent, delivered and read indicators in a large mobile messaging app, for one-to-one and group chats. It tests how status updates travel from the recipient's device back to the sender, offline and multi-device behaviour, keeping status monotonic, and controlling the volume of status events.

Design Sent, Delivered and Read Receipts for a Mobile Messaging App

Company: Amazon

Role: Software Engineer

Category: System Design

Difficulty: medium

Interview Round: Other

Design the message-status feature of a large mobile messaging app. When someone sends a message, their screen shows its progress: accepted by the server, delivered to the recipient's device, and read by the recipient. Status should update within moments when both people are online, and catch up correctly when either of them has been offline. Take this as the standard scope unless the interviewer changes it: - The core chat system already exists: clients hold persistent connections to chat servers, and messages are stored until the recipient's device has received them. Your job is the status (receipt) flow built on top of it. - One-to-one chats must be fully covered; group chats come in once the one-to-one design is settled. - The app has a very large user base, so status events are among the highest-volume traffic in the whole system. ```hint Follow the status home Trace one message to the recipient's phone, then ask how the news that it arrived, and later that it was read, travels back to the sender, including when the sender is offline. ``` ```hint Count before you store Compare the number of status events a busy group chat produces with the number of messages in it, and ask which of those events the sender actually needs one by one. ``` ### Constraints and Clarifications - No traffic figures come with the prompt; state your own assumptions. - Status only moves forward: a message shown as read must never fall back to delivered. - Treat privacy settings, multi-device behaviour and encryption as open questions to raise, not as decided policy. ### Clarifying Questions - In group chats, does the sender see per-member status, only an aggregate such as "read by everyone", or both? - Can users switch read receipts off, and if they do, are other people's receipts hidden from them too? - Can one account be signed in on several devices, and does reading on any of them count as read? - Are messages end-to-end encrypted, which limits what the server can inspect? - How quickly must status reach a sender who comes back online after a long time away? - What scale should we design for? ### What a Strong Answer Covers - A clear status lifecycle and a rule that keeps it monotonic - The end-to-end flow of status events from the recipient's device to the sender, with each side online or offline - What the server stores about status, for how long, and why - Volume control: batching, cumulative "read up to here" markers, and group fan-out - Duplicates, reordering and retries handled with idempotent updates, plus consistency across one user's devices - Privacy and encryption implications raised as questions and reflected in the design ### Follow-up Questions - In a group of several hundred members, how do you show "read by everyone" without flooding the sender's device? - The sender has the app open on a phone and a laptop. How do both end up showing the same status? - A user turns read receipts off. What exactly changes on the wire and in storage? - How would you detect that receipts have quietly stopped arriving for some users after a release?

Overview: A system design question about the sent, delivered and read indicators in a large mobile messaging app, for one-to-one and group chats. It tests how status updates travel from the recipient's device back to the sender, offline and multi-device behaviour, keeping status monotonic, and controlling the volume of status events.

Amazon logo
Amazon
Aug 27, 2026
mediumSoftware EngineerOtherSystem Design
0
0

Design the message-status feature of a large mobile messaging app. When someone sends a message, their screen shows its progress: accepted by the server, delivered to the recipient's device, and read by the recipient. Status should update within moments when both people are online, and catch up correctly when either of them has been offline.

Take this as the standard scope unless the interviewer changes it:

  • The core chat system already exists: clients hold persistent connections to chat servers, and messages are stored until the recipient's device has received them. Your job is the status (receipt) flow built on top of it.
  • One-to-one chats must be fully covered; group chats come in once the one-to-one design is settled.
  • The app has a very large user base, so status events are among the highest-volume traffic in the whole system.

Constraints and Clarifications

  • No traffic figures come with the prompt; state your own assumptions.
  • Status only moves forward: a message shown as read must never fall back to delivered.
  • Treat privacy settings, multi-device behaviour and encryption as open questions to raise, not as decided policy.

Clarifying Questions Guidance

  • In group chats, does the sender see per-member status, only an aggregate such as "read by everyone", or both?
  • Can users switch read receipts off, and if they do, are other people's receipts hidden from them too?
  • Can one account be signed in on several devices, and does reading on any of them count as read?
  • Are messages end-to-end encrypted, which limits what the server can inspect?
  • How quickly must status reach a sender who comes back online after a long time away?
  • What scale should we design for?

What a Strong Answer Covers Guidance

  • A clear status lifecycle and a rule that keeps it monotonic
  • The end-to-end flow of status events from the recipient's device to the sender, with each side online or offline
  • What the server stores about status, for how long, and why
  • Volume control: batching, cumulative "read up to here" markers, and group fan-out
  • Duplicates, reordering and retries handled with idempotent updates, plus consistency across one user's devices
  • Privacy and encryption implications raised as questions and reflected in the design

Follow-up Questions Guidance

  • In a group of several hundred members, how do you show "read by everyone" without flooding the sender's device?
  • The sender has the app open on a phone and a laptop. How do both end up showing the same status?
  • A user turns read receipts off. What exactly changes on the wire and in storage?
  • How would you detect that receipts have quietly stopped arriving for some users after a release?