<?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: Ahmad Saka</title>
    <description>The latest articles on DEV Community by Ahmad Saka (@bluebird2000).</description>
    <link>https://dev.to/bluebird2000</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%2F3593761%2Fd7cd2600-5752-4e06-9ed8-be23a859e47f.png</url>
      <title>DEV Community: Ahmad Saka</title>
      <link>https://dev.to/bluebird2000</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bluebird2000"/>
    <language>en</language>
    <item>
      <title>The Lost Art of Code Quality: Why Modern Engineers Ship Fast but Think Less</title>
      <dc:creator>Ahmad Saka</dc:creator>
      <pubDate>Wed, 05 Nov 2025 09:30:07 +0000</pubDate>
      <link>https://dev.to/bluebird2000/the-lost-art-of-code-quality-why-modern-engineers-ship-fast-but-think-less-ajg</link>
      <guid>https://dev.to/bluebird2000/the-lost-art-of-code-quality-why-modern-engineers-ship-fast-but-think-less-ajg</guid>
      <description>&lt;p&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%2Fwkbzbfyg02he102jahnn.png" 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%2Fwkbzbfyg02he102jahnn.png" alt="The Lost Art of Code Quality" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once upon a time, developers debated design patterns and code elegance. Now it’s “ship before &lt;em&gt;product&lt;/em&gt; changes its mind.”&lt;/p&gt;

&lt;p&gt;We've all been there. It's 4 PM on a Friday. Product wants the feature live by Monday. You crack your knuckles, chug your third coffee, and channel your inner speed demon. Six hours later, you've birthed a beautiful, functional mess that works perfectly, until Tuesday.&lt;br&gt;
Mark Zuckerberg told us to "move fast and break things," and boy, did we listen. Except now we're moving so fast that we're breaking things we didn't even know existed yet. Future-us is sending angry emails, but present-us has a deploy to catch.&lt;/p&gt;

&lt;p&gt;We’ve traded code reviews for Slack emojis, architecture for MVPs, and testing for “QA will catch it.”&lt;br&gt;
&lt;em&gt;Spoiler: QA didn’t catch it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Hidden Cost of Speed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sure, we’re shipping faster. But we’re also debugging faster and refactoring forever.&lt;br&gt;
Every shortcut becomes tech debt. Every “quick fix” becomes a future nightmare.&lt;br&gt;
You know that feeling when you open a 6-month-old file and whisper,&lt;br&gt;
-“Who wrote this garbage?”&lt;br&gt;
-It was you. Past you. Rushing to meet a deadline.(Thanks to git blame)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why We Think Less&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern frameworks do too much thinking for us.&lt;br&gt;
TypeScript, linters, AI code suggestions, all amazing tools, until we forget how to reason about complexity.&lt;br&gt;
We’ve become more like code assemblers than engineers.&lt;br&gt;
Everything works until it doesn’t, and when it breaks, no one knows why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Comeback of Craftsmanship&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Moving fast is great.&lt;/em&gt;, &lt;em&gt;Thinking less is dangerous.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Clean code isn't the opposite of fast code. It's the foundation of sustainable fast code.&lt;/p&gt;

&lt;p&gt;We can't un-break the things we broke. But we can stop breaking tomorrow's things today. We can ship fast without shipping garbage. We can be the engineers who make future-us smile instead of cry.&lt;br&gt;
So next time you're about to commit that "quick fix," take a breath. Think for five minutes. Write that one comment. Name that variable properly. Your future self is watching. And they know where you live&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good engineers ship, Great engineers think.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>software</category>
      <category>architecture</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Architecting at Scale: The CQRS-Powered Domain Core with React.</title>
      <dc:creator>Ahmad Saka</dc:creator>
      <pubDate>Mon, 03 Nov 2025 09:58:59 +0000</pubDate>
      <link>https://dev.to/bluebird2000/architecting-at-scale-the-cqrs-powered-domain-core-with-react-1alh</link>
      <guid>https://dev.to/bluebird2000/architecting-at-scale-the-cqrs-powered-domain-core-with-react-1alh</guid>
      <description>&lt;p&gt;The Lagos Traffic Problem (aka Your Codebase).&lt;/p&gt;

&lt;p&gt;You're stuck in Lagos traffic at 6 PM on a Friday. Every car is doing whatever it wants, weaving through, danfos stopping anywhere, private cars changing lanes without indicators. I bet that's your current React app 😀 . Everything is connected to everything. Your components are fetching data, updating state, handling business logic, and rendering UI all in one 500-line file called &lt;code&gt;Dashboard.tsx.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let’s be honest, most React codebases start as “side projects that got too serious.” 😅&lt;/p&gt;

&lt;p&gt;One day you’re building a quick login screen, before you know it, you’re managing a full fintech product with 40+ screens, complex states, network calls, caching, and some poor soul screaming “Who added this useEffect that runs 12 times on mount?!”&lt;/p&gt;

&lt;p&gt;As a senior engineer (or “oga dev” as we say), you know the vibes: we crave structure, scalability, and clarity, but we also want speed, flexibility, and type safety.&lt;/p&gt;

&lt;p&gt;So today, let’s talk about how to architect your React frontend like a proper enterprise system, applying Domain-Driven Design (DDD), Clean Architecture, and CQRS, all in TypeScript, of course (because we like our bugs caught early 👀).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The "It Works" Trap&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me tell you about my friend Deewills (not his real name, but if you're reading this Deewills, you know yourself). Deewills built a beautiful fintech dashboard. Users could check balances, transfer money, pay bills, everything worked perfectly, for three months.&lt;br&gt;
Then the business wanted to add savings features. Simple enough, right? Wrong.&lt;/p&gt;

&lt;p&gt;Deewills opened&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TransactionComponent.tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and found 800 lines of code. The component was fetching user data, calculating balances, handling transfers, managing form state, talking to three different APIs, and somehow also controlling the notification system. It was like opening a danfo and finding it's also a mechanic shop, a provision store, and somehow running a small farm in the back. The "small feature" took three weeks. The bugs took another two.&lt;/p&gt;

&lt;p&gt;Deewills now works as a photographer (he's doing fine, but that's not the point).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Domain-Driven Design&lt;/em&gt;&lt;br&gt;
(DDD) is like organizing Lagos. Imagine if we actually had proper zones: Ikeja for business, VI for finance, Yaba for tech. Each area handles its own thing, has its own rules, and talks to other areas through proper channels (not megaphone at night).&lt;br&gt;
In your React app, this means:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Domain Layer (The Core Business)
&lt;/h2&gt;

&lt;p&gt;This is where your actual business logic lives. Think of it like the CBN, it sets the rules for how money works in your app, and it doesn't care whether you're using React, Vue, or building a mobile app with Flutter.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Application Layer (The Traffic Controllers)
&lt;/h2&gt;

&lt;p&gt;This is where CQRS comes in. CQRS stands for Command Query Responsibility Segregation, which in normal person language means: "Separate your reading from your writing, don't mix them like jollof and ofada rice."&lt;br&gt;
Commands = Things that change state (Mutations, the troublemakers)&lt;br&gt;
Queries = Things that just read data (Safe, reliable, your mother's favorite)&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Infrastructure Layer (The Actual Implementation)
&lt;/h2&gt;

&lt;p&gt;This is where you deal with the dirty work: APIs, databases, localStorage, that one legacy SOAP service the bank refuses to update.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Objections (And Why They're Wrong)
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This is too much boilerplate!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Omo, you know wetin be boilerplate? Debugging for 3 days because business logic is scattered everywhere. That's boilerplate. This is structure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We're a startup, we need to move fast!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You know what's not fast? Rewriting your entire app in 6 months because the codebase became unmaintainable. Ask Deewills.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My team won't understand this!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your team understands Lagos traffic, they can understand layers. Organize your code like we organize our markets: separate sections for separate things.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We're too small for this!&lt;br&gt;
You're never too small for clean code. Even a one-man project benefits from not having to remember where you put which logic.&lt;/p&gt;

&lt;p&gt;The Bottom Line&lt;br&gt;
Stop fighting your codebase. Stop spending days making "small changes." Stop having every feature break something unrelated.&lt;br&gt;
DDD + CQRS + Clean Architecture isn't about being fancy. It's about writing code that:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;You can understand 6 months later&lt;/li&gt;
&lt;li&gt;Your colleague can modify without a PhD&lt;/li&gt;
&lt;li&gt;Actually scales when your startup blows up&lt;/li&gt;
&lt;li&gt;Doesn't make you want to resign when the PM says "one small feature"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your future self will thank you. Your team will thank you. Your 2 AM debugging sessions will become rare. And when someone asks "Why is this codebase so clean?" you can smile and say "Because we stopped building spaghetti."&lt;/p&gt;

&lt;p&gt;Now go forth and refactor. Your App.tsx with 2000 lines is waiting.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>cleancode</category>
      <category>software</category>
      <category>react</category>
    </item>
    <item>
      <title>TypeScript: Our Beloved, Overbearing Safety Net</title>
      <dc:creator>Ahmad Saka</dc:creator>
      <pubDate>Mon, 03 Nov 2025 09:11:05 +0000</pubDate>
      <link>https://dev.to/bluebird2000/typescript-our-beloved-overbearing-safety-net-3mnh</link>
      <guid>https://dev.to/bluebird2000/typescript-our-beloved-overbearing-safety-net-3mnh</guid>
      <description>&lt;p&gt;Ah, &lt;strong&gt;TypeScript&lt;/strong&gt;. TypeScript isn't just a superset of JavaScript, it's a lifestyle choice. It's the difference between "move fast and break things" and "move deliberately and break things anyway, but with stack traces that actually help."&lt;/p&gt;

&lt;p&gt;Randomly remember my brother who checks if you locked the car door three times before zooming off? That's TypeScript. We love them for it, but sometimes we just want to live dangerously and merge to main without running the linter.&lt;/p&gt;

&lt;p&gt;It's in these moments that we sigh, crack our knuckles, and perhaps utter a few choice words under our breath, acknowledging that while TypeScript can feel like an extra hurdle, it's ultimately saving us from a production meltdown at 3 AM. It’s the difference between confidently shipping features and dreading that next bug report.&lt;/p&gt;

&lt;p&gt;As engineers who have survived the wild west of untyped JavaScript, we often talk about TypeScript with a peculiar mix of deep affection and slight, exhausted frustration. It’s our shield against the tyranny of &lt;code&gt;undefined is not a function&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;The Love Affair: Why We Can’t Quit You, "TS" ❤️&lt;/em&gt;&lt;br&gt;
The love is real, and it’s rooted in scalability and confidence. In a large-scale React application, a decade of experience teaches you that runtime bugs in production are almost always due to unexpected data shapes. TypeScript virtually eliminates this class of error, allowing teams to refactor massive codebases with the confidence that only a solid type-system can provide. This is especially true for React, where defining strong types for Component Props and State becomes the blueprint for clean architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Overbearing Parent: Common Pitfalls and the "Any" Trap&lt;/strong&gt;&lt;br&gt;
The problem isn't TypeScript itself, it's how we use it when deadlines are tight and patience is thin.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🚫 The any Escape Hatch&lt;br&gt;
This is the developer equivalent of saying, "I'm sure it's fine, I'll deal with it later." Using &lt;code&gt;any&lt;/code&gt; on props, API responses, or core data structures is a senior-level anti-pattern. It voids the warranty and completely defeats the purpose.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Pro-Tip:&lt;/em&gt; If you can't figure out the type, use &lt;code&gt;unknown&lt;/code&gt;, not &lt;code&gt;any&lt;/code&gt;. &lt;code&gt;unknown&lt;/code&gt; forces you to perform runtime validation (Type Guards) before you can use the value, maintaining a safety contract. The compiler says: "I don't know what this is, so you better prove it to me before touching it."&lt;/p&gt;

&lt;p&gt;The beauty of TypeScript lies in its ability to turn runtime surprises into compile-time complaints. Yes, it's annoying when you're trying to ship fast and TypeScript demands you define 47 interfaces for a simple API call. But you know what's more annoying? Getting a Slack notification at 2 AM because user.profile.settings.theme was undefined and you tried to call .toUpperCase() on it. TypeScript is the cheap insurance that keeps your production environment boring, and in a high-scale system, boring is gold.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;The Clean Code Mandate: Separating Concerns with Types&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
In clean architecture, we aim for high cohesion and loose coupling. TypeScript excels here by allowing us to create distinct, non-ambiguous types for different concerns:&lt;br&gt;
Domain Types (Core Business Logic): Pure, application-centric types.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface User { id: string; name: string; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;API Types (External Contracts): Types mirroring the wire format, often ugly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface ApiUserResponse { userId: number; userName: string; }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Component Props Types (Presentation Layer): Only the data needed for the UI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface UserCardProps { user: User; }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By mapping (transforming) the ApiUserResponse into the cleaner User type within a service/data layer, we shield our React components from API inconsistencies. This separation is key to maintainable, highly-performant, and scalable applications. Your UI components only ever deal with the clean, safe User type.&lt;/p&gt;

&lt;p&gt;TypeScript is that demanding colleague who makes you write an extra hundred lines of code, but whose thoroughness prevents a thousand runtime bugs. It's the foundational layer for performant, scalable, and maintainable React codebases. Embrace the type system, learn the advanced utility types, and make your compiler your best friend.&lt;/p&gt;

&lt;p&gt;May your types be strong and your &lt;code&gt;anys&lt;/code&gt; be few.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>architecture</category>
      <category>software</category>
      <category>react</category>
    </item>
  </channel>
</rss>
