<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: NOEMA</title>
    <description>The latest articles on DEV Community by NOEMA (@noema).</description>
    <link>https://dev.to/noema</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3874528%2F8f17af8b-458c-4bb8-8310-bd42afb81eb1.jpg</url>
      <title>DEV Community: NOEMA</title>
      <link>https://dev.to/noema</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/noema"/>
    <language>en</language>
    <item>
      <title>Most People Learn System Design the Wrong Way</title>
      <dc:creator>NOEMA</dc:creator>
      <pubDate>Mon, 13 Apr 2026 11:40:18 +0000</pubDate>
      <link>https://dev.to/noema/most-people-learn-system-design-the-wrong-way-i04</link>
      <guid>https://dev.to/noema/most-people-learn-system-design-the-wrong-way-i04</guid>
      <description>&lt;p&gt;Most People Learn System Design the Wrong Way&lt;/p&gt;

&lt;p&gt;I did too.&lt;/p&gt;

&lt;p&gt;I spent weeks reading theory, watching videos, and still couldn’t design even a basic system.&lt;/p&gt;

&lt;p&gt;Here’s what I was doing wrong&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3tymk7tqttl4svrwlon.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3tymk7tqttl4svrwlon.jpeg" alt="A split-screen illustration showing the difference between poor and effective system design learning. The left side depicts a messy, chaotic diagram with scattered components and unclear flow, representing confusion. The right side shows a clean, structured system architecture with clearly connected components, representing clarity and proper understanding of system design." width="800" height="800"&gt;&lt;/a&gt; and what actually works.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Starting with theory first
&lt;/h2&gt;

&lt;p&gt;I began with concepts like CAP theorem and consistency models.&lt;/p&gt;

&lt;p&gt;It felt productive, but nothing clicked.&lt;/p&gt;

&lt;p&gt;System design is learned by building systems, not memorizing concepts.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Jumping into massive architectures
&lt;/h2&gt;

&lt;p&gt;I tried understanding systems like Netflix and Uber too early.&lt;/p&gt;

&lt;p&gt;They’re too complex when you’re just starting out.&lt;/p&gt;

&lt;p&gt;Start small. Focus on features, not entire platforms.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Memorizing components instead of understanding flow
&lt;/h2&gt;

&lt;p&gt;I knew terms like load balancer, cache, and database.&lt;/p&gt;

&lt;p&gt;But I didn’t understand how data actually moves through a system.&lt;/p&gt;

&lt;p&gt;Flow &amp;gt; components.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Ignoring trade-offs
&lt;/h2&gt;

&lt;p&gt;There is no perfect design.&lt;/p&gt;

&lt;p&gt;Every decision is a trade-off between latency, consistency, and cost.&lt;/p&gt;

&lt;p&gt;This is what system design is really about.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Not drawing systems
&lt;/h2&gt;

&lt;p&gt;I was just reading and watching.&lt;/p&gt;

&lt;p&gt;The moment I started drawing architectures, everything became clearer.&lt;/p&gt;

&lt;p&gt;If you can’t draw it, you don’t understand it.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Treating it like a subject, not a skill
&lt;/h2&gt;

&lt;p&gt;System design isn’t something you “finish”.&lt;/p&gt;

&lt;p&gt;It’s something you build over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually works
&lt;/h2&gt;

&lt;p&gt;If you’re learning system design right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start simple&lt;/li&gt;
&lt;li&gt;Focus on flow&lt;/li&gt;
&lt;li&gt;Think in trade-offs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else follows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;System design isn’t about memorizing concepts or copying big architectures.&lt;/p&gt;

&lt;p&gt;It’s about understanding how systems behave, making trade-offs, and applying that thinking to real problems.&lt;/p&gt;

&lt;p&gt;The earlier you start applying these ideas in your projects, the faster you improve.&lt;/p&gt;




&lt;p&gt;What’s one mistake you made while learning system design?&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>programming</category>
      <category>beginners</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How WhatsApp Handles 1:1 Messaging at Scale (System Design Explained)</title>
      <dc:creator>NOEMA</dc:creator>
      <pubDate>Sun, 12 Apr 2026 07:29:09 +0000</pubDate>
      <link>https://dev.to/noema/how-whatsapp-handles-11-messaging-at-scale-system-design-explained-5bcp</link>
      <guid>https://dev.to/noema/how-whatsapp-handles-11-messaging-at-scale-system-design-explained-5bcp</guid>
      <description>&lt;p&gt;At first glance, sending a message on WhatsApp feels instant and simple.&lt;/p&gt;

&lt;p&gt;But behind that single action lies a highly optimized distributed system designed for low latency, high reliability, and massive scale.&lt;/p&gt;

&lt;p&gt;In this article, we break down how WhatsApp handles 1:1 messaging step by step.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. High Concurrency with Erlang
&lt;/h2&gt;

&lt;p&gt;WhatsApp uses Erlang as its backend language.&lt;/p&gt;

&lt;p&gt;Erlang is designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handling millions of concurrent processes&lt;/li&gt;
&lt;li&gt;Fault tolerance&lt;/li&gt;
&lt;li&gt;Distributed systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it ideal for real-time messaging at scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Persistent Connections via Gateway Servers
&lt;/h2&gt;

&lt;p&gt;Each user maintains a long-lived connection with WhatsApp servers using TCP.&lt;/p&gt;

&lt;p&gt;These are called gateway or socket servers.&lt;/p&gt;

&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No need to reconnect for every message&lt;/li&gt;
&lt;li&gt;Lower latency&lt;/li&gt;
&lt;li&gt;Instant delivery&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Session Service (User-to-Server Mapping)
&lt;/h2&gt;

&lt;p&gt;A session service tracks which user is connected to which server.&lt;/p&gt;

&lt;p&gt;So when User A sends a message to User B:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The system routes it directly to the correct server&lt;/li&gt;
&lt;li&gt;No unnecessary broadcasting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This improves efficiency and scalability.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Message Flow (End-to-End Path)
&lt;/h2&gt;

&lt;p&gt;User A → Gateway → Chat Server → Session Service → Receiver Server → Gateway → User B&lt;/p&gt;

&lt;p&gt;Each component ensures fast and reliable delivery.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Messaging Protocol
&lt;/h2&gt;

&lt;p&gt;WhatsApp uses a modified version of XMPP with persistent communication.&lt;/p&gt;

&lt;p&gt;This enables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight communication&lt;/li&gt;
&lt;li&gt;Low overhead&lt;/li&gt;
&lt;li&gt;Real-time delivery&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Message Queue
&lt;/h2&gt;

&lt;p&gt;Messages are placed into a queue before delivery.&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handles traffic spikes&lt;/li&gt;
&lt;li&gt;Prevents message loss&lt;/li&gt;
&lt;li&gt;Decouples sender and receiver&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Delivery Guarantees
&lt;/h2&gt;

&lt;p&gt;WhatsApp uses acknowledgements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sent → server received&lt;/li&gt;
&lt;li&gt;Delivered → reached recipient device&lt;/li&gt;
&lt;li&gt;Read → opened by user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures reliability and transparency.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. End-to-End Encryption
&lt;/h2&gt;

&lt;p&gt;Messages are encrypted on the sender’s device and decrypted only on the receiver’s device.&lt;/p&gt;

&lt;p&gt;This ensures privacy and security.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Offline Handling
&lt;/h2&gt;

&lt;p&gt;If the receiver is offline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Message is stored temporarily&lt;/li&gt;
&lt;li&gt;Push notification is triggered&lt;/li&gt;
&lt;li&gt;Delivered when user reconnects&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. Local Storage
&lt;/h2&gt;

&lt;p&gt;Messages are stored locally using SQLite.&lt;/p&gt;

&lt;p&gt;Advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast access&lt;/li&gt;
&lt;li&gt;Offline availability&lt;/li&gt;
&lt;li&gt;Smooth user experience&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. Scalability
&lt;/h2&gt;

&lt;p&gt;Most backend services are stateless.&lt;/p&gt;

&lt;p&gt;This allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Horizontal scaling&lt;/li&gt;
&lt;li&gt;Load distribution&lt;/li&gt;
&lt;li&gt;Handling billions of messages&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;What seems simple is actually a system involving gateways, queues, session mapping, and distributed services.&lt;/p&gt;

&lt;p&gt;Understanding this is key to mastering system design.&lt;/p&gt;




&lt;p&gt;If you found this helpful, follow for more real-world system design breakdowns.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>backend</category>
      <category>distributedsystems</category>
      <category>systemdesign</category>
    </item>
  </channel>
</rss>
