{
  "id": 9342622,
  "title": "📱 Vamos aprender System Design desenhando o WhatsApp",
  "url": "https://urgent.news/2026/09/23/vamos-aprender-system-design-desenhando-o-whatsapp",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-23T13:48:22.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/freitasmp/vamos-aprender-system-design-desenhando-o-whatsapp-1acb"
  },
  "original_language": "pt",
  "account": "WhatsApp Design - A Step-by-Step Approach\n\nIn this article, we explore how WhatsApp can be designed step by step, starting with the real system problems and deriving the necessary engineering concepts to solve them. Adaptive learning through problems 👨🏾💻 Pedro & 🤵🏾♂️ João\n\nIntroduction\nThis is not a traditional System Design lesson. It's a record of an actual learning session where Pedro attempted to design a system similar to WhatsApp step by step. Pedro wasn't given a list of concepts beforehand. He received problems. At each problem, he tried to find a solution. Some hypotheses were correct. Others were incomplete. Others were wrong. And it was precisely from these answers that João decided what the next question should be. The sequence was: Problem → hypothesis → consequence → doubt → correction → discovery → concept → new problem. The goal of this document is to preserve this process.\n\nStarting with Messaging\nJoão: Pedro, let's start with the simplest. Two users want to exchange a message. How does this message go from one person's phone to the other's phone? 👨🏾💻 Pedro: The message goes through the Internet, reaches our server, and then goes to the other user's phone. 🤵🏾♂️ João: Right. But now we have a problem. If the user is constantly receiving messages, do we need to open a new connection for each message? 👨🏾💻 Pedro: No. We need a persistent connection. 🤵🏾♂️ João: And which technology could allow continuous communication between the client and the server? 👨🏾💻 Pedro: WebSocket. 🤵🏾♂️ João: Exactly. Here we discovered the first important concept: WebSocket as a persistent, bidirectional communication channel. But immediately, this solution created another problem.\n\nHandling Multiple Servers\nJoão: Now imagine we have thousands or millions of users. One server wouldn't be enough. We would need several WebSocket servers. How do we distribute the connections? 👨🏾💻 Pedro: Load Balancer. 🤵🏾♂️ João: Yes. The Load Balancer can distribute new connections among the servers. But now, think: Pedro is connected to server A. Another server receives a message intended for Pedro. How does that server know where Pedro is? 👨🏾💻 Pedro: Maybe the servers can know about each other? 🤵🏾♂️ João: They could have communication mechanisms between them, but this starts to create a distributed state problem. If each server only remembers the users connected on its own memory, what happens when another server needs that information? 👨🏾💻 Pedro: We need some shared information. 🤵🏾♂️ João: Exactly. Redis was our first step towards a shared state layer.",
  "summary": "📱 System Design do WhatsApp Neste artigo, mostramos como o WhatsApp pode ser desenhado passo a passo, começando pelos problemas reais do sistema e descobrindo, a partir deles, os conceitos de engenharia necessários para resolvê-los. Uma aprendizagem adaptativa através dos problemas 👨🏾💻 Pedro & 🤵🏾♂️ João Introdução Esta não é uma aula tradicional de System Design. É o registro de uma sessão…",
  "key_points": [
    "WhatsApp designed step-by-step, starting with messaging problem",
    "WebSocket as persistent, bidirectional communication channel discovered",
    "Load Balancer used to distribute connections among servers"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}