<?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: Tarek Mostafa </title>
    <description>The latest articles on DEV Community by Tarek Mostafa  (@tarikmostafa).</description>
    <link>https://dev.to/tarikmostafa</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%2F3488433%2F7bc02376-9e2c-42ef-8985-ad71792f4115.jpg</url>
      <title>DEV Community: Tarek Mostafa </title>
      <link>https://dev.to/tarikmostafa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tarikmostafa"/>
    <language>en</language>
    <item>
      <title>Stop Rubber-Stamping "LGTM": Why Pull Requests Are Operational Contracts (Especially with AI Code)</title>
      <dc:creator>Tarek Mostafa </dc:creator>
      <pubDate>Sat, 19 Sep 2026 00:20:52 +0000</pubDate>
      <link>https://dev.to/tarikmostafa/stop-rubber-stamping-lgtm-why-pull-requests-are-operational-contracts-especially-with-ai-code-cdh</link>
      <guid>https://dev.to/tarikmostafa/stop-rubber-stamping-lgtm-why-pull-requests-are-operational-contracts-especially-with-ai-code-cdh</guid>
      <description>&lt;p&gt;Be honest: when was the last time you opened a 400-line PR, scrolled through a sea of clean-looking green diffs, thought &lt;em&gt;"looks fine to me"&lt;/em&gt;, typed &lt;code&gt;LGTM&lt;/code&gt;, and hit merge?&lt;/p&gt;

&lt;p&gt;I've been guilty of it. Most of us have.&lt;/p&gt;

&lt;p&gt;Especially now, with AI coding assistants churning out syntactically plausible code in seconds, the temptation to rubber-stamp pull requests has skyrocketed. The formatting is neat, the unit tests pass on happy paths, and everything feels safe.&lt;/p&gt;

&lt;p&gt;Until Saturday at 3:00 AM, when an unhandled edge case drops production.&lt;/p&gt;

&lt;p&gt;When an outage happens, the postmortem doesn't care which AI generated the syntax. And the accountability doesn't just fall on whoever opened the branch.&lt;/p&gt;

&lt;p&gt;The very first question senior leadership and SRE ask is:&lt;br&gt;
&lt;strong&gt;"Who reviewed and approved this to go live?"&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Every Approval is a Binding Signature
&lt;/h3&gt;

&lt;p&gt;I recently mapped this reality into a 1-page visual blueprint for our engineering practices:&lt;/p&gt;

&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjl0dm4qknpt31ddsmpg6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjl0dm4qknpt31ddsmpg6.png" alt="Pull Request Review Contract Blueprint" width="684" height="984"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Myth of the Casual Thumbs-Up
&lt;/h3&gt;

&lt;p&gt;In software engineering, clicking &lt;strong&gt;Approve&lt;/strong&gt; is not a friendly thumbs-up or an administrative chore to clear your notification queue.&lt;/p&gt;

&lt;p&gt;It is a sworn claim:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I have audited this architecture, I understand its failure modes, and I am willing to defend this code at 3:00 AM with my name attached."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With AI tools making code generation essentially free, raw code output has zero scarcity. Anyone can prompt a 500-line feature in 30 seconds.&lt;/p&gt;

&lt;p&gt;Because syntax is now a commodity, &lt;strong&gt;code review and architectural verification become the single highest-leverage, highest-accountability acts in the entire software lifecycle.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If we treat PRs like rubber stamps, we turn our repositories into synthetic sludge dumps. If we treat them like contracts, we safeguard the system and build real engineering trust.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Monday Morning Move
&lt;/h3&gt;

&lt;p&gt;Here is a simple test I started running before clicking "Approve" on any pull request—especially AI-assisted ones:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ask yourself aloud:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;"If this breaks production tomorrow, what is my documented rationale for allowing it to ship?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you don't have a clear, defensible answer ready, &lt;strong&gt;you aren't finished reviewing.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I put together 30+ visual, one-page blueprints like this covering blast radius, distributed boundaries, and human engineering ownership in my new book: *&lt;/em&gt;&lt;a href="https://www.amazon.com/dp/B0HK2PCRJK" rel="noopener noreferrer"&gt;The Unshakeable Developer: Why AI Won't Replace True Software Engineers&lt;/a&gt;*&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Quick Discussion:
&lt;/h3&gt;

&lt;p&gt;How is your team handling code reviews lately? Have you noticed "review fatigue" creeping in with AI-generated diffs? Would love to hear how you deal with it in the comments below!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>git</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Senior Engineering is Not Making Code Work. It's Deciding How It Fails.</title>
      <dc:creator>Tarek Mostafa </dc:creator>
      <pubDate>Fri, 18 Sep 2026 23:50:59 +0000</pubDate>
      <link>https://dev.to/tarikmostafa/senior-engineering-is-not-making-code-work-its-deciding-how-it-fails-112d</link>
      <guid>https://dev.to/tarikmostafa/senior-engineering-is-not-making-code-work-its-deciding-how-it-fails-112d</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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmco17t3s2abdy18bucls.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmco17t3s2abdy18bucls.png" alt="Systems Architecture Blueprint from The Unshakeable Developer" width="684" height="984"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Senior engineers know a quiet truth that junior developers (and AI code generators) often miss:
&lt;/h2&gt;

&lt;p&gt;Writing code that works on the happy path is easy. Any LLM can scaffold a service in 5 seconds that passes local tests.&lt;/p&gt;

&lt;p&gt;The real engineering begins when things go wrong:&lt;/p&gt;

&lt;p&gt;What happens when the payment provider returns a timeout?&lt;br&gt;
Does that timeout exhaust the connection pool?&lt;br&gt;
Does that connection pool lock up the checkout API?&lt;br&gt;
Does that lock crash the entire product catalog?&lt;br&gt;
This is The Blast Radius Doctrine (Blueprint #6 from my new systems architecture field guide).&lt;/p&gt;

&lt;p&gt;The Two Types of Systems:&lt;br&gt;
The Fragile Cascade (Tightly Coupled): A single service throws an unhandled error, triggers retry storms across dependencies, and takes down the entire cluster. This is what happens when code is generated without architecture.&lt;/p&gt;

&lt;p&gt;The Sovereign Bulkhead (Fault-Tolerant): Failures are anticipated and contained. If the recommendation engine crashes, the cart still works. If the database stutters, circuit breakers trip, read-replicas take over, and users get a cached fallback.&lt;/p&gt;

&lt;p&gt;The Engineering Law:**&lt;br&gt;
"A senior engineer does not write code to make it work. A senior engineer writes architecture to decide how it fails."&lt;/p&gt;

&lt;p&gt;AI models have no concept of organizational blast radius. They generate isolated functions, but you must define the walls that contain the blast.&lt;/p&gt;

&lt;p&gt;🛠️ Your Monday Morning Move:&lt;br&gt;
Tomorrow when you review a Pull Request—whether written by a human or generated by an AI:&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't just check if the syntax works.
&lt;/h2&gt;

&lt;p&gt;Ask: "If this specific line throws a timeout exception, what is the maximum radius of the damage?"&lt;br&gt;
If the answer is "the entire service crashes," you need a circuit breaker or a bulkhead before hitting Merge.&lt;br&gt;
PS: This is 1 of 28 visual blueprints from my newly released field guide: The Unshakeable Developer: Why AI Won't Replace True Software Engineers.&lt;/p&gt;

&lt;p&gt;If you like this style of visual, bite-sized architecture guides, you can grab the full 45-page book on Amazon: 👉 &lt;a href="https://www.amazon.com/dp/B0HK2PCRJK" rel="noopener noreferrer"&gt;https://www.amazon.com/dp/B0HK2PCRJK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What about you?&lt;/strong&gt;&lt;br&gt;
What’s the worst cascading failure you’ve ever witnessed in production? Let's trade post-mortem stories in the comments! 👇&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>softwaredevelopment</category>
      <category>design</category>
    </item>
    <item>
      <title>Why AI is not going to replace software engineers (from a dev who uses it daily)</title>
      <dc:creator>Tarek Mostafa </dc:creator>
      <pubDate>Fri, 18 Sep 2026 23:39:19 +0000</pubDate>
      <link>https://dev.to/tarikmostafa/why-ai-is-not-going-to-replace-software-engineers-from-a-dev-who-uses-it-daily-eme</link>
      <guid>https://dev.to/tarikmostafa/why-ai-is-not-going-to-replace-software-engineers-from-a-dev-who-uses-it-daily-eme</guid>
      <description>&lt;p&gt;Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;Over the last few months, I've had the same conversation with dozens of fellow developers.&lt;/p&gt;

&lt;p&gt;Almost everyone is asking the same question: "If Claude, ChatGPT, and Copilot can write code in 5 seconds... what are we even doing here? Is our profession doomed?"&lt;/p&gt;

&lt;p&gt;I get the anxiety. I really do.&lt;/p&gt;

&lt;p&gt;A year ago, I spent a good chunk of my day writing boilerplate DTOs, CRUD endpoints, and regex patterns. Today? An LLM generates that before I can even finish my coffee.&lt;/p&gt;

&lt;p&gt;At first, it felt intimidating. But after using AI daily on real projects, I had a big realization:&lt;/p&gt;

&lt;h2&gt;
  
  
  AI is very good at writing code. But writing code was never the real job
&lt;/h2&gt;

&lt;p&gt;Here is why I stopped worrying about AI taking my job, and what I think we should actually be focusing on as developers.&lt;/p&gt;

&lt;p&gt;The difference between "typing syntax" and "software engineering"&lt;br&gt;
Think about what we actually do during a normal work week.&lt;/p&gt;

&lt;p&gt;How much time do you spend literally typing for loops or syntax? Maybe 15% to 20%?&lt;/p&gt;

&lt;p&gt;The rest of the time, you are:&lt;/p&gt;

&lt;p&gt;Trying to understand what the product manager actually wants versus what they wrote in the ticket.&lt;br&gt;
Figuring out why the legacy auth service randomly returns a 502 error every third Tuesday.&lt;br&gt;
Deciding whether adding Redis is worth the operational overhead or if PostgreSQL can handle it.&lt;br&gt;
Protecting the system from breaking when another service goes down.&lt;br&gt;
AI models are basically super-fast human translators: you give them a detailed prompt in English, and they transpile it into JavaScript, Python, or Go.&lt;/p&gt;

&lt;p&gt;That is awesome! It saves us hours of boring typing. But the hard part of software engineering has never been the typing. The hard part is knowing what to build, why to build it, and how it behaves when things go wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "3:00 AM" Reality Check
&lt;/h2&gt;

&lt;p&gt;Here is a simple question I like to ask:&lt;/p&gt;

&lt;p&gt;When production goes down at 3:00 AM on a Friday, who gets paged?&lt;/p&gt;

&lt;p&gt;Is your company going to page ChatGPT? Is the CEO going to say, "Well, the AI model hallucinated a database lock, so nobody is to blame"?&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Companies do not pay software engineers to type text. Companies pay us to own the consequences of that text.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Software engineering is about trust and accountability:
&lt;/h2&gt;

&lt;p&gt;If customer credit card data leaks, an engineer has to explain why.&lt;br&gt;
If the payment gateway fails during Black Friday, an engineer has to roll back and patch it.&lt;br&gt;
AI has no skin in the game. It doesn't care if the company loses $50,000 in revenue in 10 minutes.&lt;br&gt;
As long as businesses run on real money and real risk, they will always need human engineers who understand the architecture and can take responsibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually matters now? (The stuff AI can't do)
&lt;/h2&gt;

&lt;p&gt;If you want to stay relevant and thrive in the coming years, here are three things that become more valuable as code generation gets cheaper:&lt;/p&gt;

&lt;p&gt;A. System Boundaries and Blast Radius Senior engineering isn't about making code work; it's about knowing what happens when it fails. If Service A dies, does it take down the whole platform? Where are the bulkheads? Where are the circuit breakers? AI can generate the code for a service, but you have to design the boundaries.&lt;/p&gt;

&lt;p&gt;B. Understanding Data Gravity and State Code is cheap and disposable. Data is expensive and permanent. Writing a migration script is easy; migrating a 5TB live database without downtime or data corruption requires genuine engineering judgment.&lt;/p&gt;

&lt;p&gt;C. Translating Human Ambiguity Business stakeholders rarely know what they need in technical terms. They speak in business goals, messy trade-offs, and half-formed ideas. Your job is to sit between messy human reality and brittle computer logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts: Stop Competing on Syntax
&lt;/h2&gt;

&lt;p&gt;If your daily goal is to be the fastest person at typing React boilerplate or solving LeetCode algorithms from memory, yes—AI will outpace you.&lt;/p&gt;

&lt;p&gt;But if you shift your mindset from "coder" to "systems thinker", AI becomes the best junior developer and assistant you've ever had. It does the tedious typing while you focus on architecture, reliability, and business impact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A small note:&lt;/strong&gt; Because I care deeply about this topic and wanted to help fellow developers navigate this transition, I recently put together a practical, 45-page visual field guide called "The Unshakeable Developer: Why AI Won't Replace True Software Engineers". It's packed with 28 system architecture blueprints, mental models, and checklists.&lt;/p&gt;

&lt;p&gt;If you're interested in the deep dive, you can check it out on Amazon: &lt;a href="https://www.amazon.com/dp/B0HK2PCRJK" rel="noopener noreferrer"&gt;https://www.amazon.com/dp/B0HK2PCRJK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's chat in the comments! 👇 How has AI changed your daily routine as a developer over the past year? Are you writing more code, doing more reviewing, or spending more time on architecture?&lt;/p&gt;

&lt;p&gt;I’d love to hear your experiences!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
