TODO
Functional requirements
- Messenger should support one-on-one conversations between users.
- Messenger should keep track of online/offline statuses of its users.
- Messenger should support persistent storage of chat history.
Non-functional requirements
- Users should have real-time chat experience with minimum latency.
- Our system should be highly consistent; users should be able to see the
same chat history on all their devices.
- Messenger’s high availability is desirable; we can tolerate lower availability
in the interest of consistency.
Extended requirements
- Group Chats: Messenger should support multiple people talking to each
other in a group.
- Push notifications: Messenger should be able to notify users of new
messages when they are offline.