Functional
- A user can send a one to one message to another user.
- A user can create a group of up to 500 members.
- A user sees delivered and read receipts.
- A user receives messages sent while they were offline.
- A user can see who is online.
Non-functional
- Latency - message delivery under 200 ms at p99 for online users.
- Availability - 99.99% for the messaging service.
- Durability - a sent message is never lost, even if the recipient is offline for a week.
- Ordering - messages within one conversation appear in causal order.
- Scale - 50 million DAU, 40 messages per user per day.
- Security - end to end encryption; the server cannot read message content.
Notice the ordering and E2E encryption requirements alone eliminate several architectures - that is why writing them down first matters.