<?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>Forem: Shadid</title>
    <description>The latest articles on Forem by Shadid (@shamiunshadid).</description>
    <link>https://forem.com/shamiunshadid</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%2F3687468%2F191dbc2d-d4eb-457e-b2d6-7bd8e57a6ae3.png</url>
      <title>Forem: Shadid</title>
      <link>https://forem.com/shamiunshadid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/shamiunshadid"/>
    <language>en</language>
    <item>
      <title>I use AI to write CODE every day. Here’s what I still have to fix every time.</title>
      <dc:creator>Shadid</dc:creator>
      <pubDate>Fri, 01 May 2026 17:37:20 +0000</pubDate>
      <link>https://forem.com/shamiunshadid/i-use-ai-to-write-code-every-day-heres-what-i-still-have-to-fix-every-time-4b3g</link>
      <guid>https://forem.com/shamiunshadid/i-use-ai-to-write-code-every-day-heres-what-i-still-have-to-fix-every-time-4b3g</guid>
      <description>&lt;p&gt;Everyone’s talking about how AI writes 42% of committed code in 2026. Cool stat. But nobody’s really talking about the other 58%.&lt;/p&gt;

&lt;p&gt;I build with AI tools daily. Gemini CLI for quick iteration, Claude for heavier lifting and reasoning through architecture. And honestly? I love them. They’ve made me faster in ways I couldn’t have imagined two years ago.&lt;/p&gt;

&lt;p&gt;But here’s the thing nobody puts in their LinkedIn/twitter post: loving a tool and being clear-eyed about its limits are not mutually exclusive. After months of shipping real features for a real product, I’ve noticed the same patterns breaking down over and over. Same categories of mistakes. Same places where I have to step in and actually think.&lt;/p&gt;

&lt;p&gt;So this is that post. Not a doom piece. Not a “AI will take your job” or “AI is useless” take. Just an honest look at what I fix every single time AI writes code for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI writes confident code. But confident doesn’t mean correct.
&lt;/h2&gt;

&lt;p&gt;This is the first thing that catches you off guard when you start using AI tools heavily.&lt;/p&gt;

&lt;p&gt;The output looks good. Proper formatting, clean variable names, even comments that seem thoughtful. It doesn’t look like broken code. It looks like code written by a developer who knew what they were doing.&lt;/p&gt;

&lt;p&gt;And then you run it.&lt;/p&gt;

&lt;p&gt;The issue isn’t that AI writes bad code, it’s that it writes plausible code. Code that fits the pattern of what correct code looks like, without always understanding the actual problem you’re solving. It fills in the blanks confidently, even when the blanks needed more context that you didn’t provide.&lt;/p&gt;

&lt;p&gt;This means you can’t just review AI code by reading it. You have to run it, and think about what happens at the edges. The review bar is higher than it looks.&lt;/p&gt;

&lt;h2&gt;
  
  
  It doesn’t know your codebase. You do.
&lt;/h2&gt;

&lt;p&gt;AI tools work from context, whatever you paste in, whatever the file contains, whatever you describe. But your actual project has decisions baked into it that no prompt fully captures.&lt;/p&gt;

&lt;p&gt;Why did you structure that particular folder that way? Why is that function doing two things instead of one those are intentional or just technical debt you haven’t cleaned up? Why does that API route return data in that specific shape?&lt;/p&gt;

&lt;p&gt;AI doesn’t know. So when it writes new code, it makes assumptions. Sometimes the assumptions are fine. Sometimes they quietly break conventions you’ve been maintaining for months, and you don’t notice until something downstream breaks.&lt;/p&gt;

&lt;p&gt;The fix isn’t to stop using AI, it’s to stay the person who knows the codebase deeply. The AI is the builder. You’re still the architect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type safety gets creative.
&lt;/h2&gt;

&lt;p&gt;I work in TypeScript. One of the reasons I chose TypeScript is exactly because I want the compiler catching things before I do.&lt;/p&gt;

&lt;p&gt;AI generated TypeScript code has a habit of finding creative ways around that. Not always intentionally. It’ll use any when it doesn't know the exact shape of something. It'll cast types with as when things don't quite fit. It'll write a type that looks specific but is actually loose enough to let anything through.&lt;/p&gt;

&lt;p&gt;None of these are compiler errors. They all pass. And they all quietly chip away at the safety net you put TypeScript in place to give you.&lt;/p&gt;

&lt;p&gt;Every time I get AI generated TypeScript, I read the types specifically. Not the logic, the types. Is this any actually necessary? What is this as hiding? Is this return type honest about what this function actually returns?&lt;br&gt;
Half the time I end up rewriting the types entirely while keeping the logic. That’s fine. That’s the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  It optimizes for making things work, not for making things maintainable.
&lt;/h2&gt;

&lt;p&gt;There’s a difference between code that works and code you can come back to in three months and still understand.&lt;/p&gt;

&lt;p&gt;AI leans hard toward the former. It’ll solve the problem. It’ll solve it in a way that, if you squint, makes sense. But it won’t always ask: is this the simplest possible way to solve it? Would another developer understand this immediately? Does this function do one thing, or secretly four things?&lt;/p&gt;

&lt;p&gt;I’ve seen AI-generated functions that were technically correct but so tangled that even I, the person who prompted it had to read it twice to follow the logic. That’s a problem. Code you can’t easily read is code you can’t easily debug, extend, or hand off.&lt;/p&gt;

&lt;p&gt;When I get complex logic from AI, I ask myself: can I explain what this does in one sentence? If I can’t, I refactor before moving on. Sometimes that means simplifying. Sometimes it means splitting one function into two or three. The AI did the heavy thinking, I do the cleanup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database and schema decisions need a human in the loop.
&lt;/h2&gt;

&lt;p&gt;This one I feel strongly about.&lt;/p&gt;

&lt;p&gt;AI will write your queries, your schema migrations, your ORM calls and it’ll make decisions while doing it. Which columns to index. How to structure a join. Whether to use a subquery or a CTE(Common Table Expression). Whether this operation should happen in the application layer or the database layer.&lt;/p&gt;

&lt;p&gt;These decisions matter a lot. A missing index isn’t a bug you see immediately, it’s a performance cliff you fall off at scale. A poorly structured query isn’t wrong, it’s just quietly expensive. A schema decision made early in a project shapes everything that comes after.&lt;/p&gt;

&lt;p&gt;AI doesn’t have the full picture here. It doesn’t know your data volume, your access patterns, your read/write ratio, or the specific tradeoffs that matter for your product. Currently I’m working on &lt;a href="//crimsonwatch.online"&gt;CrimsonWatch&lt;/a&gt; an AI powered IELTS mock test platform, and the data model has very specific access patterns. No generated query gets committed without me understanding exactly what it’s doing and why.&lt;/p&gt;

&lt;p&gt;This isn’t optional. If you’re using AI to write database code, understanding your database deeply isn’t a nice-to-have. It’s the only way you can tell if what the AI gave you is actually good or not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Error handling is usually an afterthought.
&lt;/h2&gt;

&lt;p&gt;Ask AI to write a feature and it’ll write the happy path beautifully.&lt;/p&gt;

&lt;p&gt;Ask it about the unhappy path and things get thinner. Error handling in AI generated code tends to be either missing entirely, or present but shallow. A try/catch that swallows the error and moves on, a missing null check, an assumed response shape that breaks when the API returns something unexpected.&lt;/p&gt;

&lt;p&gt;Real production code spends a lot of its complexity on what happens when things go wrong. Network calls fail. Users do unexpected things. External APIs return unexpected data. AI doesn’t naturally weight that complexity the same way an experienced developer does, because the happy path is what makes the demo look good.&lt;/p&gt;

&lt;p&gt;Every AI generated function that touches an external system, I go through it specifically looking for: what happens if this fails? What happens if this returns null? What does the user experience if this breaks at 2am? Usually there’s work to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what’s the actual takeaway?
&lt;/h2&gt;

&lt;p&gt;Here’s where I land on it.&lt;/p&gt;

&lt;p&gt;AI tools are genuinely useful. I’m not going back to writing everything from scratch, and I don’t think you should either. The speed is real. The productivity gain is real. On the right tasks, they’re remarkable.&lt;/p&gt;

&lt;p&gt;But the developer still matters. Maybe more than before, in a different way.&lt;/p&gt;

&lt;p&gt;You need to understand your stack deeply enough to audit what the AI gives you. You need to know your codebase well enough to catch when generated code drifts from your conventions. You need to understand your database, your types, your error surface — because the AI will make decisions in all of those areas, and someone has to be accountable for whether those decisions were good ones.&lt;/p&gt;

&lt;p&gt;The 42% of code that AI writes? That other 58% isn’t just the lines you type yourself. It’s the understanding, the judgment, the review, and the accountability that makes the whole thing actually work.&lt;/p&gt;

&lt;p&gt;That part doesn’t get automated. That’s still you.&lt;/p&gt;

&lt;p&gt;And I’m &lt;a href="//shadid.site"&gt;shadid&lt;/a&gt;. Building in public as a solo dev. If this resonated, I’d love to hear what patterns you’ve run into with AI-generated code. Drop a comment or find me on &lt;a href="//x.com/shamiunshadid"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>My first step into this community..</title>
      <dc:creator>Shadid</dc:creator>
      <pubDate>Sun, 01 Mar 2026 16:25:50 +0000</pubDate>
      <link>https://forem.com/shamiunshadid/my-first-step-into-this-community-p5k</link>
      <guid>https://forem.com/shamiunshadid/my-first-step-into-this-community-p5k</guid>
      <description>&lt;p&gt;Hey everyone,👋&lt;br&gt;
I'm a web developer(next.js) and just joined this community(dev.to).&lt;br&gt;
I've heard great things about this community, so I want to be a part of it.&lt;/p&gt;

&lt;p&gt;And I'm here..&lt;/p&gt;

&lt;p&gt;I have a few questions for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How does this community works?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Any tips for newcomers?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did you get anything from here?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looking forward to connecting with you all!!&lt;/p&gt;

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