<?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: Dmitry Truhanovich</title>
    <description>The latest articles on DEV Community by Dmitry Truhanovich (@dmitry-truhanovich).</description>
    <link>https://dev.to/dmitry-truhanovich</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%2F4125040%2Feeb3ea16-57f6-44cc-b680-6101034fefa8.jpg</url>
      <title>DEV Community: Dmitry Truhanovich</title>
      <link>https://dev.to/dmitry-truhanovich</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dmitry-truhanovich"/>
    <language>en</language>
    <item>
      <title>AI Can Write Code Faster Than I Can Trust It</title>
      <dc:creator>Dmitry Truhanovich</dc:creator>
      <pubDate>Wed, 16 Sep 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/dmitry-truhanovich/ai-can-write-code-faster-than-i-can-trust-it-1olf</link>
      <guid>https://dev.to/dmitry-truhanovich/ai-can-write-code-faster-than-i-can-trust-it-1olf</guid>
      <description>&lt;h2&gt;
  
  
  Will I still understand a project I (didn't quite) write?
&lt;/h2&gt;

&lt;p&gt;A couple of years ago, I decided to build a simple application for cleaning up unnecessary folders in C# projects.&lt;/p&gt;

&lt;p&gt;As every programmer is apparently required to write their own logger, DI container, and ORM at least once, I decided to write my own utility.&lt;/p&gt;

&lt;p&gt;It did one fairly simple thing: found temporary bin and obj directories in .NET projects and deleted them.&lt;/p&gt;

&lt;p&gt;AI wasn’t quite the cool kid yet, so eventually I abandoned the WinForms application. Mostly because I couldn’t be bothered to figure out how to turn it into a proper Visual Studio extension.&lt;/p&gt;

&lt;p&gt;Then Codex arrived.&lt;/p&gt;

&lt;p&gt;Or, more accurately, I started using it seriously.&lt;/p&gt;

&lt;p&gt;I handed it the repository and asked it to turn the application into a proper extension.&lt;/p&gt;

&lt;p&gt;GPT-5.2 was still a bit green and didn’t quite get there.&lt;/p&gt;

&lt;p&gt;Not that it failed completely. It produced something. Code appeared.&lt;/p&gt;

&lt;p&gt;But I couldn’t turn what it produced into a solid working solution, so I abandoned the idea again.&lt;/p&gt;

&lt;p&gt;Some time later, GPT-5.4 came out. After some ritual troubleshooting, I finally managed to port the application.&lt;/p&gt;

&lt;p&gt;The actual task, meanwhile, had barely changed.&lt;/p&gt;

&lt;p&gt;It still deleted bin and obj.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what now?
&lt;/h2&gt;

&lt;p&gt;From that point on, I started using the same prompt — remember prompt engineering? Very 2025 — and the same instruction with every new model:&lt;/p&gt;

&lt;p&gt;Do a code review of the project.&lt;/p&gt;

&lt;p&gt;Every new model, at the same effort level, found a fresh list of problems.&lt;/p&gt;

&lt;p&gt;And not just cosmetic ones.&lt;/p&gt;

&lt;p&gt;Another P0.&lt;/p&gt;

&lt;p&gt;P1s and P2s were never far behind.&lt;/p&gt;

&lt;p&gt;After each review, I asked the model to fix everything.&lt;/p&gt;

&lt;p&gt;The fix would turn into hundreds of lines of changed and newly added code.&lt;/p&gt;

&lt;p&gt;The project became “better.”&lt;/p&gt;

&lt;p&gt;Then the next model came out.&lt;/p&gt;

&lt;p&gt;And found critical problems again.&lt;/p&gt;

&lt;p&gt;And so the cycle continued.&lt;/p&gt;

&lt;p&gt;I can think of several explanations for this:&lt;/p&gt;

&lt;p&gt;The original code genuinely had some code smells, and several generations of models have simply been finding more and more problems in it. I don’t write bugs, obviously.&lt;br&gt;
New models really are getting so much better at code review that they see things previous models simply missed. Questionable, but fine.&lt;br&gt;
Some of the new problems are introduced by the previous fixes.&lt;br&gt;
Models are simply getting more inventive at finding the next P0 in places where nobody saw one yesterday.&lt;/p&gt;

&lt;p&gt;And if that is the case, the problem is no longer just the code.&lt;/p&gt;

&lt;p&gt;It is also the process.&lt;/p&gt;

&lt;p&gt;If you ask an AI to perform a review, it is almost required to find something worth fixing.&lt;/p&gt;

&lt;p&gt;Preferably something “critical.”&lt;/p&gt;

&lt;p&gt;There is also no obvious stopping condition for this loop:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;review → fix → review → fix&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At what point is the project good enough?&lt;/p&gt;

&lt;p&gt;When does the next fix add less value than the complexity it introduces?&lt;/p&gt;

&lt;p&gt;The funniest part is that the actual task has not changed this entire time.&lt;/p&gt;

&lt;p&gt;The program still just deletes bin and obj.&lt;/p&gt;

&lt;p&gt;The project, however, gets larger after every new review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where do I go from here?
&lt;/h2&gt;

&lt;p&gt;By now, this small project has grown noticeably.&lt;/p&gt;

&lt;p&gt;There is much more code, even though the actual task is still the same.&lt;/p&gt;

&lt;p&gt;It still deletes temporary folders from C# projects.&lt;/p&gt;

&lt;p&gt;And the issue is not just the number of lines.&lt;/p&gt;

&lt;p&gt;The issue is me.&lt;/p&gt;

&lt;p&gt;I still roughly know how the project works.&lt;/p&gt;

&lt;p&gt;I know which patterns different classes follow. I roughly know where things live.&lt;/p&gt;

&lt;p&gt;But if I had to make a substantial change manually, I would probably need to learn large parts of the repository almost from scratch.&lt;/p&gt;

&lt;p&gt;In the past, a significant part of my mental model of a project formed naturally while I was writing it.&lt;/p&gt;

&lt;p&gt;When you write a class yourself, you usually remember why it exists.&lt;/p&gt;

&lt;p&gt;You remember why you implemented it that way.&lt;/p&gt;

&lt;p&gt;You remember the alternatives you tried and discarded.&lt;/p&gt;

&lt;p&gt;You remember where you made a compromise, and what other code is quietly holding that workaround together.&lt;/p&gt;

&lt;p&gt;With an agent, that connection breaks.&lt;/p&gt;

&lt;p&gt;It can produce a finished implementation in minutes.&lt;/p&gt;

&lt;p&gt;The code already exists.&lt;/p&gt;

&lt;p&gt;My understanding of that code does not.&lt;/p&gt;

&lt;p&gt;And if AI really does remove the constraint on implementation speed, then in my own tiny project I have run into what is increasingly called the verification bottleneck:&lt;/p&gt;

&lt;p&gt;The agent can produce code faster than I can verify it well enough to justify accepting it.&lt;/p&gt;

&lt;p&gt;Which raises another question:&lt;/p&gt;

&lt;p&gt;Do I even need to understand all of it?&lt;/p&gt;

&lt;p&gt;We never understood every line of our systems before AI either.&lt;/p&gt;

&lt;p&gt;I don’t know the internal implementation of the entire .NET runtime.&lt;/p&gt;

&lt;p&gt;I don’t read the source code of every NuGet dependency.&lt;/p&gt;

&lt;p&gt;I don’t go line by line through everything another developer writes.&lt;/p&gt;

&lt;p&gt;We constantly work through abstractions, contracts, tests, and trust in code written by other people.&lt;/p&gt;

&lt;p&gt;So what changes with AI?&lt;/p&gt;

&lt;p&gt;This is where it gets more complicated.&lt;/p&gt;

&lt;p&gt;With code written by another developer, I can at least try to recover the intent.&lt;/p&gt;

&lt;p&gt;I can ask why they chose that particular solution, what alternatives they considered, and where they deliberately accepted a trade-off.&lt;/p&gt;

&lt;p&gt;More importantly, I can usually try to understand their line of reasoning.&lt;/p&gt;

&lt;p&gt;We are both human.&lt;/p&gt;

&lt;p&gt;We have roughly similar constraints, ways of reasoning, and professional experience.&lt;/p&gt;

&lt;p&gt;Even when I disagree with a decision, I can often reconstruct why another developer arrived at it.&lt;/p&gt;

&lt;p&gt;With an agent, it is different.&lt;/p&gt;

&lt;p&gt;Its internal process is fundamentally not a human line of thought that I can reconstruct from my own experience.&lt;/p&gt;

&lt;p&gt;I can analyze the result, the prompt, the context, and the changes it made.&lt;/p&gt;

&lt;p&gt;But I cannot treat them exactly like another developer’s decision and simply “understand what they were thinking.”&lt;/p&gt;

&lt;p&gt;That context is also much easier to lose.&lt;/p&gt;

&lt;p&gt;The diff stays in the repository.&lt;/p&gt;

&lt;p&gt;The reasons why that diff ended up looking exactly the way it does may remain somewhere in the history of an agent session.&lt;/p&gt;

&lt;p&gt;Or disappear with it.&lt;/p&gt;

&lt;p&gt;On the other hand, if I try to understand every line of generated code, I lose a significant part of the productivity gain AI gives me.&lt;/p&gt;

&lt;p&gt;While I carefully read several hundred lines of the latest diff, someone else will already have their agent building the next feature.&lt;/p&gt;

&lt;p&gt;And then another one.&lt;/p&gt;

&lt;p&gt;In the job market, they will look much faster and more productive.&lt;/p&gt;

&lt;p&gt;But if I stop understanding generated code altogether, sooner or later I will end up owning a system that I am formally responsible for but do not actually know.&lt;/p&gt;

&lt;p&gt;So the question of whether a developer needs to understand every line has probably become rhetorical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where's the Boundary?
&lt;/h2&gt;

&lt;p&gt;AI can already produce code faster than I can properly read it.&lt;/p&gt;

&lt;p&gt;So how well does a developer need to understand a repository to still genuinely own it?&lt;/p&gt;

&lt;p&gt;Is understanding the architecture enough?&lt;/p&gt;

&lt;p&gt;The main contracts?&lt;/p&gt;

&lt;p&gt;The invariants?&lt;/p&gt;

&lt;p&gt;The failure modes?&lt;/p&gt;

&lt;p&gt;Or will there come a point when saying, “I built this feature,” means roughly the same thing as saying, “I used a library whose internals I have never read”?&lt;/p&gt;

&lt;p&gt;In the past, authorship of code and understanding of code tended to develop together.&lt;/p&gt;

&lt;p&gt;Now they are starting to separate.&lt;/p&gt;

&lt;p&gt;You can get the code almost immediately.&lt;/p&gt;

&lt;p&gt;Trust still has to be built.&lt;/p&gt;

&lt;p&gt;And the developer is still responsible for the code the agent generates.&lt;/p&gt;

&lt;p&gt;So perhaps the real constraint on agentic development will not be how quickly AI can write code.&lt;/p&gt;

&lt;p&gt;It will be how quickly a human can determine what, exactly, they have enough reason to trust in that code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instead of a postscript
&lt;/h2&gt;

&lt;p&gt;New models will keep coming.&lt;/p&gt;

&lt;p&gt;They will keep getting smarter.&lt;/p&gt;

&lt;p&gt;And I am quite sure the next generation of AI will once again find a critical P0 in my little project that still just deletes bin and obj.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
      <category>dotnet</category>
    </item>
  </channel>
</rss>
