Back to LLD explorer
Distributed OOD Patterns: Observer, Strategy

WhatsApp / Chat System

Hard

Problem Summary

Design a chat application managing real-time connections, chat history, and dynamic user statuses.

Functional Scope

  • Deliver messages in real-time when recipient is online.
  • Queue messages for offline users and deliver them once they connect.
  • Support read receipts (Sent -> Delivered -> Read status).

Entity-Relationship (ER) Schema

User [1] <---> [*] UserConnection
User [1] <---> [*] ChatMessage
ChatMessage [1] <---> [1] MessageStatus

Design Approach

Protect the active connections directory using concurrent collections. Use message queues to isolate offline delivery logic from active socket threads.

Core Classes & Models

User (ID, active status, contacts)Message (Sender, Recipient, timestamp, contents, status)MessageService (Queues, routes messages)
Code Blueprint
public class Message {
    private String id;
    private String sender;
    private String recipient;
}