Chat
Design a real-time in-app messaging system that allows users to send and receive messages seamlessly. The system should support multiple conversations while ensuring reliability, responsiveness, and scalability.

Key Requirements
- 1-to-1 Messaging: Enable direct, real-time messaging between users.
- Multiple Threads: Users can manage multiple conversations, accessible from the home screen.
- Unread Indicators & Previews: Display unread message counts and the latest message preview for each thread on the home screen.
- Offline Support: Cache past messages and queue unsent messages for automatic retry when online.
- Pagination: Efficiently load and display message history, handling long conversations smoothly.
- Media Support: Enable sending and receiving photos and videos within conversations.
Key Challenges
Building a messaging system introduces several mobile client challenges:
- Real-Time Synchronization: Ensure messages appear instantly while minimizing network load.
- State Management: Maintain message order, prevent duplication, and update delivery/read receipts accurately.
- Scalability: Support a growing user base, large message histories, and frequent updates efficiently.
Design Considerations
- What user experience expectations should this messaging system meet?
- How should the client handle real-time message delivery and synchronization?
- Which client-side architecture pattern (e.g., MVVM, Redux) best suits messaging data management?
- How should the app persist chat history for fast retrieval and offline access?
- What should the client-server contract include for efficient communication?
- How should push notifications be integrated for reliable message alerts?
- How can pagination be optimized for performance and usability?
- What failure scenarios should be anticipated, and how should the client handle them gracefully?