<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Jeff Derrick]]></title><description><![CDATA[Essays on building software that lasts — and on the parts of that work nobody can see.]]></description><link>https://jeffderrick.com</link><image><url>https://substackcdn.com/image/fetch/$s_!8zYK!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ec37b8b-a92e-40b1-a3a8-8e259fead035_1024x1024.png</url><title>Jeff Derrick</title><link>https://jeffderrick.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 01 Nov 2026 08:47:32 GMT</lastBuildDate><atom:link href="https://jeffderrick.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jeff Derrick]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[jeffderrick1@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[jeffderrick1@substack.com]]></itunes:email><itunes:name><![CDATA[Jeff Derrick]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jeff Derrick]]></itunes:author><googleplay:owner><![CDATA[jeffderrick1@substack.com]]></googleplay:owner><googleplay:email><![CDATA[jeffderrick1@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jeff Derrick]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Restraint Used to Be Free. Now You Have to Choose It.]]></title><description><![CDATA[What kept codebases small is gone. Nothing replaced it.]]></description><link>https://jeffderrick.com/p/restraint-used-to-be-free-now-you</link><guid isPermaLink="false">https://jeffderrick.com/p/restraint-used-to-be-free-now-you</guid><dc:creator><![CDATA[Jeff Derrick]]></dc:creator><pubDate>Thu, 08 Oct 2026 14:54:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!T1-9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T1-9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T1-9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!T1-9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!T1-9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!T1-9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T1-9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60740,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://jeffderrick.com/i/219426172?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T1-9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!T1-9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!T1-9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!T1-9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f6d817-6153-4084-abb1-cf0e08bc8046_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You ask for a small change. What comes back is the change, plus three helper functions you didn&#8217;t ask for, plus error handling for a state the system can&#8217;t actually reach, plus a configuration option nobody will ever set.</p><p>None of it is wrong, exactly. All reasonable. Defensible. The kind of thing you&#8217;d nod at in a review and move on.</p><p>And you keep most of it &#8212; not because you decided to, but because it&#8217;s already written, and it looks fine, and deleting things that look fine requires a reason you have to go find.</p><p>That last part is what I&#8217;ve been chewing on.</p><div><hr></div><p>A while back I wrote that maybe the best thing AI does for software is help you write <em>less</em> code. That in a mature system the code is the liability and the working system is the asset, so the highest-value contribution is often subtractive: the feature refused, the abstraction that didn&#8217;t need to exist, the bug caught before it shipped.</p><p>I still think that&#8217;s right. But I framed it as an opportunity, and I&#8217;ve come to think I was too cheerful about it, because if subtraction is so obviously valuable, the honest question is why almost nobody does it.</p><p>The answer I&#8217;ve landed on is less flattering than I&#8217;d like.</p><p>We were never practicing restraint. We were just constrained.</p><p>Think about what actually kept a codebase from sprawling, historically. It wasn&#8217;t our judgment. It was typing. Every unnecessary abstraction cost somebody an afternoon. Every speculative feature had to be argued for, scheduled, and then physically typed by a person who would rather have been doing almost anything else. Every &#8220;we might need this later&#8221; ran straight into the wall of somebody having to build it now.</p><p>The friction was doing the work of discipline for us. And it was quietly letting us take the credit.</p><p>Ed Catmull noticed the same thing from the other side of it, at Pixar, where the scarce resource was compute rather than keystrokes. &#8220;I found early on that an abundance of resources leads to sloppiness,&#8221; he told David Epstein for <em>Inside the Box: How Constraints Make Us Better</em>. Not that abundance is bad. That abundance removes the thing that was forcing you to choose.</p><p>That&#8217;s the shape of what AI has done to software. AI hasn&#8217;t made us less disciplined. What it removed was the mechanism standing in for our discipline, and the discipline itself is now exposed for the first time.</p><p>Which is a problem, because subtraction has always been the harder sell anyway. Leidy Klotz&#8217;s research on why people add rather than remove keeps arriving at the same place: it&#8217;s much easier to demonstrate competence by adding. Adding leaves evidence. You can point at it. Subtraction leaves an absence, and nobody has ever been promoted for an absence. So the one contribution that just became most valuable is also the one that is structurally hardest to show anybody.</p><div><hr></div><p>Here&#8217;s the frame that&#8217;s helped me most, and it isn&#8217;t from software at all.</p><p>In <em>Born to Run</em>, there&#8217;s a trail runner called Caballo Blanco who coaches by way of a four-word sequence: &#8220;Easy, Light, Smooth, and Fast.&#8221; You start with easy. Then you work on light. Then, once light has become so habitual you&#8217;ve forgotten you&#8217;re working on it, you work on smooth.</p><p>And then &#8212; this is the part that stopped me &#8212; he tells you not to work on the fourth one. You don&#8217;t have to. Get the first three and fast arrives on its own.</p><p>I&#8217;ve read a lot of engineering advice and I&#8217;m not sure I&#8217;ve read a better description of an ordering. Not a list of virtues. A <em>sequence</em>, in which the final term is explicitly not something you pursue. You get it.</p><p>Now look at what we actually do with these tools.</p><p>We start at Fast.</p><p>Fast is the whole pitch. Fast is what the demos show, what the pricing is built on, what the interface defaults to. Nobody&#8217;s tooling opens by asking whether the thing should exist. And so the sequence gets run backwards: generate first, and discover afterward what you&#8217;ve committed to.</p><p>Bill Gates said the sharpest version of this decades before any of this existed, about business processes rather than code: automation applied to an efficient operation magnifies the efficiency, and &#8220;automation applied to an inefficient operation will magnify the inefficiency.&#8221; Point a code generator at a system whose requirements you never questioned and you don&#8217;t get a better system. You get more of the same system, faster, with the mess now load-bearing.</p><p>Which suggests the ordering isn&#8217;t optional, and it isn&#8217;t new. We just used to get the first three steps for free, enforced by friction, and now we don&#8217;t.</p><p>Ask whether it should exist. Delete what shouldn&#8217;t. Simplify what&#8217;s left. <em>Then</em> let the machine run.</p><div><hr></div><p>I want to be careful here, because there&#8217;s a cheap version of this argument that I don&#8217;t mean.</p><p>The cheap version is &#8220;write less code,&#8221; as though brevity were the point and terseness a virtue. Neither is true. Deleting the wrong thing is worse than adding the wrong thing, because at least the addition is visible. Jobs had the better formulation: &#8220;To be truly simple, you have to go really deep.&#8221; Simplicity that comes from conquering complexity, not from ignoring it. The five hundred lines that genuinely needed to be five hundred lines are not a failure of restraint.</p><p>So: not a call for less. A call for the order.</p><p>And the honest difficulty is that the first three steps are all judgment, all unmeasurable, and all slower than the fourth. Questioning a requirement takes a conversation. Deleting something takes a defense. Simplifying takes understanding the thing well enough to know what&#8217;s load-bearing &#8212; which is the most expensive knowledge there is and the least visible once you have it. Meanwhile the fourth step takes a prompt and produces something you can screenshot.</p><p>I don&#8217;t think that asymmetry resolves. I think it&#8217;s the permanent condition now, and the practical question is just whether you can build something small and mechanical that forces the order &#8212; ask first, generate second &#8212; because relying on remembering to be disciplined is, as I&#8217;ve argued elsewhere, relying on a mood.</p><p>The closest thing I have is a rule for deciding what to automate rather than what to delete: only automate what you can imagine never needing a person for again. Partial automation is the dangerous kind, because it strands the knowledge while still requiring the person. Not the same problem. But it has the right shape: you answer it before the thing exists, and that is the cheapest place there has ever been to remove something.</p><div><hr></div><p>What I keep returning to is that none of this is a complaint about the tools. I use them every day and they&#8217;ve changed how I work more than anything else in a decade. The generation is genuinely extraordinary.</p><p>They didn&#8217;t only remove effort. They also, accidentally, removed a governor. And governors are easy to miss, because a governor&#8217;s entire job is to be the reason something didn&#8217;t happen.</p><p>Which leaves a question I don&#8217;t have a settled answer to, and I&#8217;d rather put it to you than pretend otherwise.</p><p><strong>For twenty years, the cost of building things badly was the main reason we didn&#8217;t. That cost is gone, and it isn&#8217;t coming back. So what are you going to put in its place?</strong></p>]]></content:encoded></item><item><title><![CDATA[The Hard Part Isn't Getting AI to Write Code. It's Trusting What It Wrote. ]]></title><description><![CDATA[Generation is the solved part. Everything expensive happens after the code comes back.]]></description><link>https://jeffderrick.com/p/the-hard-part-isnt-getting-ai-to</link><guid isPermaLink="false">https://jeffderrick.com/p/the-hard-part-isnt-getting-ai-to</guid><dc:creator><![CDATA[Jeff Derrick]]></dc:creator><pubDate>Mon, 21 Sep 2026 22:27:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9Iyj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9Iyj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9Iyj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!9Iyj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!9Iyj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!9Iyj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9Iyj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52294,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://jeffderrick.com/i/216751467?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9Iyj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!9Iyj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!9Iyj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!9Iyj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a29cd7-4f7d-42e9-9855-34a93483fc31_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If your mental picture of AI-assisted development is still &#8220;will it produce something that works,&#8221; you&#8217;re arguing about something that has already been settled. It can write the code, it has been able to for a while, and it gets noticeably better every few months.</p><p>The question that actually decides whether these tools help or hurt on software that has to last is a different one, and a much harder one. Once the AI has written something, how do you know you can trust it enough to keep it?</p><p>That sounds like a small distinction. It isn&#8217;t. It&#8217;s the whole game, and it gets a fraction of the attention, because it&#8217;s a lot less exciting than watching a feature appear out of a prompt.</p><p>Let me explain why it matters so much, and then what I&#8217;ve actually found that works.</p><h2><strong>Why trust is the bottleneck, not generation</strong></h2><p>Think about the difference between a weekend project and a system a lot of people depend on for a long time.</p><p>On the weekend project, what happens if the AI writes something subtly wrong? You find out fast, the blast radius is tiny, and fixing it costs you an afternoon. Trust barely matters, because being wrong is so cheap. You can just try things.</p><p>On a system that has to keep working (real users, real data, years of accumulated decisions) the math flips completely. A subtly wrong change can sit there quietly and surface months later as corrupted data, a security hole, or an architectural decision that makes everything after it a little harder. Being wrong stops costing an afternoon and starts costing something large, delayed, and often impossible to trace back to the moment it was introduced.</p><p>And here&#8217;s the trap: <em>the AI is equally confident in both cases.</em> The code comes back plausible, well-structured and confident-looking whether it&#8217;s right or catastrophically wrong, because the fluency is constant and the correctness is not. So on serious software the effort changes kind rather than owner &#8212; out of typing and into judgment. Out of &#8220;writing the code&#8221; and into &#8220;verifying I can trust the code,&#8221; which on a complex system was often the harder and more expensive half to begin with.</p><p>So the naive version of AI-assisted development (prompt, accept, ship, repeat) doesn&#8217;t scale to high-stakes work, not because the code is bad, but because it quietly transfers unverified risk into your system faster than you can check it. You end up with more to review, less context on each piece (you didn&#8217;t write it), and a tool that is cheerfully generating in whatever direction you pointed it &#8212; including off a cliff.</p><p>The teams that will use these tools well on software that matters aren&#8217;t the ones with the best prompts. They&#8217;re the ones who build an environment where the AI&#8217;s output can be <em>trusted by construction and verified cheaply</em>, so that going fast doesn&#8217;t mean flying blind.</p><p>Here&#8217;s what that has actually looked like for me: four things, none of which involve writing better prompts.</p><h2><strong>Make the channel narrow</strong></h2><p>The first is resisting the urge to let the AI touch everything freely, and instead making it work through a <em>narrow, well-defined channel.</em></p><p>The wider and vaguer the surface you let it operate on, the more places it can be subtly, invisibly wrong. But what if you route its work through a constrained interface, a strict configuration schema, a defined contract, a small set of shapes the output is <em>allowed</em> to take? Then a whole class of mistakes becomes impossible rather than merely unlikely, and the constraint does some of the checking for you.</p><p>This is just good engineering, honestly, and we&#8217;ve always known that narrow interfaces contain the blast radius. AI raises the stakes, because now you have a fast, confident, tireless thing producing code, and the constraint is what keeps its confidence from becoming your problem. A narrow channel turns &#8220;I have to carefully review everything it could possibly have done&#8221; into &#8220;it can only do things of a shape I&#8217;ve already decided is safe.&#8221;</p><h2><strong>Make the changes cheap to review</strong></h2><p>The second is the one that has changed my workflow the most, and it&#8217;s less about the AI than about what surrounds it.</p><p>Why do people either white-knuckle every AI edit or, more often, quietly stop reviewing them? Not because they stopped believing in review. Reviewing is expensive and tedious, and under time pressure the review is the thing that silently gets skipped. And an unreviewed AI change on a serious system is exactly the unverified risk we&#8217;re trying to avoid.</p><p>So the highest-leverage thing I&#8217;ve done is make the review <em>cheap and immediate</em>. I let the AI edit fairly freely, and I can loosen the reins precisely <em>because</em> I see every change it made as a clean visual diff and can go through them quickly, hunk by hunk. Because the review is fast, I actually do it &#8212; not every line, but anywhere a mistake would be expensive. Which is the whole point: the goal was never to review less, it was to make reviewing cheap enough that I stop cutting corners. Pair that with frequent, small commits and you get a genuine balance &#8212; the speed of AI generation on one side, the review-and-verify discipline I actually want on the other, held together by the fact that checking its work costs me almost nothing.</p><p>The insight underneath it: the speed of AI development is only safe if the speed of <em>review</em> keeps up. Invest in making the review effortless and you can safely let the generation run fast. Skip that, and speed just becomes unverified risk arriving faster.</p><h2><strong>Let evidence do the trusting, not your eyes</strong></h2><p>The third is verification you don&#8217;t have to perform by hand: tests, and increasingly, AI-run tests.</p><p>Eyeballing a diff catches a lot, but not everything. Does this change actually behave correctly? Human review of that question is both fallible and exhausting. The more of it you can turn into something automated, a check that passes or fails on its own, the more your trust is grounded in evidence rather than vigilance. Lately I&#8217;ve found real value in having the AI run tests directly against my local development environment as part of the loop: it makes a change, exercises it, and shows me whether it actually works, not just whether it looks right. That isn&#8217;t the only testing I do, and it doesn&#8217;t replace my own judgment, but semi-automating that verification layer means a whole class of &#8220;looks fine, is broken&#8221; problems gets caught by the process instead of by luck.</p><p>The principle: trust should be <em>earned by evidence</em>, not extended on the strength of confident-looking output. Every piece of verification you can automate is a piece of trust you no longer have to grant on faith.</p><h2><strong>Make suspicion a move, not a mood</strong></h2><p>The last is one I used to describe as a posture. I&#8217;ve come to think that&#8217;s exactly what&#8217;s wrong with it.</p><p>The instinct is right. When the AI produces something and it looks clean and the change seems small and everything appears to just work, that is the moment to get <em>more</em> careful, not less. Some of the worst problems hide behind output that looks too easy.</p><p>But look at what I argued two sections ago about review. People don&#8217;t stop reviewing because they stopped believing in it. They stop because it&#8217;s expensive, so under pressure it silently gets skipped. I don&#8217;t get to make that argument about review and then quietly exempt suspicion from it. Vigilance is a mood, and moods don&#8217;t survive a busy Thursday.</p><p>And it fails at the worst possible moment. The dangerous point isn&#8217;t when the AI hands back something obviously strange (you catch that). It&#8217;s when the change <em>works</em>. Once the thing you set out to do is done, the attention attached to checking it evaporates, because finishing is what tells your brain to stop. Success is what switches the suspicion off.</p><p>So what do you do with an instinct that&#8217;s right but can&#8217;t be relied on? What I actually practice is a move rather than a feeling. When a change comes back smaller or cleaner than I expected, I make the AI account for it: <em>this is so minimal it&#8217;s almost concerning &#8212; walk me through why this actually works.</em> Not because I think it&#8217;s wrong. Because I want the reasoning on the table where I can see it, and because I don&#8217;t trust myself to remember to want that at five o&#8217;clock on a Thursday.</p><p>It&#8217;s the ordinary discipline of anyone responsible for a system that matters, with one addition I&#8217;ve earned the hard way: the tool&#8217;s confidence is not evidence, and neither is my own sense that I&#8217;m being careful. Only the verification is.</p><h2><strong>What this actually is</strong></h2><p>Step back and notice what the narrow channel, the cheap review, the automated tests and the forced accounting have in common. None of them is about getting <em>more</em> out of the AI. They&#8217;re all about being able to <em>trust</em> what it gives you: preventing whole classes of errors, making verification so cheap you actually do it, grounding trust in evidence instead of appearances, and refusing to let confident output stand in for correct output.</p><p>That reframes the whole skill. The valuable thing isn&#8217;t prompting, which is easy and getting easier. The valuable thing is <em>judgment about verification</em>: knowing where the blast radius lives, what &#8220;correct&#8221; means for this system, which checks can be automated and which can&#8217;t, and which clean-looking answers deserve a second look. Where does that judgment come from? Not from the tool, but from having been responsible for software that had to keep working, and from paying attention to how it broke.</p><p>Which leads to the thing I keep coming back to:</p><p><strong>As these tools get better at writing code, the scarce skill isn&#8217;t writing code, and it isn&#8217;t prompting either. It&#8217;s building the environment that lets you trust what they wrote &#8212; and being the person who can tell when the confident, clean-looking answer is quietly wrong.</strong></p><p>So what would change my mind? The whole claim rests on one condition: that a human is still the one who ships. If verification itself ever becomes something you can hand off, a checker reliable enough to certify correctness rather than just flag suspects, then this is a skill with a shelf life like plenty of others. I don&#8217;t see that coming; the failure modes I run into today are the same ones as two years ago, produced faster and phrased more convincingly. But that&#8217;s the seam, and it&#8217;s where I&#8217;d look first if I&#8217;m wrong.</p><p>Until then, I don&#8217;t think that skill is going away, and if anything the better the tools get, the more it&#8217;s worth. But it&#8217;s a strange, hard-to-measure kind of value: the disasters you prevented, the risk you didn&#8217;t take on, the review you made cheap enough to actually do. Easy to feel. Hard to point at. Worth building anyway.</p>]]></content:encoded></item><item><title><![CDATA[Maybe the Best Thing AI Does Is Help You Write Less Code]]></title><description><![CDATA[The most valuable thing AI has done for me isn't the code it wrote. It's the code it helped me not write.]]></description><link>https://jeffderrick.com/p/maybe-the-best-thing-ai-does-is-help</link><guid isPermaLink="false">https://jeffderrick.com/p/maybe-the-best-thing-ai-does-is-help</guid><dc:creator><![CDATA[Jeff Derrick]]></dc:creator><pubDate>Mon, 14 Sep 2026 17:00:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ezQC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ezQC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ezQC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ezQC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ezQC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ezQC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ezQC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88439,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://jeffderrick.com/i/215423208?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ezQC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ezQC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ezQC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ezQC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb13d524c-7da6-4c42-9049-8554f54d552b_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Look, I use these tools all day. I&#8217;m not here to tell you they don&#8217;t work. They do, and they&#8217;re only going to get better. But after leaning on AI for real work for a while now, I&#8217;ve noticed something that doesn&#8217;t show up in the demos, doesn&#8217;t show up in my commit history, and honestly doesn&#8217;t show up anywhere except in my own head at the end of a long day.</p><p>The most valuable thing AI has done for me isn&#8217;t the code it wrote. It&#8217;s the code it helped me <em>not</em> write.</p><p>That took me a while to see, so let me try to explain.</p><p>A few years ago I wrote a post about a restaurant-industry concept called <a href="https://medium.com/@jeffderrick/full-in-full-out-3343355bb6ee">Full In, Full Out</a> &#8212; the idea that a good waiter never walks with an empty hand, clearing plates on the way in and carrying food on the way out. It was a post about proactivity, but there&#8217;s a section in it I keep coming back to that wasn&#8217;t really about waiters at all. It was about design:</p><blockquote><p>When something is designed <em>really</em> well, the final design can often end up feeling obvious to the uninitiated. I&#8217;ve started to feel a little bad for designers, as when they are successful, the result of that good work is that it can cause others to think that their work is less necessary: <em>&#8220;Well that doesn&#8217;t look so hard. Just 2 colors, a few lines here and there, and a bunch of white space. I could have done that, piece of cake!&#8221;</em>.</p></blockquote><p>And then the line I think matters most:</p><blockquote><p>The final product may be both simple and efficient, but neither of those things were inevitable and come only from hard work that goes largely unseen.</p></blockquote><p>I wrote that about design. It turns out to be the truest thing I know about software engineering, too. And I think it&#8217;s the key to what AI is actually doing for the people who are good at using it.</p><p>Here&#8217;s the thing that a lot of people, including a lot of developers, never fully internalize: in a system that has to last, the code is the liability, and the working system is the asset. Every line you write is a line someone has to understand later, maintain later, debug later, work around later. The best engineers I know aren&#8217;t known for how much they produced. They&#8217;re known for the mess they <em>didn&#8217;t</em> make: the feature they talked someone out of, the abstraction they collapsed into something simpler, the clever solution they passed on because a boring one would age better.</p><p>Which brings me to the uncomfortable part.</p><p>If the highest-value work in software is <em>subtractive</em> &#8212; less code, less complexity, the bug caught before it ships &#8212; then look at everything we&#8217;ve built around these AI tools. All of it points the other way.</p><p>The marketing is about generating: ships features 10x faster. The demos are always something appearing on the screen, never something wisely left off it. The metrics your organization can actually see (commits, pull requests, lines, velocity) all count production. And the interface itself, that little cursor waiting for you to type &#8220;build me X,&#8221; quietly nudges you toward making the thing rather than asking whether the thing should exist at all.</p><p>So we have a technology that&#8217;s genuinely capable of the subtractive, high-value work. I know it is, because it does it for me every day. And it&#8217;s wrapped in a commercial layer pointed almost exactly the opposite direction.</p><p>If you want the purest example of this, look at design. Good design is the ultimate subtractive act: the elements removed, the step taken out of the flow, the screen that ends up looking so obvious you assume it was easy. And it&#8217;s exactly <em>because</em> it looks easy that it gets undervalued. The better the work, the more invisible it becomes. Code and design turn out to have the same secret. The best of both is defined by what isn&#8217;t there, and neither shows up on a dashboard.</p><p>And it gets worse, in a quiet way.</p><p>Using AI subtractively is <em>harder</em> than letting it generate. To make the small change instead of the big one, you have to understand the system deeply enough to know which small change is the right one. To catch the thing that&#8217;s about to go wrong, you have to be paying real attention. To decide <em>not</em> to build something, you have to hold the whole picture in your head and take responsibility for the call. That&#8217;s the tiring work. Accepting the generated output is the easy work. The tool&#8217;s path of least resistance runs downhill toward volume, and the valuable thing is uphill. So even the person best positioned to use it well has to spend energy fighting the current, and gets, for the trouble, nothing anyone can see.</p><p>I keep thinking about another line from that same old post:</p><blockquote><p>When you took the time to solve a problem very few people knew about and saved yourself and others around you countless hours, they may never know to thank you as you made the problem go away before it became a problem for them as well.</p></blockquote><p>I wrote that in 2019, about being proactive. I could republish it today, unchanged, about what it feels like to use AI well.</p><p>Here&#8217;s what worries me, and I want to be careful here, because I don&#8217;t think it&#8217;s obvious in either direction. What if all of this rewards the wrong thing without anyone being foolish or lazy?</p><p>Picture two teams. The first uses AI to spray out an enormous volume of plausible code. It ships constantly, looks tremendously productive on every dashboard, and quietly piles weight onto the foundations of its system until, a couple of years later, everything is slow and brittle and no one can quite say why. The second team uses AI with restraint. It ships less. It keeps the system clean and comprehensible and easy to change. And by every available metric, it looks like it&#8217;s getting <em>less</em> out of the same expensive tool.</p><p>Which team gets praised this quarter? Which one gets the budget next year?</p><p>The signal isn&#8217;t just missing. It might be <em>backwards</em>.</p><p>I don&#8217;t have a clean answer to this, and I&#8217;m suspicious of anyone who says they do. Maybe the value surfaces eventually. The sprayed-out system does bog down, the clean one does keep moving, and over a long enough horizon the truth comes out. I hope that&#8217;s how it goes. But I&#8217;ve spent enough years inside real organizations to know that the distance between <em>true</em> and <em>recognized</em> can be enormous, and that the story a company tells itself about why it slowed down is rarely the honest one.</p><p>So I&#8217;ll leave you where I usually do: with a piece of advice and a question, and no tidy conclusion.</p><p>The advice: the best thing you do with these tools may be the thing no one thanks you for, the same way it&#8217;s always been. If you find yourself using AI to build <em>less</em>, you&#8217;re very likely doing the most valuable work available to you: keeping things simple, catching what&#8217;s coming, making the change small. Know that it will probably be invisible. Value it anyway. You may be the only person who ever really knows what it took.</p><p>And the question, worth asking of yourself and of whatever metric is currently telling you how well you&#8217;re doing:</p><p><strong>Are we measuring how much got built &#8212; or whether the right thing got built?</strong></p><p>I&#8217;m increasingly convinced those aren&#8217;t the same question. And I think the whole story of AI and software is going to turn on which one we decide to care about.</p>]]></content:encoded></item></channel></rss>