<?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: Aristide Dongo</title>
    <description>The latest articles on DEV Community by Aristide Dongo (@aristide_dongo_40e8a7feec).</description>
    <link>https://dev.to/aristide_dongo_40e8a7feec</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%2F3537428%2F5d7fadaf-8861-44fe-a952-458596db441c.jpg</url>
      <title>DEV Community: Aristide Dongo</title>
      <link>https://dev.to/aristide_dongo_40e8a7feec</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aristide_dongo_40e8a7feec"/>
    <language>en</language>
    <item>
      <title>Building smpp-ts: Creating a Modern TypeScript Library for SMPP Messaging</title>
      <dc:creator>Aristide Dongo</dc:creator>
      <pubDate>Thu, 12 Nov 2026 10:09:34 +0000</pubDate>
      <link>https://dev.to/aristide_dongo_40e8a7feec/building-smpp-ts-creating-a-modern-typescript-library-for-smpp-messaging-5af3</link>
      <guid>https://dev.to/aristide_dongo_40e8a7feec/building-smpp-ts-creating-a-modern-typescript-library-for-smpp-messaging-5af3</guid>
      <description>&lt;p&gt;&lt;strong&gt;An open-source project born from real-world integration challenges with the SMPP protocol.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Working with SMS infrastructure is not always as straightforward as it seems.&lt;/p&gt;

&lt;p&gt;Behind a simple SMS notification lies an entire communication chain involving applications, message brokers, SMPP connections, SMS gateways, operators, delivery receipts, and failure-handling mechanisms.&lt;/p&gt;

&lt;p&gt;While working on SMS messaging systems, I encountered several challenges when integrating the SMPP protocol into Node.js applications.&lt;/p&gt;

&lt;p&gt;Rather than repeatedly implementing workarounds in individual projects, I decided to build something reusable.&lt;/p&gt;

&lt;p&gt;That is how &lt;strong&gt;smpp-ts&lt;/strong&gt; was born.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/AristideDongo/smpp-ts" rel="noopener noreferrer"&gt;https://github.com/AristideDongo/smpp-ts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The problem: Working with SMPP in Node.js
&lt;/h2&gt;

&lt;p&gt;SMPP (Short Message Peer-to-Peer) is a protocol widely used by telecommunications providers, SMS aggregators, and messaging platforms to exchange SMS messages.&lt;/p&gt;

&lt;p&gt;It provides mechanisms for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Establishing sessions between messaging applications and SMSCs.&lt;/li&gt;
&lt;li&gt;Submitting SMS messages.&lt;/li&gt;
&lt;li&gt;Receiving delivery receipts (DLRs).&lt;/li&gt;
&lt;li&gt;Managing connection states.&lt;/li&gt;
&lt;li&gt;Handling asynchronous communication.&lt;/li&gt;
&lt;li&gt;Controlling message throughput.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although SMPP is a well-established protocol, implementing it reliably in an application requires careful attention to several details.&lt;/p&gt;

&lt;p&gt;Some of the challenges I encountered included:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connection management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SMPP sessions need to remain healthy. Network interruptions, timeouts, and unexpected disconnections can affect message processing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delivery receipt tracking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Submitting a message does not necessarily mean that it has been delivered. Applications need to correlate asynchronous delivery receipts with the original message submissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As message volumes increase, managing multiple SMPP connections, submission windows, and throughput limits becomes increasingly important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reusability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wanted a reusable TypeScript implementation that could be integrated into different Node.js applications without duplicating protocol-level logic.&lt;/p&gt;

&lt;p&gt;These challenges motivated me to create a dedicated library.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Introducing smpp-ts
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;smpp-ts&lt;/code&gt; is an open-source SMPP library written in TypeScript for Node.js.&lt;/p&gt;

&lt;p&gt;Its purpose is to provide a modern, reusable foundation for applications communicating with SMSC infrastructure through SMPP.&lt;/p&gt;

&lt;p&gt;GitHub repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AristideDongo/smpp-ts" rel="noopener noreferrer"&gt;https://github.com/AristideDongo/smpp-ts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript-first development.&lt;/li&gt;
&lt;li&gt;SMPP client communication.&lt;/li&gt;
&lt;li&gt;Connection and session management.&lt;/li&gt;
&lt;li&gt;SMS submission.&lt;/li&gt;
&lt;li&gt;Delivery Receipt tracking.&lt;/li&gt;
&lt;li&gt;Connection pooling.&lt;/li&gt;
&lt;li&gt;Extensible delivery tracking persistence.&lt;/li&gt;
&lt;li&gt;ESM and CommonJS compatibility.&lt;/li&gt;
&lt;li&gt;Zero runtime dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to keep the library focused on SMPP communication while allowing applications to implement their own business logic and infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What does smpp-ts provide?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Connection management
&lt;/h3&gt;

&lt;p&gt;An SMPP application must establish and maintain a session with an SMSC.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;smpp-ts&lt;/code&gt; provides connection and session management capabilities to help applications communicate with SMS infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  SMS submission
&lt;/h3&gt;

&lt;p&gt;The library provides mechanisms for submitting SMS messages through SMPP.&lt;/p&gt;

&lt;p&gt;This includes the protocol-level operations needed to send messages to an SMSC.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delivery Receipt tracking
&lt;/h3&gt;

&lt;p&gt;One important aspect of SMS messaging is knowing what happens after submission.&lt;/p&gt;

&lt;p&gt;A successful &lt;code&gt;submit_sm&lt;/code&gt; response does not necessarily indicate successful delivery to the recipient.&lt;/p&gt;

&lt;p&gt;Delivery Receipts provide additional information about the message lifecycle.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;smpp-ts&lt;/code&gt; includes a DeliveryTracker designed to associate message submissions with their delivery receipts.&lt;/p&gt;

&lt;p&gt;The tracker also supports customizable persistence through a storage interface, allowing applications to integrate their own storage mechanisms.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connection pooling
&lt;/h3&gt;

&lt;p&gt;When working with higher message volumes, a single connection may not be sufficient.&lt;/p&gt;

&lt;p&gt;The library includes pooling capabilities to manage multiple SMPP connections.&lt;/p&gt;

&lt;p&gt;This provides a foundation for distributing message submissions across available connections.&lt;/p&gt;

&lt;p&gt;Actual throughput must still be controlled according to SMSC and provider limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Designed to integrate with existing infrastructure
&lt;/h2&gt;

&lt;p&gt;I do not see an SMPP library as a replacement for an SMS gateway.&lt;/p&gt;

&lt;p&gt;For example, an architecture using NestJS, RabbitMQ, Jasmin SMS Gateway, and a telecommunications provider can use &lt;code&gt;smpp-ts&lt;/code&gt; as its SMPP communication layer.&lt;/p&gt;

&lt;p&gt;A simplified architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
    |
    v
NestJS API
    |
    v
RabbitMQ
    |
    v
SMS Worker
    |
    v
smpp-ts
    |
    v
Jasmin SMS Gateway
    |
    v
SMS Provider
    |
    v
Mobile Network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Delivery receipts follow the return path and can be processed by the application to update message statuses.&lt;/p&gt;

&lt;p&gt;This separation allows each component to have a clear responsibility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NestJS handles application logic.&lt;/li&gt;
&lt;li&gt;RabbitMQ distributes asynchronous work.&lt;/li&gt;
&lt;li&gt;The worker processes SMS jobs.&lt;/li&gt;
&lt;li&gt;smpp-ts handles SMPP communication.&lt;/li&gt;
&lt;li&gt;Jasmin handles gateway responsibilities and routing.&lt;/li&gt;
&lt;li&gt;The application persists business and delivery states.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The library is intended to complement this architecture, not replace its other components.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Why open source?
&lt;/h2&gt;

&lt;p&gt;I decided to make &lt;code&gt;smpp-ts&lt;/code&gt; open source because I believe protocol implementations benefit from independent testing and contributions.&lt;/p&gt;

&lt;p&gt;SMPP has been around for many years, and there is valuable experience within the telecommunications and messaging communities.&lt;/p&gt;

&lt;p&gt;I am particularly interested in feedback from developers who operate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jasmin SMS Gateway.&lt;/li&gt;
&lt;li&gt;Kannel.&lt;/li&gt;
&lt;li&gt;SMPP aggregators.&lt;/li&gt;
&lt;li&gt;SMS notification platforms.&lt;/li&gt;
&lt;li&gt;Banking and fintech messaging systems.&lt;/li&gt;
&lt;li&gt;High-volume messaging infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are many implementation details that deserve testing across different SMSCs and network conditions.&lt;/p&gt;

&lt;p&gt;I would rather have experienced developers challenge the implementation and identify weaknesses than assume that everything is correct simply because the code works in my own environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. What I want to improve
&lt;/h2&gt;

&lt;p&gt;The project is evolving, and I am working toward making it more reliable and production-ready.&lt;/p&gt;

&lt;p&gt;Some of the areas I want to focus on include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reliability&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better recovery after process restarts.&lt;/li&gt;
&lt;li&gt;More robust delivery tracking.&lt;/li&gt;
&lt;li&gt;Better handling of uncertain submission outcomes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Interoperability&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More integration tests with Jasmin.&lt;/li&gt;
&lt;li&gt;Testing against additional SMPP implementations.&lt;/li&gt;
&lt;li&gt;Better coverage of real-world SMSC behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved throughput management.&lt;/li&gt;
&lt;li&gt;Better backpressure handling.&lt;/li&gt;
&lt;li&gt;Load and stress testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stronger production configuration guidance.&lt;/li&gt;
&lt;li&gt;TLS verification.&lt;/li&gt;
&lt;li&gt;Resource limits and protocol input validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Observability&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better diagnostics.&lt;/li&gt;
&lt;li&gt;Structured events.&lt;/li&gt;
&lt;li&gt;Metrics for connections, submissions, and delivery receipts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are important areas of development, and community feedback will help determine the most valuable improvements.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Looking for contributors and testers
&lt;/h2&gt;

&lt;p&gt;This is an open invitation to anyone with SMPP experience.&lt;/p&gt;

&lt;p&gt;I would particularly appreciate help from developers who have experience with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SMPP protocol implementations.&lt;/li&gt;
&lt;li&gt;Node.js and TypeScript.&lt;/li&gt;
&lt;li&gt;Jasmin SMS Gateway.&lt;/li&gt;
&lt;li&gt;SMSC interoperability.&lt;/li&gt;
&lt;li&gt;Delivery Receipt processing.&lt;/li&gt;
&lt;li&gt;High-throughput messaging systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are interested, you can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Explore the repository.&lt;/li&gt;
&lt;li&gt;Try the library in a test environment.&lt;/li&gt;
&lt;li&gt;Report bugs and compatibility issues.&lt;/li&gt;
&lt;li&gt;Suggest missing features.&lt;/li&gt;
&lt;li&gt;Contribute improvements through pull requests.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AristideDongo/smpp-ts" rel="noopener noreferrer"&gt;https://github.com/AristideDongo/smpp-ts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Issues and feedback are welcome.&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;smpp-ts&lt;/code&gt; started as an attempt to solve practical problems I encountered while working with SMPP integrations.&lt;/p&gt;

&lt;p&gt;It has since become an open-source project that I want to improve beyond my own use cases.&lt;/p&gt;

&lt;p&gt;My ambition is to build a useful, well-tested, and maintainable TypeScript library for developers working with SMS infrastructure.&lt;/p&gt;

&lt;p&gt;I am not claiming that it is perfect or production-certified. That is precisely why I am inviting the community to test it, review the implementation, and help identify what needs to improve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you work with SMPP, I would genuinely appreciate your feedback.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's make SMPP development in the Node.js ecosystem better.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Project:&lt;/strong&gt; smpp-ts&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Author:&lt;/strong&gt; Aristide Dongo&lt;br&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/AristideDongo/smpp-ts" rel="noopener noreferrer"&gt;https://github.com/AristideDongo/smpp-ts&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  TypeScript #NodeJS #SMPP #OpenSource #Telecommunications #SMS #JasminSMS #BackendDevelopment
&lt;/h1&gt;

</description>
      <category>backend</category>
      <category>node</category>
      <category>opensource</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Explanation of Clean Architecture for Beginners</title>
      <dc:creator>Aristide Dongo</dc:creator>
      <pubDate>Mon, 29 Sep 2025 13:22:39 +0000</pubDate>
      <link>https://dev.to/aristide_dongo_40e8a7feec/explanation-of-clean-architecture-for-beginners-4opa</link>
      <guid>https://dev.to/aristide_dongo_40e8a7feec/explanation-of-clean-architecture-for-beginners-4opa</guid>
      <description>&lt;p&gt;&lt;strong&gt;Module 1: The Ultimate Goal: The Perfect Pizzeria&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine you’re building your own pizzeria. You want it to be so well designed that if you decide to change the wall color (the user interface) or replace your fridge (the database), your chef never has to change the recipe for your signature pizza.&lt;br&gt;
That’s what Clean Architecture is all about: making sure the secret recipes (your most important code) are protected and don’t depend on anything other than solid ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--------------------------------------------------------------------------&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Module 2: The Magic Circles (The Layers)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Architecture is drawn with concentric circles, like Russian nesting dolls.&lt;br&gt;
The Center (The Core): This is where your recipes and rules live (the Domain). It’s the most precious and least changeable part.&lt;br&gt;
Around It (The Chefs): These are the people who apply the recipes (the Use Cases).&lt;br&gt;
Further Out (The Translators): These are the servers that translate the customer’s order into chef language (the Adapters).&lt;br&gt;
The Outside (The Details): This is the real world: the customers’ tables (the UI) and the fridge (the Database).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--------------------------------------------------------------------------&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Module 3: The Core: The Secret Recipes (Entities)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the center, we have the Entities. Think of them as the Original Recipe Book of your pizzeria.&lt;br&gt;
Role: They contain the basic rules, like: "A pizza must always have tomato and cheese," or "The minimum price for a drink is €2."&lt;br&gt;
Protection: They know NOTHING about the website’s color or the type of fridge used. They are pure and stable.&lt;br&gt;
Our Motto: These are the rules that never change, even if the application does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--------------------------------------------------------------------------&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Module 4: The Head Chef (Use Cases)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Right after the Recipe Book, there’s the Head Chef. These are the Use Cases.&lt;br&gt;
Role: Their job is to take a specific order ("Make a Margherita") and follow the steps: get the ingredients from storage, follow the Entity recipe, and give the pizza to the server.&lt;br&gt;
Application Logic: This is the Chef’s logic, not the recipe itself. For example: "If the order is placed after 10 PM, add a €1 night surcharge."&lt;br&gt;
Order: Use Cases are the only ones allowed to modify the Entities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--------------------------------------------------------------------------&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Module 5: The Golden Rule: Never Look Outside&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the most important and magical rule of Clean Architecture:&lt;br&gt;
Dependencies can only point inward.&lt;br&gt;
The Chef (Inside) cannot depend on the Server (Outside). The Chef doesn’t care if the Server is wearing jeans or a suit. If the Server changes uniform, the Chef doesn’t have to redo the recipe.&lt;br&gt;
The Core never depends on the Outside. If the fridge (DB) breaks, the Recipe Book (Entities) is still fine. This rule isolates the good idea (the Domain) from the technology that keeps changing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--------------------------------------------------------------------------&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Module 6: The Servers and Adapters (Interface Adapters)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This layer does the translation work.&lt;br&gt;
The Controller (Server): It receives the customer’s order (a click on the "Order" button). It takes the raw information and transforms it into the exact format that the Chef (Use Case) understands.&lt;br&gt;
The Presenter (Server that brings the plate): Once the pizza is ready, the Chef gives it to the Presenter. The Presenter puts it on a nice plate and makes sure it’s cut into six slices so the customer is happy (preparing it for the UI View).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--------------------------------------------------------------------------&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Module 7: The Outside World (Frameworks and Details)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the layer farthest from the center, the most changeable, and the least precious.&lt;br&gt;
The Dining Room (UI): This is what the customer sees: chairs, tables, colors. Today it’s a website; tomorrow, maybe a mobile app. The Chef doesn’t care.&lt;br&gt;
The Fridge/Storage (Database): This is where the ingredients (data) are stored. Whether you use a Samsung or LG fridge (SQL or NoSQL), the Chef just needs the tomatoes brought to them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--------------------------------------------------------------------------&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Module 8: The Secret Service Trick (Dependency Inversion - DIP)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How does the Chef request ingredients without knowing which fridge is being used? It’s magic!&lt;br&gt;
The Chef (Inside): He says, "I need an Ingredient Manager (this is an Interface, a promise)."&lt;br&gt;
The Fridge (Outside): There’s someone called the "LG Fridge Manager," and this person fulfills the role of "Ingredient Manager."&lt;br&gt;
Injection: Someone (in the outermost layer) gives the Chef the phone number of the "LG Fridge Manager" saying, "Here’s your Ingredient Manager!"&lt;br&gt;
Result: The Chef calls the role (the Interface) and not the fridge brand (the concrete implementation). The dependency flow is reversed, and the Core remains pure!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--------------------------------------------------------------------------&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Module 9: The Storage Boxes (Component Architecture)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine your Chef. He organizes his tools. He doesn’t mix pizza knives with soup ladles.&lt;br&gt;
Key Principle (CCP): Group together things that change for the same reason. If I change the rule about cheese, I put the cheese recipe and the cheese inventory in the same "code box."&lt;br&gt;
Isolation: If you change the "home delivery" box, it shouldn’t affect the "dessert recipes" box. This makes updates faster and safer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;--------------------------------------------------------------------------&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Module 10: The 5 Developer Commandments (SOLID)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clean Architecture is just the application of 5 basic rules (called SOLID) to the whole pizzeria:&lt;/p&gt;

&lt;p&gt;1.SRP (Single Responsibility Principle): Each person has only one job. The Server doesn’t make pizzas.&lt;/p&gt;

&lt;p&gt;2.OCP (Open/Closed Principle): You should be able to add a new recipe (Open) without touching the old ones (Closed).&lt;/p&gt;

&lt;p&gt;3.LSP (Liskov Substitution Principle): If you replace your Chef with another Chef of the same title, they must make the same pizzas without breaking the rules.&lt;/p&gt;

&lt;p&gt;4.ISP (Interface Segregation Principle): The Chef doesn’t need to know the dishwasher’s rules; they only have their small order notebook. (Small notebooks = small Interfaces)&lt;/p&gt;

&lt;p&gt;5.DIP (Dependency Inversion Principle): Our Secret Service trick (Module 8). The Core depends on abstractions, not details.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>career</category>
    </item>
  </channel>
</rss>
