<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Software on Circularspace</title><link>https://blog.simonrw.com/tags/software/</link><description>Circularspace (Software)</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Fri, 03 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.simonrw.com/tags/software/index.xml" rel="self" type="application/rss+xml"/><item><title>The missing knowledge transfer in AI-written code</title><link>https://blog.simonrw.com/posts/2026-07-03-ai-code-understanding/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://blog.simonrw.com/posts/2026-07-03-ai-code-understanding/</guid><description>&lt;p&gt;When developing features before AI, there was usually one person who thought deeply: the feature set, the implementation implications and what the feature &lt;em&gt;actually was&lt;/em&gt;, not just what was &lt;em&gt;planned.&lt;/em&gt; In this new AI world, that deep knowledge of what was &lt;strong&gt;actually built&lt;/strong&gt; has gone.&lt;/p&gt;
&lt;p&gt;Before AI the best case software development workflow was:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;author thinks about the problem deeply, understanding it on a fundamental level;&lt;/li&gt;
&lt;li&gt;author writes code;&lt;/li&gt;
&lt;li&gt;author self-reviews code when submitting for review;&lt;/li&gt;
&lt;li&gt;reviewer skims change, but is not expected to have the same mental model in their head: they check for errors, maybe test it, then hit the LGTM button;&lt;/li&gt;
&lt;li&gt;change lands.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now the flow is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;author prompts agent;&lt;/li&gt;
&lt;li&gt;author skims results or worse sees tests written, make assumptions about code quality, and submits for review;&lt;/li&gt;
&lt;li&gt;the reviewer is expected to review 10k lines of changed code which is unreasonable, and so they understandably smash the LGTM button.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We have lost the detailed understanding phase where &lt;em&gt;someone&lt;/em&gt; intimately knows what the code does, and more importantly: what functionality has been created. It used to be the author who wrote the change. Through the process of writing the code they kept a mental model of the feature, chose tests that would define the &lt;em&gt;behaviour&lt;/em&gt; of the feature, and constructed the implementation.&lt;/p&gt;
&lt;p&gt;There is now a &lt;strong&gt;lack of knowledge of what the feature does&lt;/strong&gt; and how well the tests cover that functionality. I have experienced this myself. We now rely on up front definition and prompting to capture the entire feature, plus perhaps some minor manual testing to confirm that the change is a good one.&lt;/p&gt;
&lt;link rel="stylesheet" href="https://blog.simonrw.com/css/vendors/admonitions.css"&gt;
&lt;div class="admonition question"&gt;
&lt;div class="admonition-header"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/&gt;&lt;/svg&gt;
&lt;span&gt;Question&lt;/span&gt;
&lt;/div&gt;
&lt;div class="admonition-content"&gt;
&lt;p&gt;Ask yourself: do you really &lt;strong&gt;know&lt;/strong&gt; that you covered the edge cases with your last vibecoded 10k changed LOC PR?&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Maybe this is a skill issue on my part. I can certainly be more mindful of what the LLM writes in the first place. But I have always been a “doing” learner. I have written out thousands of quick start guides or tutorials instead of copying and pasting so that it sticks in my brain. I feel I am losing that with LLMs.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t want to give up on pace either. The first time I prompted an agent to work on a hobby project was a rush. I could code on my phone while out of the house!&lt;/p&gt;
&lt;p&gt;One aspect I think LLMs excel at is talking through problems and open ended research. I&amp;rsquo;ve learnt a lot from asking vague questions into ChatGPT, treating it as a “better google”.&lt;/p&gt;
&lt;p&gt;I also think LLMs that can &lt;strong&gt;act&lt;/strong&gt; (ie agents) have their place. And they unlock a huge amount of power, e.g. performing web searches, searching code bases, running tests etc. It is making me think that the way forward is an agent for a tiny well scoped change, and iterate slowly. Letting the agent do the heavy lifting as we go along. I gain the benefit of&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;correctness (the agent can run tests),&lt;/li&gt;
&lt;li&gt;understanding (I am reviewing the changes as they happen, not at the end with a big pr), and&lt;/li&gt;
&lt;li&gt;velocity (the agent can type quicker and better than I can).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To that end, I wrote &lt;a href="https://github.com/simonrw/ask-agent"&gt;ask-agent&lt;/a&gt; a neovim plugin to ask Codex a question with the selected text as context.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Try using agents for tight well scoped work with clear outcomes, and review the outputs at each stage. Ensure you remain familiar with what you are building at a feature level, and I think you will create more maintainable applications in the long run.&lt;/p&gt;</description></item></channel></rss>