<?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: Mohamed Galhoum</title>
    <description>The latest articles on DEV Community by Mohamed Galhoum (@muohlag).</description>
    <link>https://dev.to/muohlag</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4173592%2F8a9a9c4e-e17b-41c8-8a91-b381bb59360b.jpeg</url>
      <title>DEV Community: Mohamed Galhoum</title>
      <link>https://dev.to/muohlag</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muohlag"/>
    <language>en</language>
    <item>
      <title>Vertical vs. Horizontal Scaling: How to Handle More Traffic 🚀</title>
      <dc:creator>Mohamed Galhoum</dc:creator>
      <pubDate>Fri, 16 Oct 2026 12:08:15 +0000</pubDate>
      <link>https://dev.to/muohlag/vertical-vs-horizontal-scaling-how-to-handle-more-traffic-2hhe</link>
      <guid>https://dev.to/muohlag/vertical-vs-horizontal-scaling-how-to-handle-more-traffic-2hhe</guid>
      <description>&lt;p&gt;As your application grows, a single server may struggle to handle increasing traffic, leading to slower responses, timeouts, and downtime.&lt;/p&gt;

&lt;p&gt;In system design, there are two main approaches to scaling: &lt;strong&gt;Vertical Scaling&lt;/strong&gt; and &lt;strong&gt;Horizontal Scaling&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Vertical Scaling (Scale Up) ⬆️
&lt;/h2&gt;

&lt;p&gt;Vertical scaling means upgrading an existing server by adding more CPU, RAM, or storage.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      Users
        |
        v
  +-------------+
  | Web Server  |
  | More CPU/RAM|
  +-------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;strong&gt;Advantages:&lt;/strong&gt; Simple to implement, fewer architectural changes, and easier state management.&lt;/p&gt;

&lt;p&gt;❌ &lt;strong&gt;Disadvantages:&lt;/strong&gt; Hardware limitations, potentially expensive upgrades, and a single point of failure if only one server exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Horizontal Scaling (Scale Out) ➡️
&lt;/h2&gt;

&lt;p&gt;Horizontal scaling means adding more servers to distribute the workload.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          Users
            |
            v
     +--------------+
     | Load Balancer|
     +--------------+
       /     |     \
      v      v      v
    App 1  App 2  App 3
       \     |     /
         Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;strong&gt;Advantages:&lt;/strong&gt; More capacity, flexible scaling, and improved availability when designed with redundancy.&lt;/p&gt;

&lt;p&gt;❌ &lt;strong&gt;Disadvantages:&lt;/strong&gt; Greater complexity, distributed state management, and potential bottlenecks in shared dependencies such as databases.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Why Do We Need a Load Balancer?
&lt;/h2&gt;

&lt;p&gt;A load balancer distributes incoming requests across multiple application servers.&lt;/p&gt;

&lt;p&gt;It helps to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Distribute traffic&lt;/strong&gt; across available instances.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perform health checks&lt;/strong&gt; and avoid routing new requests to unhealthy servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve availability&lt;/strong&gt; when an application instance fails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support horizontal scaling&lt;/strong&gt; as new servers are added.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember: the load balancer and database can also become bottlenecks or single points of failure if they aren't designed appropriately.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Quick Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Vertical Scaling&lt;/th&gt;
&lt;th&gt;Horizontal Scaling&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Upgrade one server&lt;/td&gt;
&lt;td&gt;Add more servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simpler architecture&lt;/td&gt;
&lt;td&gt;More complex architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Limited by machine capacity&lt;/td&gt;
&lt;td&gt;Capacity distributed across machines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local state is often simpler&lt;/td&gt;
&lt;td&gt;Shared state may be required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Good for simpler workloads&lt;/td&gt;
&lt;td&gt;Useful for growing workloads&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Final Thoughts 💡
&lt;/h2&gt;

&lt;p&gt;Vertical scaling makes one server more powerful, while horizontal scaling distributes work across multiple servers.&lt;/p&gt;

&lt;p&gt;In practice, we can combine both approaches. The right choice depends on traffic, cost, performance, and availability requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My advice:&lt;/strong&gt; Start simple, measure your bottlenecks, optimize first, and scale when necessary.&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>🚀 React List Virtualization: Boost Performance When Rendering Thousands of Items</title>
      <dc:creator>Mohamed Galhoum</dc:creator>
      <pubDate>Sat, 10 Oct 2026 06:50:28 +0000</pubDate>
      <link>https://dev.to/muohlag/react-list-virtualization-boost-performance-when-rendering-thousands-of-items-3e10</link>
      <guid>https://dev.to/muohlag/react-list-virtualization-boost-performance-when-rendering-thousands-of-items-3e10</guid>
      <description>&lt;p&gt;🚀 &lt;strong&gt;React Performance Tip: List Virtualization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rendering thousands of items in React can hurt performance, increase DOM size, and make scrolling feel sluggish.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;The solution? List Virtualization!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of rendering every item in a large list, virtualization renders only the items currently visible in the viewport, plus a small buffer.&lt;/p&gt;

&lt;p&gt;🔥 &lt;strong&gt;Popular React Virtualization Libraries:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;TanStack Virtual&lt;/strong&gt; — Flexible, lightweight, and highly customizable.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;react-window&lt;/strong&gt; — A simple option for efficiently rendering large lists and grids.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;React Virtuoso&lt;/strong&gt; — Great for chat applications, dynamic-height lists, and infinite feeds.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;MUI X Data Grid&lt;/strong&gt; — Ideal for data-heavy tables with built-in virtualization.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;AG Grid&lt;/strong&gt; — Powerful for enterprise applications with large datasets.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Why use list virtualization?&lt;/strong&gt;&lt;br&gt;
✅ Reduce the number of DOM elements.&lt;br&gt;
✅ Improve rendering performance.&lt;br&gt;
✅ Make scrolling smoother.&lt;br&gt;
✅ Reduce the work required for layout and painting.&lt;br&gt;
✅ Build more responsive interfaces for large datasets.&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;Pro tip:&lt;/strong&gt; Virtualization works best when combined with stable keys, efficient React components, and proper data fetching strategies.&lt;/p&gt;

&lt;p&gt;🎯 If you're building a React application that displays thousands of records, consider virtualization before rendering the entire list at once!&lt;/p&gt;

</description>
      <category>react</category>
      <category>performance</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>System Design Fundamentals: The 5 Dimensions of Scalability — Data, Complexity &amp; Geographic Growth</title>
      <dc:creator>Mohamed Galhoum</dc:creator>
      <pubDate>Fri, 09 Oct 2026 17:14:48 +0000</pubDate>
      <link>https://dev.to/muohlag/system-design-fundamentals-the-5-dimensions-of-scalability-data-complexity-geographic-growth-4eld</link>
      <guid>https://dev.to/muohlag/system-design-fundamentals-the-5-dimensions-of-scalability-data-complexity-geographic-growth-4eld</guid>
      <description>&lt;p&gt;Let’s continue our discussion about &lt;strong&gt;Scalability&lt;/strong&gt; and its different dimensions.&lt;/p&gt;

&lt;p&gt;Last time, we discussed the first two dimensions of system growth. Today, let’s explore the remaining three.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;3. Growth in Data Volume&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over time, any successful system will likely start dealing with increasingly large amounts of data.&lt;/p&gt;

&lt;p&gt;Consider a platform like YouTube. Every day, the platform receives new videos, new users, new comments, watch history records, logs, metadata, and much more.&lt;/p&gt;

&lt;p&gt;As a result, the amount of data continues to grow over time.&lt;/p&gt;

&lt;p&gt;This creates new challenges in storage, databases, data processing, and data retrieval.&lt;/p&gt;

&lt;p&gt;We need to design our systems to handle this increasing data volume without significantly degrading performance.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;4. Growth in Complexity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Initially, we might build a simple application where all the business logic lives inside a single monolith.&lt;/p&gt;

&lt;p&gt;But as time passes, the system grows.&lt;/p&gt;

&lt;p&gt;The number of features increases, integrations become more numerous, and the number of components expands.&lt;/p&gt;

&lt;p&gt;We might eventually start splitting the system into independent services, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User Service&lt;/li&gt;
&lt;li&gt;Payment Service&lt;/li&gt;
&lt;li&gt;Order Service&lt;/li&gt;
&lt;li&gt;Notification Service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes the overall architecture more complex.&lt;/p&gt;

&lt;p&gt;Now, we have more components, more dependencies, and communication between services becomes an essential part of the system.&lt;/p&gt;

&lt;p&gt;It's important to understand that &lt;strong&gt;Scalability isn't just about handling more users.&lt;/strong&gt; We also need to understand how to manage the complexity that comes with system growth.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;5. Growth in Geographic Reach&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Initially, a system might serve users in just one country.&lt;/p&gt;

&lt;p&gt;But as the company expands, it may start serving users across multiple countries and geographic regions.&lt;/p&gt;

&lt;p&gt;This introduces new challenges.&lt;/p&gt;

&lt;p&gt;For example, we might need to deploy servers in different regions to reduce latency.&lt;/p&gt;

&lt;p&gt;We might need data replication across regions.&lt;/p&gt;

&lt;p&gt;We might also need high availability, ensuring that if one region experiences a failure, other regions can continue operating.&lt;/p&gt;

&lt;p&gt;As geographic reach increases, the architecture must evolve to serve users in different locations effectively.&lt;/p&gt;




&lt;p&gt;So, when we talk about &lt;strong&gt;Scalability&lt;/strong&gt;, we shouldn't immediately jump to the conclusion:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Let's add more servers."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Instead, the first question we should ask is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What exactly is growing?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the number of users increasing?&lt;/li&gt;
&lt;li&gt;Is the number of features growing?&lt;/li&gt;
&lt;li&gt;Is the volume of data increasing?&lt;/li&gt;
&lt;li&gt;Is the system becoming more complex?&lt;/li&gt;
&lt;li&gt;Is the geographic reach expanding?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once we understand exactly what is growing, we can start thinking about the right architecture and design decisions to address that specific type of growth.&lt;/p&gt;

&lt;p&gt;Ultimately, the goal of scalability isn't simply to allow a system to serve more users.&lt;/p&gt;

&lt;p&gt;It's to enable the system to &lt;strong&gt;grow continuously while maintaining performance, reliability, and availability.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's what makes Scalability one of the most important concepts to understand in System Design.&lt;/p&gt;

&lt;p&gt;May Allah teach us what benefits us, increase us in knowledge, and keep us all safe and well. ❤️&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>System Design Fundamentals: Understanding Scalability and the Dimensions of System Growth</title>
      <dc:creator>Mohamed Galhoum</dc:creator>
      <pubDate>Fri, 09 Oct 2026 17:04:54 +0000</pubDate>
      <link>https://dev.to/muohlag/system-design-fundamentals-understanding-scalability-and-the-dimensions-of-system-growth-5795</link>
      <guid>https://dev.to/muohlag/system-design-fundamentals-understanding-scalability-and-the-dimensions-of-system-growth-5795</guid>
      <description>&lt;p&gt;One of the topics I’m really interested in is &lt;strong&gt;System Design &amp;amp; Distributed Systems&lt;/strong&gt;, and one of the most important concepts we encounter in System Design is &lt;strong&gt;Scalability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As a system grows, whether the number of users increases, the number of requests goes up, or the amount of data grows, its performance may start to degrade.&lt;/p&gt;

&lt;p&gt;This raises an important question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How can we design a system that handles growth without sacrificing performance?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s where Scalability comes in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt; is the ability of a system to handle an increasing workload by adding resources or evolving its architecture, while maintaining acceptable performance as demand grows.&lt;/p&gt;

&lt;p&gt;In simple terms, as a system grows, its load increases, and we need to scale it to accommodate that growth.&lt;/p&gt;

&lt;p&gt;A scalable system is designed to evolve over time without every increase in workload leading to major problems with performance, availability, or reliability.&lt;/p&gt;

&lt;p&gt;But how exactly can a system grow?&lt;/p&gt;

&lt;p&gt;Growth doesn’t simply mean having more users.&lt;/p&gt;

&lt;p&gt;A system can grow across multiple dimensions, and there are five major forms of growth. Today, let’s explore two of them.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;1. Growth in the User Base&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine a social media platform that starts with 10,000 users.&lt;/p&gt;

&lt;p&gt;Over time, the platform grows and reaches millions of users.&lt;/p&gt;

&lt;p&gt;Naturally, as the number of users increases, the number of requests reaching the system is likely to increase as well.&lt;/p&gt;

&lt;p&gt;If the system was initially designed to handle a relatively small number of users, it may start struggling as the traffic grows significantly.&lt;/p&gt;

&lt;p&gt;That’s why we need an architecture that can scale to accommodate increasing traffic and workload while maintaining a good user experience.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;2. Growth in Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine starting with a simple e-commerce website.&lt;/p&gt;

&lt;p&gt;Initially, users can browse products, check out, and pay using a credit card.&lt;/p&gt;

&lt;p&gt;Over time, however, the company starts introducing new features, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Digital Wallets&lt;/li&gt;
&lt;li&gt;Cash on Delivery&lt;/li&gt;
&lt;li&gt;Discount Systems&lt;/li&gt;
&lt;li&gt;Recommendation Systems&lt;/li&gt;
&lt;li&gt;Order Tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every new feature adds value to the system, but it can also increase its complexity.&lt;/p&gt;

&lt;p&gt;As the number of features grows, the existing architecture may need to evolve to accommodate new functionalities while keeping the system maintainable and reliable.&lt;/p&gt;

&lt;p&gt;In this case, the system isn’t just serving more users; &lt;strong&gt;it’s also doing more things.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Understanding these different dimensions of growth is an important first step toward designing scalable systems.&lt;/p&gt;

&lt;p&gt;May Allah teach us what benefits us and increase us in knowledge. Wishing you all continued success and well-being. ❤️&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>architecture</category>
      <category>learning</category>
      <category>design</category>
    </item>
  </channel>
</rss>
