<script data-pm-proxy="intercept"></script><?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[Elevate]]></title><description><![CDATA[Addy Osmani's newsletter on elevating your effectiveness. Join his community of 600,000 readers across social media.]]></description><link>https://addyo.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!8WxC!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3704470-b6d5-48a9-a9d1-564bd833fc5c_1280x1280.png</url><title>Elevate</title><link>https://addyo.substack.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 01 Sep 2026 07:02:33 GMT</lastBuildDate><atom:link href="/__u/addyo.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Addy Osmani]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[addyo@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[addyo@substack.com]]></itunes:email><itunes:name><![CDATA[Addy Osmani]]></itunes:name></itunes:owner><itunes:author><![CDATA[Addy Osmani]]></itunes:author><googleplay:owner><![CDATA[addyo@substack.com]]></googleplay:owner><googleplay:email><![CDATA[addyo@substack.com]]></googleplay:email><googleplay:author><![CDATA[Addy Osmani]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Agentic Skill Decay]]></title><description><![CDATA[Agents can finish the task without teaching you anything. Building expertise now has to be deliberate.]]></description><link>https://addyo.substack.com/p/agentic-skill-decay</link><guid isPermaLink="false">https://addyo.substack.com/p/agentic-skill-decay</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Mon, 31 Aug 2026 14:30:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6vlm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Mastery still comes from doing the reps.</strong></p><p>Before agents, I got my reps as part of writing code: try different approaches out, debug what went wrong, review other&#8217;s code, read a lot. Agents can skip much of that work, so <strong>building your reps has to be deliberate</strong>.</p><p>If I was new to the industry, I&#8217;d try to form a hypothesis before prompting. Ask &#8220;why&#8221; a lot, read the diffs, try to predict what might fail. Occasionally try to work through the problem myself manually.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!VOAM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!VOAM!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!VOAM!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!VOAM!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!VOAM!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!VOAM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.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;:405592,&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://addyo.substack.com/i/213179308?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!VOAM!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!VOAM!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!VOAM!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!VOAM!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F533936d6-73ea-4b39-b93b-fc4aa965952c_3200x1800.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"><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"><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"><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"><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rpIJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rpIJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg" width="1200" height="669" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:669,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:102987,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/213179308?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 1456w" sizes="100vw"></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"><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"><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"><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"><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><figcaption class="image-caption"><strong>Your AI agent has database access. Can you <a href="https://fandf.co/4wXsoWS">tell</a> what it did?</strong> Give an agent a Postgres login and it looks like any other role - a shared, long-lived credential with no real way to know which agent ran which query. The modern fix is identity: access scoped to the task that expires when it&#8217;s done, and an audit trail tying every query to a specific agent (and the human behind it). That&#8217;s the model Teleport is built on - identity-based access to your infrastructure, no static credentials. Worth a read if agents are near your production data. <a href="https://fandf.co/4wXsoWS">Read more</a> &#183; Sponsored by Teleport. #ad</figcaption></figure></div><p>In my experience, <strong>good agent work depends on two abilities</strong>:</p><ol><li><p><strong>Deep expertise:</strong> you understand the problem domain well enough to define a good outcome. Understanding your user/product/business is part of this.</p></li><li><p><strong>Applied judgment:</strong> use your taste to turn this into a clear, testable plan by choosing the right context, constraints, tests and verification.</p></li></ol><p>To build these the skills I&#8217;d practice are decision making, specifying, steering and verifying.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Eprh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Eprh!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!Eprh!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!Eprh!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Eprh!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Eprh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.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;:424742,&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;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/213179308?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Eprh!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!Eprh!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!Eprh!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Eprh!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ab34b15-d3b0-4d9a-a893-e19b3633237c_3200x1800.png 1456w" sizes="100vw"></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"><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"><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"><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"><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><h2><strong>The reps I actually did</strong></h2><p>When I got started in software engineering, I very much felt like I had no idea what I was doing. I was having a lot of fun building, a lot of fun trying things out, failing, learning from my mistakes, and each time getting a little further and further in my journey. And every time I failed, I tried to take that as another building block in becoming a better engineer. And so all of this work was me doing the reps. It&#8217;s the way that I learned JavaScript. It&#8217;s the way that I learned how to program in C++ and build desktop applications. It&#8217;s how I learned how to tune the performance of graphics intensive applications, all of these types of things.</p><p>Building up the reps, very often I would go into a task with some sort of hypothesis or an idea, even if it was, like, super wrong about how things might work. I would try out what I thought could work, and when it didn&#8217;t work, I would then go to Stack Overflow or search the web for different documentation and absorb some knowledge. Maybe read some books if it was a very esoteric topic. I would then continue on my journey. And you do that enough times and you start to build out expertise, especially once you start doing this for real and trying it out on real world projects that go beyond hobbyist stuff that you might be doing at the weekends.</p><p>Most of the judgment I use today came from thousands of small reps like these: debugging failures, reviewing other people&#8217;s code, and living with abstractions that looked good until a real system pushed back. Agents can now skip much of that work. <strong>If you&#8217;re three years into your career, plausible code may arrive faster than your ability to judge it.</strong></p><h2><strong>The short-circuit</strong></h2><p>Now, I think that for many people who are getting started with AI, you can short-circuit a lot of the learning journey. You can go very quickly from, hey, here&#8217;s a problem, to, well, hey, here&#8217;s the solution, or here&#8217;s the outcome of the overall task, while skipping all of those things that would otherwise have built up your knowledge base, or helped educate you about, you know, don&#8217;t do that thing, this is why you don&#8217;t do that thing, do this thing, and help you reason about the trade-offs. And I think that this is one of those areas where it&#8217;s going to require junior engineers especially to be proactive about their educational journey.</p><p>I&#8217;ve also talked to a few different AI labs. Many of the main players in AI right now are very focused on helping you accomplish an outcome or get an answer as quickly as possible, and they don&#8217;t necessarily help you in your education journey unless you&#8217;re specific about that being one of your goals. Like, there&#8217;s a difference in me saying, hey, help me build an app for scheduling, and, help me build an app for scheduling and teach me how to do it as we&#8217;re going, going one step to another. Most people don&#8217;t do the second one of those things. And part of it is not knowing that that is an option. Part of it is perhaps thinking, well, hey, these days there are all these velocity expectations and there&#8217;s this pressure to ship fast and just move on to the next thing. But I do think that in order to become better engineers, to continue having this expertise that improves our taste and our judgment, you do have to go out of your way to build up mastery.</p><h2><strong>A completed task is not necessarily a rep</strong></h2><p>I think that with any kind of critical thinking, with any type of problem that you have, it&#8217;s useful to have a hypothesis about the solution, an idea about what it might look like: the shape of it if we&#8217;re just talking about logic and code, how it might look and feel and interact if it&#8217;s a piece of UI. <strong>When a task is finished, it doesn&#8217;t necessarily mean that you have learned something.</strong> It just means that the task has been finished. You have to almost look out for those learning opportunities, or you can ask your agent to summarize as it&#8217;s building or at the very end: what are the key learnings from this that would help me as an intermediate developer, or as a junior developer, increase my knowledge base or improve how I think about problems? And you can keep doing that. You just have to be proactive about your learning journey.</p><p>For me, there are several things that I&#8217;ve been able to use AI for these days, and more complex 3D graphics programming is definitely one of those. I&#8217;m not an expert. And there are definitely times when I try to make sure I&#8217;m asking the AI, okay, so can you explain how this thing works? Can you teach me about this concept you just implemented? Can you help me reason about how these different elements connect? And I think that because I want to learn, and I have that desire to learn, I am pairing with my agent in order to do that. If you&#8217;re not necessarily trying to learn, you lose opportunities there.</p><p>A completed task not being a rep is also something that happens when there aren&#8217;t mistakes in the process. When there are mistakes, you start to think, okay, well, why did it go wrong? What could be better? What am I not thinking about? And it forces you to reflect. When things go right, there&#8217;s not really a teaching moment there. You just think, okay, well, the work&#8217;s done, I&#8217;m just going to move on to the next task. And so, especially if you&#8217;re junior, you want to be looking for those opportunities to keep leveling up.</p><p>There was a <a href="https://www.anthropic.com/research/AI-assistance-coding-skills">2026 study by Anthropic</a> looking at junior engineers learning a particular Python library, Trio. <strong>People who used AI assistants scored 50% on a follow-up quiz against 67% for the group who were working by hand.</strong> And within the AI group, the strong results came from those who asked conceptual questions and requested explanations rather than treating the model as a code vending machine. This ties back to what I was saying: if you are just using AI to generate output and generate outcomes, but you&#8217;re not using it as a pair, you&#8217;re not using it to try improving your critical thinking skills, your knowledge skills, your understanding of how things work, you can end up in this situation where you largely don&#8217;t understand how things work, but you&#8217;re just good at prompting. And that means you&#8217;re perhaps not really going to be so good at the verification side of things. It doesn&#8217;t surprise me too much that people who asked questions and requested explanations did better. Those people probably had a lot more reflection on how things worked, how it connects to other things that they know. They pattern match, they start to build up residue about, okay, well, this is how this thing works, this is how I reason about it, these are the gaps in my knowledge. And so seeing that 17% difference kind of makes sense to me. Of course, this was a short-term study of just one Python library, so I wouldn&#8217;t say it&#8217;s conclusive necessarily, but it was still very interesting.</p><p>This is still how I work when I&#8217;m learning something unfamiliar. I try to keep myself in the loop. I form a hypothesis before prompting. I ask why, inspect the diff, predict what might fail, and give the agent a concrete way to verify its work. Occasionally I work through a small problem by hand. I want the agent to close the task while my mental model still moves.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!st_j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!st_j!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!st_j!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!st_j!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!st_j!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!st_j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.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;:490553,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/213179308?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!st_j!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!st_j!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!st_j!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!st_j!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02a2e7f3-9206-4629-b63f-6b5c9aa876bf_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p><h2><strong>Use them aggressively anyway</strong></h2><p>I don&#8217;t know how long code-level expertise will remain as valuable as it is today. Models are improving too quickly for much certainty. I also don&#8217;t think the answer is to avoid agents or romanticize typing every line. I use them aggressively. On some days I have five or ten sessions running, and I once caught myself asking the wrong project to add dark mode. That mistake clarified the constraint: <strong>agent throughput scales faster than my attention.</strong></p><h2><strong>A thousand hours in the performance panel</strong></h2><p>I can think of things that I had to spend thousands of hours to get right. Performance optimization is one of those areas where, back in the day, you didn&#8217;t always have a whole lot of great blog posts or books that you could consult. There was some decent, very classic literature on these topics that would maybe touch on memory or how to think about hardware and constraints. But you take something like web performance optimization, JavaScript optimization, heap optimization, all of these things, there weren&#8217;t always great articles about these things. And so you would build your reps by going into the Chrome developer tools, using the performance panel to run a trace of a page or an application, interact with it, try to find, like, where is the slowness? And then trying to drill down and come up with a hypothesis of, okay, well, it looks like this is the area of the flame graph where most of the problem seems to be. Or this is where maybe, in the memory panel, I&#8217;m not allowing garbage to be collected, or anything like that. In my time, you had to have gone through the gauntlet of making enough mistakes, attempting to find out the root cause, that you built up this knowledge, this esoteric at times knowledge, about what worked and what didn&#8217;t.</p><p>These days, a similar flow would be one where you&#8217;d have the DevTools MCP go and do the performance profiling for you with your agent, and figure things out, and then come up with the fix for you itself. And so you don&#8217;t necessarily then build up that expertise in performance quite as much.</p><h2><strong>You can only prompt what you can imagine</strong></h2><p>When I scroll through Twitter these days, I am always impressed with how much imagination and creativity is in my feed. So many designers, creative people sharing amazing shaders, amazing games, UI, immersive experiences that they are building that is now even more so possible. Like, the tech was there, but imagination is now the ceiling. It&#8217;s much, much more accessible for you to build these things much more quickly. But you have to have that imagination in order to have the idea in the first place and tell your agent to build it. And then you have to have that expertise to verify it. <strong>So verification is the floor and imagination is the ceiling.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Hg_v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Hg_v!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!Hg_v!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!Hg_v!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Hg_v!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Hg_v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.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;:419824,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/213179308?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Hg_v!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!Hg_v!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!Hg_v!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Hg_v!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043c3ff0-6168-43be-9f60-fbc355b88c21_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>I remember, for an upcoming album site (I do music), I wanted some of the homepage to be these 3D objects that were interactive, that are part of the experience. Things like 3D CD players, and I think I had a vinyl record player in there as well, maybe a tape player, some 90s nostalgia. Now, the initial versions not only didn&#8217;t look amazing, but they didn&#8217;t follow the right interaction pattern. They didn&#8217;t perform as well on mobile. And so I had to first of all have the expertise to notice that it was buggy in some way. Maybe any user would notice that. But then I had a hypothesis about why that might be. And I could then go and either profile it myself or ask my agent to profile it and figure out what happened, what went wrong. Maybe there was just some way in which the interaction logic was written that wasn&#8217;t great. And so I think that your imagination is really important, but then so is your expertise. Both of these things are important. If you can think it, you can make it.</p><h2><strong>Does the next generation need the expertise?</strong></h2><p>There is a valid question about, like, hey, if an agent can do these tasks, and increasingly well, do humans need to build up that expertise? Does the next generation need to build up expertise in some of these esoteric areas? And I think that, at least today, where that still becomes useful is places where the agents don&#8217;t do a perfect job, where their work does need to be checked. Where you ask something to optimize a particular loop, an animation, a scheduling routine, or anything like that, and maybe it does that at the cost of something else. And if you don&#8217;t know what to spot, or you don&#8217;t know how to read the implementation and understand what was done, you can end up shipping something that actually doesn&#8217;t do what you want.</p><p><strong>Skills and MCPs can encode a useful workflow. They cannot tell you when its assumptions no longer fit your system.</strong></p><p>There was an <a href="https://www.anthropic.com/research/claude-code-expertise">Anthropic study of around 400,000 Claude Code sessions</a> that looked at expertise as being this task-specific thing. And it found that having even intermediate expertise about the task that you were trying to complete increased the chances of you reaching verified success with that task, rather than someone who is a little bit more novice. It doesn&#8217;t mean that you have to have a decade of experience across the stack, but it does mean that <strong>you need to understand the problem domain enough to recognize what good means</strong>. We sometimes talk about that these days in terms of taste, and I&#8217;ve written about this before. This is also one reason, when I read the <a href="https://code.claude.com/docs/en/best-practices">Claude Code best practices guide</a>, I&#8217;m very happy to see that it starts off talking about verification: testing, using screenshots, other signals that give your agent something that it can continue to iterate against, and gives you evidence to review instead of just some simple summary saying that the task is complete. Having expertise helps you shape clay much better than someone who doesn&#8217;t have a lot of expertise but can maybe shape something that looks okay.</p><p>And this all comes back to having that expertise to be able to verify the work, to be able to judge the agent&#8217;s work. And so I&#8217;m hopeful that we can continue to invest in mastery and invest in craftsmanship, even as software engineering continues to rise in the abstractions that we&#8217;re using to build software.</p><h2><strong>The return on expertise is going up</strong></h2><p>I feel like software engineering fundamentals are going to continue to be important. Expertise is going to continue to be important. And now that the floor has been raised, AI is also increasing the return on the skills that people have, on the expertise that people have. People who are junior stop being junior by shipping real things and making mistakes, learning, building the reps. Experts kind of have an intuition about what to build, how to verify it, how to make sure that you know it&#8217;s good, it&#8217;s not broken, it&#8217;s going to be maintainable, it&#8217;s going to scale, it&#8217;s going to work in the different contexts or platforms. And especially now that so many people are able to just prompt and bring an idea into being, making it high quality and good enough to ship, delightful, and something that is maintainable and isn&#8217;t going to break in production, those skills are going to continue being important.</p><p>I run into this at least a couple of times every week. It&#8217;s so easy now to prompt any kind of app, any kind of feature. For example, I&#8217;m building a text editor at the moment, not from scratch. The idea for this is to be sort of a writing aid that highlights opportunities for your grammar to be better, or to not be using AI style writing, that type of thing. And a frontier model was able to generate me, with a lot of back and forth, a nice and okay looking UI. It wasn&#8217;t amazing. And it had a bunch of issues, such as it didn&#8217;t have the optimal use of screen real estate. It didn&#8217;t have good color contrast. It didn&#8217;t have a good scrolling model. All of these things that I know because I&#8217;ve made these mistakes before, I&#8217;ve built up the expertise. But if you don&#8217;t have that expertise, you might just prompt something, put it out into the world, and then stop. And you don&#8217;t know what&#8217;s better, because you haven&#8217;t put in the time to build up that expertise.</p><h2><strong>Put the lesson where the next agent can find it</strong></h2><p>One of the things that I tell people I mentor is that when you work with an agent, you should be making it better, and it should be making you better. And what that means is that every day, there should be some sort of cycle where you&#8217;re getting things added to lessons or to memory or something so that it&#8217;s able to improve. Because otherwise, <strong>every time that you&#8217;re starting a new session, it can feel like you&#8217;re onboarding a new hire that has amnesia</strong>. They&#8217;re not necessarily going to remember the subtleties of your business, your product, your team, your users, or any of that stuff. And so this is why we end up capturing so much in not just skills, but context and all the stuff that we try to give our agents. And we need to be careful about things that are actually useful and actually specific to problems versus things that we just think are making things better. And so I always encourage people to see, how can you make sure that you are teaching your agent more, and making sure that every day it&#8217;s getting better and you&#8217;re getting better?</p><p>If you are in a chat window and you happen to be solving a problem, like, let&#8217;s say that you discover some subtle scrolling bug in a UI component that you&#8217;re working on. You work with your agent, you go back and forth, and there&#8217;s a lesson somewhere in there that you could potentially use in the future. Now, maybe that lesson will get added to memory. Maybe it won&#8217;t. And especially if it&#8217;s a long session that has compacting, that full lesson may not necessarily go in there. So that lesson could disappear when the chat window dies. While if you instead try to codify things like specific lessons, tests, lint rules, anything, especially that is small enough that it can be codified in your repo, it can teach future agents. And I found that personally very helpful. If I learn a lesson, I take a few minutes to review and see, is this worth adding to my lessons.md, or asking my agent to add it to its memory, or something that&#8217;s just going to keep it sticky? Because I don&#8217;t want lessons to disappear. I&#8217;m going to forget personally, I&#8217;m going to move on to the next problem. This comes up all the time for me. It can be everything from, hey, I have a particular preference for how I approach UI, to how I approach writing components, to how I approach performance, all kinds of things. And if there&#8217;s a subtle way in which I address a problem, I want my agent to remember that, or have a way to remember it, rather than me having to continue restating this every single time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rpIJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rpIJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg" width="1200" height="669" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:669,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:102987,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/213179308?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!rpIJ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8480372-8299-4734-ae32-be587a7664a0_1200x669.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><figcaption class="image-caption"><strong>Your AI agent has database access. Can you <a href="https://fandf.co/4wXsoWS">tell</a> what it did?</strong> Give an agent a Postgres login and it looks like any other role - a shared, long-lived credential with no real way to know which agent ran which query. The modern fix is identity: access scoped to the task that expires when it&#8217;s done, and an audit trail tying every query to a specific agent (and the human behind it). That&#8217;s the model Teleport is built on - identity-based access to your infrastructure, no static credentials. Worth a read if agents are near your production data. <a href="https://fandf.co/4wXsoWS">Read more</a> &#183; Sponsored by Teleport. #ad</figcaption></figure></div><p>Very often we treat our agents as something that&#8217;s going to remember everything that we do, and that&#8217;s not necessarily the case. Even if the agent has got a memory system, you can&#8217;t necessarily fully rely on it to recall all of the interesting things that you were maybe trying to learn, or the way that you like working, or the way that you would approach verification. And so it is okay to start capturing more of these things in markdown files. Just be very, very careful and cautious that you&#8217;re not over investing in that as a strategy. I always liked this idea of a dual loop. <strong>A good rep where you learn should sharpen you, and it should sharpen your agent.</strong> And when you have some hypothesis that was maybe corrected, you consider if that correction warrants becoming a linting rule, some type constraint, a documentation convention or a test, just so that it can stick around and benefit you in the future.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!tFyQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!tFyQ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!tFyQ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!tFyQ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!tFyQ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!tFyQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.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;:463504,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/213179308?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!tFyQ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!tFyQ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!tFyQ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!tFyQ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c677220-5198-41b4-8b7b-0601e89f22d5_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2><strong>The outer loop</strong></h2><p>So I think what all of this means with respect to mastery is: invest in your expertise and in your craftsmanship. Do the reps, make mistakes, learn from them. You will over time be able to figure out what deserves to exist. You&#8217;ll be able to start writing up plans, refining plans, coming up with some definition for what done means, and also planning out for those places where humans are going to stay in the loop to check on correctness, safety, or user impact. That is going to be largely the outer loop I think engineers are going to need to own today. We&#8217;re going to keep seeing AI moving engineering further up the abstraction layers. And <strong>the more agents that I can run, the more care I need to choose where my limited time, taste, and judgment goes.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6vlm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6vlm!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!6vlm!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!6vlm!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!6vlm!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6vlm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg" width="1456" height="812" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1489168,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/213179308?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!6vlm!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!6vlm!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!6vlm!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!6vlm!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e53802-9a6e-4e6a-9b63-c6445808ab99_2754x1536.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Audit your Agent files]]></title><description><![CDATA[A practical guide to auditing what your coding agent still needs.]]></description><link>https://addyo.substack.com/p/audit-your-agent-files</link><guid isPermaLink="false">https://addyo.substack.com/p/audit-your-agent-files</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Thu, 27 Aug 2026 14:31:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ICwj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>TL;DR: Your coding agent&#8217;s configuration has a half-life. Models improve, harnesses add capabilities, codebases change, and the instructions we wrote for an older version stay behind. Recent research finds inconsistent value from personalized skills. I now run Claude&#8217;s /doctor every few weeks, review memory separately, and ask each instruction to earn its place again.</strong></p><p>I feel like there&#8217;s been a lot of confusion about skill files and what to do with your CLAUDE.md and AGENTS.md files, especially as I&#8217;ve been reading developer discourse on Twitter over the last few months. People have been saying things like, hey, keeping your skills and CLAUDE.md/AGENTS.md files up to date is a big pain point. Very often, people are trying to get them to steer their agents, but are having a hard time keeping them under 200 lines long, even if that&#8217;s an official target. People are finding it hard to keep them lean. They&#8217;re raising token costs. They can make the agent worse as you keep adding and adding and adding stuff to them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LqaC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LqaC!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!LqaC!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!LqaC!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LqaC!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LqaC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!LqaC!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!LqaC!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!LqaC!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LqaC!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8312b4-b5e2-4fdd-af03-8e1a8fb8d583_2048x1024.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"><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"><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"><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"><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><figcaption class="image-caption"><strong><span>The agent loop, decoded.</span></strong><span> Every agent is the same core loop - call the model, run a tool, feed the result back, repeat. What makes one production-ready is what you add around it: state, memory, and the harness that runs them. Oracle's developer team breaks this down across three levels (minimal loop &#8594; memory-aware reasoning engine &#8594; the harness as a system), each with runnable notebooks so you can build it, not just read it. Worth a read if you're taking agents past the demo stage. </span><strong><span>Read it &#8594; </span><a href="https://fandf.co/4q1byDX"><span>https://fandf.co/4q1byDX</span></a></strong><span> &#183; </span><em><span>Sponsored by Oracle. #ad</span></em></figcaption></figure></div><p>And the official guidance that I&#8217;ve read is that you should be periodically deleting your CLAUDE.md, your skills and your hooks, like every couple of months, rebuilding only what matters. But my own experience with that is that people have this fear of, hey, I don&#8217;t know if that&#8217;s going to actually make things significantly worse. I&#8217;m worried that if I do, that quality is going to drop very heavily. And I don&#8217;t have an easy way to just quickly restore things or try this out. There&#8217;s so many different configurations I can use models with. And so it can feel like this advice comes across as easy to try out when it&#8217;s not always going to be that way. And sometimes all of these markdown files and practices can become outdated and they can hurt more than they help. But I do think that there is something in this advice about how models and harnesses do actually get much better.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pKJJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pKJJ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!pKJJ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!pKJJ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pKJJ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pKJJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.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;:443319,&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;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/212751319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!pKJJ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!pKJJ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!pKJJ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pKJJ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59c22df-1c4d-4061-9af1-1e652d2ff058_3200x1800.png 1456w" sizes="100vw"></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"><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"><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"><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"><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><h2><strong>I&#8217;m a fan of skills. The critiques are still fair.</strong></h2><p>I&#8217;m personally a big fan of Agent Skills. I and a few of my friends maintain some Agent Skill packages that have gotten a little bit of traction. I maintain <a href="https://github.com/addyosmani/agent-skills">Agent Skills</a>, which is an SDLC-focused pack. My friend Paul Bakaus maintains <a href="https://impeccable.style/">Impeccable</a>, which is a design-focused pack. And sentiment has been generally pretty positive with developers using skills with coding agents. They&#8217;re seen as a good abstraction for turning a generalist into a specialist, right? And they work pretty well with a lot of different coding agents and harnesses. So people like them.</p><p>One of the sets of critiques has been fair. Of course, you have many different people writing them for very different domains. There isn&#8217;t really a great playbook for how to do this. So we&#8217;re all really playing it by ear. And we try to learn from each other. We take on feedback from the community and we&#8217;re constantly iterating on these things. But skill hygiene continues to be very important. Sometimes you&#8217;ll find skill packs that have thin descriptions, or they&#8217;re a little bit on the vaguer side for their workflows. And so I still think that agent skills are something that I believe in, and I think that they have a lot of value. But as people have really leaned into them over the last couple of months, auditing skills has also become increasingly important.</p><p>You could be doing a bunch of different parallel projects or parallel tasks on any given day. For some of them, maybe you&#8217;ll try out new community skills, or maybe you&#8217;ll try putting together your own skills for them. And if you can imagine, over the course of a couple of months, those skills locally can build up, and you&#8217;re probably not going to use all of those. You&#8217;re probably actually going to use a fraction of them.</p><p>When I&#8217;ve gone and I&#8217;ve read Hacker News discussion threads on public skills, the debate is very much, you know, there are people who find value in skills. There are people who call them net negative. There are people who feel like there isn&#8217;t enough evidence presented about the value. There are folks who feel like they just add a lot of noise. There&#8217;s heavy token costs. They&#8217;re unreliable. I certainly think that there&#8217;s a lot of valid feedback in here. It is sometimes challenging to come up with enough evidence to show, for everyone&#8217;s workflows, that these are actually a net positive. But there are plenty of people who say they find these things beneficial, and then plenty of cases where the feedback is valid. Like, hey, show me that this is actually going to be useful enough for me to consider for my project.</p><h2><strong>Why agent configuration rots</strong></h2><p>People keep adding rules to their CLAUDE.md files and their skills every time that they see their agent steering them in the wrong direction. I&#8217;ve certainly done that over time. And then the file balloons, adherence drops, you add more and more rules and quality can end up getting worse. And you almost end up treating it as this full knowledge base instead of a short decision guide. And that&#8217;s a very classic mistake.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FzIB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FzIB!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!FzIB!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!FzIB!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FzIB!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FzIB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.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;:423005,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/212751319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FzIB!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!FzIB!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!FzIB!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FzIB!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7c64106-34f7-45e8-871f-889ffb1c8dc6_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>AGENTS.md and CLAUDE.md bloat is also another big problem. I think it&#8217;s pretty widely acknowledged at this point. There have been a number of different research exercises done on real repos, and they found that there were a lot of configuration smells that were pretty common. Context bloat is pretty common, skill leakage, lint leakage. And most of the agent files that these research exercises have tried out had at least one issue. Files generally do grow past the Anthropic guidance of 200 lines. Some even reach hundreds or thousands of lines, wasting tokens on every session.</p><p>And I&#8217;m to blame as well for this. When I try looking at some of the CLAUDE.md files that I&#8217;ve put together in the past, not for sharing with people but just in my own setup, I&#8217;ve also gone past 200 lines. And I found that there were a few common failure modes that I&#8217;ve seen in my own files. Things like overly long examples. Redundant content that may have been present in readmes or package manifests or skill files. Add a rule every time the agent errors. That kind of growth can keep compounding. And so I think that you kind of have to think about it in a very, very focused way. And I&#8217;ve also seen that being over-specific in your CLAUDE.md file, in AGENTS.md, can sometimes not actually lead to the outcomes that you want.</p><p>For the numbers: <a href="https://arxiv.org/abs/2606.15828">a June study</a> of 100 popular repositories found lint-related leakage in 62%, context bloat in 42%, and skill leakage in 35%. And in <a href="https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models">The new rules of context engineering</a>, Anthropic says it removed more than 80% of Claude Code&#8217;s system prompt for its Claude 5 generation models with no measurable loss on internal coding evaluations. That result is not a target; the evaluations are not public, and it covers specific models in a specific harness. The lesson is that instruction value can expire, so archive first, and if a rule must always hold, encode it in a test, hook, or permission rather than leaving it as prose the model might lose.</p><p>I think there&#8217;s been some really good research I&#8217;ve been reading over the last couple of months, some good empirical studies that will maybe help with the discourse. And I wanted to make sure that I was covering some of this in an article for people, as I think some people haven&#8217;t had time to read some of these papers as well.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!nXPu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!nXPu!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!nXPu!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!nXPu!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nXPu!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!nXPu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.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;:608546,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/212751319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!nXPu!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!nXPu!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!nXPu!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nXPu!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c5e0a8-5ef1-4e8e-ab7f-84843be92f57_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2><strong>Do personalized skills help coding agents?</strong></h2><p>I&#8217;ve been wondering how useful it would be for Claude Code or Codex to gradually learn how I like to work. Maybe I prefer small changes, want tests run a certain way, or don&#8217;t want the agent refactoring unrelated code. <a href="https://arxiv.org/abs/2608.10319">This paper</a> tries to turn that interaction history into a reusable personal skill. The surprising result was that personalization didn&#8217;t help very much. A skill based on one developer&#8217;s history performed about as well as a skill borrowed from somebody else. A generic skill built from lots of developers was more useful overall.</p><p>For many of us, we think that having a bunch of skills for our specific workflow can actually make a huge difference. But some of the research actually says that that&#8217;s not necessarily the case, and that having skills based on broader engineering, broader community best practices, can actually make more sense and actually lead to more value. And, I&#8217;m sorry, I should also say, where they can add value is if you have skills that include more examples for specific tasks. And sometimes those broader community skills will have this. For example, if I&#8217;m trying to tackle a problem related to, let&#8217;s say, scheduling, and there&#8217;s a bunch of different ways to approach scheduling, a bunch of quirks around it. If my skills, whatever ones I have, have a bunch of very concrete examples and specificity around it, maybe those can help guide the agent in a certain way. Otherwise, just having some details about, oh, I&#8217;d prefer the formatting of my scheduling primitives to look this way, that&#8217;s not actually all that helpful.</p><p>Personalization did look more promising when the same preference recurred across several similar tasks, though the experiments used an LLM-based developer simulator, so treat this as promising rather than final. My takeaway is to begin with a strong generic skill and add personal rules gradually. I wouldn&#8217;t promote a preference into permanent agent memory because I mentioned it once.</p><p>Skills once again, when I talk to companies and I&#8217;ve talked to enterprises, they see it as high value. They think that individual engineer skills are useful, but then when you have a set of skills for a team or an org, they think that that can lead to compounding value, which is kind of cool. So you&#8217;ve got your engineering culture captured in there, your compliance rules, your brand, your internal tooling quirks, how you want to approach consistency across people and different coding agents, how you want to approach the review process and provisioning and any of those types of things.</p><h2><strong>Do context files help coding agents?</strong></h2><p>I&#8217;ve been using files like AGENTS.md and CLAUDE.md as a kind of operating manual for coding agents. <a href="https://arxiv.org/abs/2607.27250">This paper</a> asks whether those files actually help Claude Code and Codex solve more tasks. Across 288 runs on 17 real tasks, they didn&#8217;t make a clear difference to correctness.</p><p>Context files did change how the agents worked, though. In one repository, the guide warned that the full test suite was very slow. Claude responded by running more targeted tests and wasting less time. It didn&#8217;t become better at implementing the feature, but it followed the repository&#8217;s workflow more efficiently. I think that&#8217;s the useful distinction. A context file can tell an agent about expensive commands, generated files, architectural boundaries, or project-specific safety rules. It can&#8217;t necessarily teach the agent how to make a subtle design decision; the near misses usually came down to implementation judgment, and more repository prose wouldn&#8217;t have solved those problems.</p><p>My takeaway is to keep repository context files focused on things the model can&#8217;t easily infer from the code: how to run the right checks, which operations are expensive, what must remain untouched, and where the unusual project conventions live. I wouldn&#8217;t fill them with generic advice about writing clean code. <a href="https://arxiv.org/abs/2607.09691">A related study</a> points the same way: prose summaries answered 4 of 45 behavioral questions about code while the source itself answered 27 of 45, because summaries smooth over the small details that matter. Point the agent at real code, not descriptions of it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!3q7w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!3q7w!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!3q7w!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!3q7w!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3q7w!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!3q7w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.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;:488222,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/212751319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!3q7w!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!3q7w!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!3q7w!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3q7w!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c3ef5a2-097c-452a-846c-8e57ddf3242f_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2><strong>What I found when I audited my own setup</strong></h2><p>I was really happy to see Claude put out the doctor command in Claude Code. It&#8217;s a good hygiene command, and it basically runs a checkup covering unused skills and MCP servers and plugins relative to their context cost, whether you&#8217;ve got an over-specified CLAUDE.md file, slow hooks, or cruft, or things like that. And when I&#8217;ve run doctor on my own setup, I&#8217;ve been just shocked at things that were still hanging around that I&#8217;d completely forgotten about. Like, if you&#8217;d asked me, I wouldn&#8217;t have guessed that they were still there. I&#8217;d completely forgotten that I&#8217;d even experimented with them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BC8V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BC8V!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!BC8V!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!BC8V!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BC8V!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BC8V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.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;:515192,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/212751319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!BC8V!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!BC8V!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!BC8V!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BC8V!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F103fa351-693c-4f95-ba7a-1a71f468659b_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>I&#8217;ll give you one example. At a point in time, maybe four or five months ago, I was curious about different writing skills that people were checking out. There were a lot of different anti-slop skills that people were experimenting with. And so I had tried out a bunch of different ones of those. And I was shocked because I&#8217;d completely forgotten how many of those I&#8217;d had installed. I had no idea. Like, are these things being triggered together? Or is one taking priority over another? Are they all being ignored? I&#8217;d just not realized that those things were still hanging around at all. And so auditing that was very useful. There were some design skills that some friends had written that I was trying out that I&#8217;d forgotten about. And now, as we&#8217;ve seen the community in some cases converge on some high-quality skills, I would prefer to lean on those than some of the other experimental ones that I tried from a few months ago.</p><p>I remember recently seeing a tweet where somebody was saying, yeah, I started auditing my skills and I went down from 250 to 25. And I was just like, how do you end up with 250 skills? That&#8217;s crazy. But experimenting with a lot of community skills, these can easily compound over time. And you don&#8217;t want to confuse your agent, right? So you&#8217;ve got to periodically lint and clean up your agent environment.</p><p>Installing a useful skill and keeping it forever are separate decisions.</p><h2><strong>Auditing quality, not just quantity</strong></h2><p>I think another thing about skills is just making sure that they&#8217;re high quality. Anthropic&#8217;s own Skill Creator now includes evals and a benchmark mode for trying to check on quality. There are good community tools for checking on SKILL.md quality. Like, do they have good descriptions, good triggers, clear steps and examples? There are more security-focused auditors and best practices for skills as well.</p><p>One naming trap worth knowing: in Claude Code, <code>/doctor</code> inside a session is the configuration audit, while <code>claude doctor</code> in a shell only prints installation diagnostics, which is why some people report that doctor &#8220;only shows a status check.&#8221; And an installed skill does not dump its whole body into every prompt: names and descriptions load for discovery within <a href="https://code.claude.com/docs/en/skills">a listing budget</a> defaulting to 1% of the context window, and the body loads on invocation. I also review memory separately with <code>/memory</code>, since auto-memory can hold stale preferences even after the project files are tidy.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ENFg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ENFg!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!ENFg!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!ENFg!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ENFg!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ENFg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.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;:447310,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/212751319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ENFg!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!ENFg!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!ENFg!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ENFg!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74c89da7-a8a5-47b9-adec-fb022b53fa15_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2><strong>Audit on a cadence, then test removal</strong></h2><p>And so I think there&#8217;s high value personally in, like maybe every couple of weeks, maybe at once a month even, just running doctor on your skills, on your setup, and auditing what you&#8217;re doing and seeing, okay, well, what still holds true? And then if you have the time, actually going and seeing, like, if you were to delete your skills, or you were to instruct your agent, well, don&#8217;t use any local skills at all. Only try to complete this task using the raw model and harness. And see, is it actually okay without using any of these skills? And then you can ask yourself, okay, well, actually, maybe it&#8217;s okay for me to delete these skills. Maybe that&#8217;s fine.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7tjY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7tjY!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!7tjY!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!7tjY!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7tjY!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7tjY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.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;:509493,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/212751319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!7tjY!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!7tjY!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!7tjY!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7tjY!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87e90a1f-0513-40e3-9bcd-f379f6707cdb_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>But I feel like sometimes we lean on skills and all of these things we&#8217;ve installed as a crutch, because we feel like it&#8217;s unsafe to remove them, because we don&#8217;t trust that the model and harness have actually gotten better. So I think that there&#8217;s a lot that we can experiment with and learn.</p><p>Continue to have hygiene around them. Audit the quality, the security. Do run doctor commands regularly, and try to just make sure that you&#8217;re keeping your local setup as lean, but as specific, as is needed.</p><p><em>Thanks once again to our sponsor Oracle. Do check out their <a href="https://fandf.co/4q1byDX">Agent Loop Decoded</a> post which is a pretty solid read <span>the three levels every agent engineer must know.</span></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ICwj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ICwj!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ICwj!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ICwj!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ICwj!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ICwj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1210392,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/212751319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ICwj!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ICwj!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ICwj!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ICwj!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad710881-6432-4a04-baf3-03b343e99361_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Human judgment doesn't leave the software factory. It relocates.]]></title><description><![CDATA[A field guide to building a software factory that still has an owner.]]></description><link>https://addyo.substack.com/p/human-judgment-doesnt-leave-the-software</link><guid isPermaLink="false">https://addyo.substack.com/p/human-judgment-doesnt-leave-the-software</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Fri, 21 Aug 2026 14:31:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tZuD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><span>A software factory is a repeatable loop around software work. If you&#8217;re building a software factory, code good enough to ship still needs human taste and ownership. We&#8217;ll discuss this including whether you </span></strong><em><strong><span>need</span></strong></em><strong><span> a factory just yet.</span></strong></p><p><span>If so:</span></p><ul><li><p><span>You&#8217;ll likely need humans in the loop upfront for deciding on product intent, system design (if you care) and your quality bar.</span></p></li><li><p><span>Do review code (lights-on factory) but be intentional with where it&#8217;s needed the most. I&#8217;ve found you want to watch out for where automated back-pressure breaks. Or where maintainability trade-offs need to be made.</span></p></li><li><p><span>Aim for quality checks to happen as early and continuously as possible. Not all of them have to, but this includes type systems, automated tests, mutation testing, security scanners and linting for architecture rules.</span></p></li><li><p><span>Number of checks != quality. You&#8217;ll likely need to experiment with what checks give you the best signal to noise ratio. Be ready to tighten or relax your constraints deliberately.</span></p></li></ul><p><span>You want to build your factory so some aspects of human taste get encoded in the environment, the agent gives you evidence of its work being right and where a human still &#8220;owns&#8221; what ships to production.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yDtq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yDtq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_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;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_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"><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"><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"><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"><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><figcaption class="image-caption"><strong>Your agents write the code. Your gate decides if it ships.</strong> AI agents are writing more of my code, faster than ever - but fast isn't the same as shippable. So I let a coding agent build an app, then put it through SonarQube. Every commit gets the same deterministic check: deep cross-file analysis, a clear map of where the risk actually lives, and a quality gate that holds every human and every agent to one bar. The screenshot? A PR that didn't pass. That's the gate doing its job. <span>Try SonarQube &#8594; (</span><a href="https://fandf.co/4g7DP8r">https://fandf.co/4g7DP8r</a><span>). Sponsored by Sonar.</span></figcaption></figure></div><h2><strong><span>Do you really need a software factory?</span></strong></h2><p><strong><span>In my experience, you can get surprisingly far with your stock coding harness!</span></strong><span> i.e. Claude Code or Codex, multiple sessions, good SPECs with verification baked in and constraints. You can even throw a batch of GitHub issues at them with implementation and human-involvement criteria, but it&#8217;s when this system needs to be </span><strong><span>repeatable and event-driven</span></strong><span> that a factory is helpful.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!NmZq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!NmZq!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!NmZq!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!NmZq!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NmZq!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!NmZq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.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;:533210,&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;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!NmZq!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!NmZq!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!NmZq!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NmZq!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6be805c-2eb0-49d2-b3aa-e0b4e2f2d471_3200x1800.png 1456w" sizes="100vw"></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"><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"><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"><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"><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><span>So I started off by saying </span><strong><span>a software factory is a repeatable loop around software work</span></strong><span>. We can actually look at a prompt that demonstrates a very small factory loop here:</span></p><blockquote><pre><code><code>Read GitHub issue #123 and the repository instructions before changing code.

Implement only the stated acceptance criteria. Do not modify authentication,
billing, migrations, or existing test assertions. Work in a branch and keep the
diff reviewable.

Run npm run lint, npm test, and npm run build. If a required check cannot run,
stop and explain why. Open a draft pull request with the checks you ran, the
remaining risks, and any decision a human still needs to make. Do not merge.</code></code></pre></blockquote><p>A goal can keep this moving until the checks pass and we can poll GitHub issues for any specific labels or review open pull requests each morning. Branch protection could enforce a merge boundary and the human can stay in the loop by choosing what becomes ready, reviewing and making the final merge calls etc.</p><p><strong><span>Add a software factory when you need an event-driven queue of work (e.g. Slack triggers, GitHub issues, Linear, a backlog) to run in an isolated cloud environment to handle triage, implementation and testing with some explicit human babysitting. Some end their loop with a monitor agent watching production and filing issues which triage again.</span></strong></p><p><span>In my experience, the factory becomes useful when the hard part is making your different runs behave consistently, handing work off between agents and avoiding different sessions from claiming the same issue, preserving evidence and stopping production when human review is falling behind.</span></p><p><span>What solves this might sound a little boring. For example, Warp mention </span><a href="https://www.warp.dev/blog/how-to-build-a-cloud-software-factory-the-automatic-triage-skill"><span>triaging</span></a><span> every incoming issue into one of four states - </span>ready-to-implement, ready-to-spec, needs-info, wait-to-implement - and the label is what fires the next agent. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_eIF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_eIF!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!_eIF!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!_eIF!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_eIF!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_eIF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.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;:685839,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!_eIF!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!_eIF!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!_eIF!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_eIF!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd76a0e4-d045-49ff-972d-0776e8011b2d_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>This label does a few jobs in one go: it&#8217;s the queue, the lock and since a session only picks up what&#8217;s marked ready, it&#8217;s where a human can park stuff without saying no permanently.</p><p>Workflow wise, there are a few similarities and differences to just using Claude/Codex:</p><ul><li><p><strong>Steering</strong>: agent needs course-correction, you can give input and redirect it</p></li><li><p><strong>Notifications</strong>: how the factory says its blocked. This can be because a requirement was ambiguous, it started something risky or it needs human input (steering)</p></li><li><p><strong>Handoff:</strong> move the task, its state and context between the cloud factory/another agent/human reviewer. Good handoffs will keep track of what happened, whats left to be done and why the handoff is needed.</p></li></ul><p><strong>In a good factory, the human isn&#8217;t limited to just reviewing and approving the final diff at the very end. They can shape the work early on, steer it during implementation, get it through a handoff or stop it shipping to production.</strong></p><p>Verification is where a responsible factory spends a lot of its time. We&#8217;ll cover this more later.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yoB1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yoB1!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!yoB1!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!yoB1!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yoB1!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yoB1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.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;:482409,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!yoB1!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!yoB1!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!yoB1!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yoB1!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2c3634a-d076-49c6-bcdf-d0140b0256f2_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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 you decide you do need a software factory, building it isn't the only option. Standing up the infra to scale a factory can be a lot of work and you may want to consider buying vs. building. <a href="https://factory.com/product/software-factory">Factory</a>, <a href="https://www.warp.dev/blog/how-to-build-a-cloud-software-factory-the-automatic-triage-skill">Warp</a> and <a href="https://www.humanlayer.dev/">HumanLayer</a> are all working on this. </p><h2><span>What my day looks like now</span></h2><p><span>My day-to-day experience of software development has changed a lot over the past year. I&#8217;ve been talking about increasingly doing a lot of parallel work with agents, moving towards having a lights-on software factory. And a lot of people have been asking me, like, what do these things actually mean? What are you building? What are the kinds of projects that you&#8217;re using these things on? It&#8217;s a lot of this:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Z5fF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Z5fF!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!Z5fF!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!Z5fF!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Z5fF!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Z5fF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.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;:480468,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Z5fF!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!Z5fF!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!Z5fF!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Z5fF!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1441d4fc-126a-492e-bf68-85d661d0d9f7_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><span>So on a very average day, I have a simpler lights-on software factory. I can have tasks that are running in the cloud. Half of these tasks might be working on production client applications with smaller companies that I&#8217;m working with. They&#8217;re going to have real users. They&#8217;re going to have real authentication, payments, subscriptions, real beefy risks that you need to be careful with. You can&#8217;t just say, oh, agent, just go and do this stuff without having tests and constraints and quality checks in place.</span></p><p><span>I could work on my open source projects. I could be building out companion sites for my books. I could be working on tools. I could be building apps of my own. And these are all very, very different kinds of applications that I&#8217;m working on. And sometimes all they have in common is the tool that I&#8217;m using to work on them, right? Maybe I&#8217;m working on a migration. Others, I might be doing actual beefy feature work. And the blast radius of the work might also be very, very different.</span></p><p><span>So as you begin to think about getting to a place where we&#8217;re increasingly doing a lot of parallel work, we&#8217;re trying to improve velocity, we&#8217;re trying to improve productivity, and we&#8217;re trying to improve autonomy, which means getting the system to a place where we trust it more, you do have to think about what are the places that absolutely require human code review, human input. </span></p><p><span>And a lot of that is going to be required up front, right? When you&#8217;re defining your specification, your requirements, what is the design of the product going to look like? What is the intent of the product going to look like? And then how are you verifying that the agents have actually gotten the work done right? How are you verifying that they haven&#8217;t broken the existing system that has been in place? How are you making sure that it&#8217;s meeting your quality bar?</span></p><p><span>And so generating code is not necessarily the part that you need to worry about the most. Given enough context, agents can write the implementation and run the tests and inspect failure and revise code for us. </span><strong><span>We need to get to a place where we feel like there is enough of human taste encoded in the environment that we can trust what is being built, so that our human attention can be focused on the places where it&#8217;s needed most.</span></strong></p><p><span>Now, there is pushback from folks saying, hey, well, I don&#8217;t buy that you can just automate away a lot of this stuff. It&#8217;s not to say that we&#8217;re automating away all of it, right? But given the volume of code that&#8217;s being generated, I don&#8217;t think that it&#8217;s realistic for humans to be reading all of it, especially when we&#8217;re not building rockets a lot of the time, right? We&#8217;re building UI, we&#8217;re building full stack applications.</span></p><p><span>Our judgment, our taste is best focused on the places where it&#8217;s needed the most. Like, what are the riskiest parts of the systems? Where do we need to apply human taste? And that can be in the front end. That can be in how the system works. It doesn&#8217;t have to be 100% of it.</span></p><h2><span>My cognitive bandwidth does not scale with the agents</span></h2><p><span>The reality is, yes, we can now fire up dozens, hundreds, thousands of agents in parallel, but your own cognitive bandwidth does not scale in the same way. This can feed into cognitive or comprehension debt which I&#8217;ve talked about before.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!wfmG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!wfmG!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!wfmG!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!wfmG!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!wfmG!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!wfmG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.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;:410250,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!wfmG!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!wfmG!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!wfmG!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!wfmG!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e764468-0140-4189-a8fc-6e345e1a9f84_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><span>If you remember back to just five, ten years ago, there was a lot of discussion in the engineering community about context switching and the cost of it. We would talk about how people hated when a colleague or someone would walk up to your desk when you were in the middle of a task. It would then take you so long to get back into your flow state because you had to catch back up in terms of like, where was I? What was I doing? Even if you had a little bit of residue there, it still took you time.</span></p><p><span>We&#8217;re now context switching even more than we did before. On any given day, if I&#8217;m working outside of a software factory, I can be working on five or ten different projects with agents at a single time, or five or ten different features on a single project at a time. I can have five or ten different sessions, you can effectively say.</span></p><p><span>That means that I have to be able to stay on top of at least a few of those. It is possible that I&#8217;m going to be able to increase how much autonomy I give some tasks if I have trust that I&#8217;ve defined the task well enough, I&#8217;ve defined the outcome, how it&#8217;s going to verify that it&#8217;s done well enough. But then there are going to be tasks where maybe I don&#8217;t necessarily feel that way and there&#8217;s more risk involved or more nuance. I&#8217;m going to have to pay attention.</span></p><p><span>Consider optimising the software factory for your reviewer. Given every one of those approaches still routes its output to one person's attention, you should ask how much cheaper the factory is making the decisions you still have to make.</span></p><h2><span>A wrong-project mistake</span></h2><p><span>I remember when I&#8217;ve been working on multiple parallel projects with my agents, and there have been times when I&#8217;ve accidentally done things like, maybe I was working on a web app where I wanted to add in a dark mode, and so I had in my head, okay, well, this is what the shape of this needs to look like. But I accidentally went to the session for a different project, and I started putting in that same prompt.</span></p><p><span>So I began implementing dark mode for something that absolutely didn&#8217;t need it. And so I can make that mistake. I don&#8217;t want my software factory making that kind of mistake.</span></p><p><span>You need to think about this really in terms of a system. You are effectively trying to encode a software engineering culture, a team culture, into a system so that it has those same kinds of behaviors, so that it has ownership that belongs somewhere, so that someone is still on the hook for what happens, and you&#8217;re being very explicit about how you think about those things.</span></p><h2><span>When green is misleading</span></h2><p><span>Even in these systems, you want to be very careful, right? Many of us have seen that when you have asked AI to help you pass a test, like we&#8217;re talking about a programming test, a unit test, it can change the unit test to satisfy that condition, or it can change the logic of the code to pass that condition. That doesn&#8217;t mean that it&#8217;s actually followed your intent in order to align both the functional behavior and what the test was supposed to be testing, right?</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jWpN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jWpN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!jWpN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!jWpN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jWpN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jWpN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18a89035-d628-400e-9333-9a2407e873b9_3200x1800.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;:668838,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!jWpN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!jWpN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!jWpN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jWpN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18a89035-d628-400e-9333-9a2407e873b9_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><span>Just because a software factory is showing that everything is green doesn&#8217;t mean that it&#8217;s actually green, especially at the start when you&#8217;re setting these things up. You need to pay a lot of attention to make sure that your checks, your verifications, all of those are shaped the right way. They&#8217;re doing what you expect them to be doing. You don&#8217;t want them to be misleading.</span></p><p><span>You don&#8217;t want a situation where you had tests that said, hey, actually, I have gone and changed what authentication providers are supported. You asked me to add GitHub for example, as an authentication provider, but hey, my UI only had space for three, so I&#8217;ve gone and I&#8217;ve dropped one of the other ones. And hey, by the way, that happened to be one that your customers actually wanted. So you just need to be very explicit about how you want these systems to work.</span></p><p>Btw security is super important too and if your factory reads untrusted input like a GitHub issue/Slack message it might be adversarial and include problems like supply chain attacks. So some explorations into software factories, like <a href="https://vercel.com/blog/building-a-software-factory-for-ai-sdk">Vercel</a>, run their agents in isolated sandboxes holding just the secrets a task needs. That way a compromised run can&#8217;t reach what the job doesn&#8217;t need. Your defense ends up being layered.</p><h2><span>Which old projects deserve another life?</span></h2><p><span>I also think that a big part of how we work these days is deciding what should exist. If you remember back to many years ago before AI, there were so many abandoned software engineering projects, so many abandoned weekend projects, personal projects where they just wouldn&#8217;t launch because we didn&#8217;t have the time to finish them. We didn&#8217;t have the bandwidth to prioritize getting them out the door because they just weren&#8217;t that important to us or we couldn&#8217;t find the time.</span></p><p><span>Now it&#8217;s fairly trivial for us to complete those projects, but the same human judgment question comes in. Do those projects deserve to exist? Should they be launched? Because you put them out into the world and even if it has just five users, maybe you have to maintain it. Maybe you have a quality bar now that you want to maintain.</span></p><p><span>I know that I&#8217;ve had so many GitHub projects from over the years where now that I have an agent, the first thing I do is get the thing building. Because, of course, you clone it and now it doesn&#8217;t build because all the dependencies have changed. Half the things are out of date or have security vulnerabilities all over them, so you have to update that.</span></p><p><span>Then you have to add tests if you didn&#8217;t have tests so that you know that behavior is at least going to be there if you&#8217;re upgrading the project in some way, or if you&#8217;re migrating it to a more modern language or framework or thing like that.</span></p><p><span>Then you start to ask yourself, well, maybe, a silly example, but maybe I used Twitter Bootstrap back in the day for this, but now everybody is using Tailwind and shadcn, so I have to re-implement the UI. And what you&#8217;ll notice is that suddenly this is taking you more time, right? Yes, the agent can get a lot of this done quicker, but you&#8217;re now having to factor in product sense and taste and all of these things.</span></p><p><span>You still question, well, who is this for? Does it have a market? Is it for myself? Is it for other people? If I&#8217;m putting it out into the world, is it still going to be as interesting given that now anybody can spin these things up as quickly?</span></p><p><span>So I think that human question of do these things deserve to exist? How do we factor in our taste and judgment? I feel like those things continue to be extremely important. That&#8217;s where that scarce resource of human attention still really comes in. Back in the day, we only had a finite number of hours in the day. We had meetings. We had to budget in time for design and coding and so on.</span></p><p><span>Now that we have agents to help us, I think that you have to really just be very explicit about where you&#8217;re spending your time and why.</span></p><h2><span>What happened when I built a sample one</span></h2><p><span>So I&#8217;m going to talk about the 82-minute factory run. People have been asking me for quite some time, you know, &#8220;How do I build a software factory?&#8221; Or, &#8220;I&#8217;m used to using Claude Code or Codex. How do I evolve my setup to using a software factory?&#8221;</span></p><p><span>So the first thing that I&#8217;ve been saying is, &#8220;You may be fine. Your work may actually be totally fine without needing a factory.&#8221; But I did want to give people a reference setup that they can check out. So what I put together is a repository called </span><a href="https://github.com/addyosmani/factory"><span>Factory</span></a><span> that you can go and check out. I also put together a </span><a href="https://github.com/addyosmani/factory-demo/"><span>demo application</span></a><span> and </span><a href="https://github.com/addyosmani/factory/blob/main/ADVICE.md#:~:text=step%2Dby%2Dstep%20workshop"><span>workshop</span></a><span>.</span></p><p><span>Now, for the last couple of years, my go-to demo application for a lot of things has been a movies app. I&#8217;m a big movies fan. I love watching movies. I watch movies all the time, and so I have a demo application, which really starts off as a very simple movies app. And what I want the factory to be able to do is go ahead and implement a number of features. There&#8217;s a few different features. I want a favorites feature. I want it to be able to maybe do search, and maybe also want a dark theme in there as well, those types of things.</span></p><p><span>So I have my factory go and begin working with these things. You can check out the implementation. One of the benefits of it was actually catching real problems. These problems may not have been things that I would have caught if I had just asked it to do a one-shot implementation.</span></p><p><span>Maybe around the 60-minute point, I was feeling like, &#8220;Wow, this is going unusually slow.&#8221; I asked my harness using the factory, &#8220;Why are things going slow?&#8221; It said, &#8220;This is actually totally fine. All the verifiers are still running.&#8221;</span></p><p><span>You might have expected individual tasks to take 10 minutes, 15 minutes, 20 minutes, but they can take two to four times as long once you begin to include verification, retries, browser checks, human review, any of those extra delays.</span></p><p><span>I do think that these can add up to better quality and better trust in the system. From a measurement perspective, you might look at metrics like </span>cost per merged PR and code shelf life as comprehension debt metrics.</p><p><span>You also need to think about what is useful delay versus factory overhead. The verifiers, in my case, caught some real problems. A little bit of the time was maybe sunk into producing evidence that I wanted. Some of it was overhead in the factory running. I didn&#8217;t really spend any time optimizing it, but a factory that just runs a lot of checks that you&#8217;re not finding valuable does not mean it&#8217;s a high quality one.</span></p><p><span>You want to study how, for any repeated checks, are they irrelevant? Are they noisy? Are they actually making the system safer?</span></p><h2><span>A verification budget</span></h2><p><span>The way that I think about the budget for verification, this is basically what we&#8217;re talking about. We&#8217;re talking about a verification budget. I think about it in the same way as I&#8217;ve historically thought about performance budgets.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HvHB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HvHB!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!HvHB!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!HvHB!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HvHB!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HvHB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.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;:590225,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!HvHB!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!HvHB!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!HvHB!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HvHB!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b91c1fe-ed7d-4d29-a5fa-0297c8ce95c6_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><span>There are going to be certain kinds of checks that you can run early on in your software development lifecycle, and there are going to be some things that are so heavy, but they offer so much value that you will want to run them later on. There are some kinds of fast checks, linting, for example, type checking. These are relatively fast checks that you can run early on.</span></p><p><span>Our full suite of tests can be run closer to right before a draft PR is being put together or after that. That can include mutation testing, browser testing, security checks, anything like that.</span></p><p><span>I think that you don&#8217;t necessarily want to replace these with just summaries. You want real tests, but you just need to make sure that you&#8217;re budgeting for them in the right places because you don&#8217;t want to slow down your development loop. I certainly never want to slow down my development loop. Having a fast iteration loop is important to me, but I also want to still have those checks and balances.</span></p><h2><span>When a run doesn&#8217;t ship</span></h2><p><span>A lot of what I&#8217;ve written above concerns the checks. </span></p><p><span>In their software factory, Vercel </span><a href="https://vercel.com/blog/building-a-software-factory-for-ai-sdk"><span>marks</span></a><span> every agent run as &#8220;success&#8221;, &#8220;flawed&#8221;, &#8220;blocked&#8221; or &#8220;manual&#8221; and only &#8220;success&#8221; ships to production. The rest re-enter the system. I&#8217;ve been thinking about runs in similar terms.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!51Tb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!51Tb!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!51Tb!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!51Tb!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!51Tb!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!51Tb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.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;:640717,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!51Tb!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png 424w, /__u/substackcdn.com/image/fetch/$s_!51Tb!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png 848w, /__u/substackcdn.com/image/fetch/$s_!51Tb!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png 1272w, /__u/substackcdn.com/image/fetch/$s_!51Tb!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf92aefc-7b5b-4cbe-ab52-c76cf73823d8_3200x1800.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><span>&#8220;Flawed&#8221; here means the wrong thing was implemented or maybe it didn&#8217;t have full context, so that has to be fixed. Blocked means the environment may have been missing a credential so you have to provide it. Manual is a boundary the factory may not be allowed to cross it yet.</span></p><p><span>Two of the three things here may have mechanical fixes and the last one is about trust.</span></p><p><span>While this is great w</span>hat sorting doesn't show you is cost. B</p><p>ack to my factory implementation with the TMDB app, the quick finder with no rejections took 7 minutes. Favorites, with two rejections and a human decision in the middle, took 56. Same factory. So I'd pair the taxonomy with per-stage timing, otherwise you know a run came back flawed without knowing what finding out cost you. The other thing I'd fix is the handoff at the boundary: my sample factory stopped issue the first issue and moved it to factory:needs-info, which was right, but I didn't know where to put my answer. A manual run isn't finished when the factory stops but when the human knows what to do next.<span> </span></p><h2><span>Autonomy is not a single setting</span></h2><p><span>I wrote a couple of weeks ago an article about </span><a href="/__u/addyo.substack.com/p/agentic-autonomy-levels"><span>agentic autonomy</span></a><span> and how to think about autonomy because autonomy is not going to be a single setting for every single project.</span></p><p><span>Verification buys you trust, and it buys the ability to grant more autonomy to your agents. So if, for example, I am working on a non-trivial change, but I have a number of checks in place, everything gets verified correctly, and maybe I&#8217;ve hand checked it myself. The next time I&#8217;m going to do a task like that in the same project, maybe I&#8217;ll feel comfortable giving the agent a little bit more autonomy.</span></p><p><span>That&#8217;s the thing that you think about when you&#8217;re building these software factories. Your verification is going to change with risk. Your goal is the best signal to noise ratio. You don&#8217;t just want to have some large checklist that you&#8217;re running.</span></p><h2><span>The feature I had to relearn</span></h2><p><span>There was a feature that I&#8217;ve been putting off on a day when I&#8217;ve been using multiple sessions with Claude, and I was working on a few different projects at a time, a few different features at a time per project. And so Claude had implemented the feature that I was working on. It looked like the tests were passing. I hadn&#8217;t put a lot of thought into verification, but the tests passed, and so I thought it worked. I merged it.</span></p><p><span>And so this was a favoriting feature. I thought that this was actually pretty good. I tried to check it out in the browser. It seemed like it was okay, but a couple of days later, I actually returned to the code because there were some tweaks that I thought I might make to this.</span></p><p><span>I didn&#8217;t want to just ask my agent to make the changes, because it was just a subtle way that it worked. You tap on the icon, and it would not show the right effect on tap, and so I wanted to just tweak it. I wanted to understand how it worked so I could guide my agent correctly.</span></p><p><span>I returned to the code, and I couldn&#8217;t explain to you how the feature worked. This repository was mine, right? I&#8217;d approved the change. I understood how a lot of it worked, a lot of the repo worked, but my understanding hadn&#8217;t kept up pace with all of the code that had been building up.</span></p><p><span>What I failed to absorb was how this feature that had been added actually worked, how the UI worked, how the effect on it worked. I had to redo this feature and actually go step-by-step, &#8220;How does this work? How can I understand it?&#8221;</span></p><h2><span>What parallel work does to understanding</span></h2><p><span>When you&#8217;re doing parallel work, it amplifies this overall problem, and it gets even more amplified when you&#8217;re doing it in a software factory. When you&#8217;re doing five or 10 sessions, they create much more than just a review volume problem. They create several mental models that can end up going pretty cold while you&#8217;re working elsewhere.</span></p><p><span>We&#8217;ve historically talked about the challenges with context switching, and as soon as chat compacts, you reject some approaches, you try out different things, you&#8217;re pairing with the agent, you&#8217;re going to have a difficult time remembering everything that happened in your session.</span></p><p><span>You can scroll up, and as compaction has been happening, you&#8217;re not going to have everything there, and you&#8217;re not going to be able to store it all in your head. Code often preserves a decision that was made, but not why the decision was made.</span></p><p><span>This is something that I think can be a useful learning for you, where it&#8217;s important, consider asking your agent to actually store information about its trajectory, or interesting lessons about how it approached a problem so that you can go back to it later.</span></p><p><span>This can or can&#8217;t be something that you decide to commit to a repo. You can keep it local if you want, you can share it with a team if you want, but that can be something that can then be consulted later on. Rather than you relying on it maybe being in a session, or you maybe remembering about it later.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!s_kN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!s_kN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png 424w, /__u/substackcdn.com/image/fetch/$s_!s_kN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png 848w, /__u/substackcdn.com/image/fetch/$s_!s_kN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!s_kN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!s_kN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112011,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!s_kN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png 424w, /__u/substackcdn.com/image/fetch/$s_!s_kN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png 848w, /__u/substackcdn.com/image/fetch/$s_!s_kN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png 1272w, /__u/substackcdn.com/image/fetch/$s_!s_kN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b96fe33-446e-4249-9a59-2c491df75639_1200x600.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><figcaption class="image-caption"><em>P.S. - if agents are pushing to your main branch, they need the same quality bar you do. SonarQube gates every commit deterministically: one standard for humans and agents alike, on every PR. Try Sonar &#8594; (<a href="https://fandf.co/4g7DP8r">https://fandf.co/4g7DP8r</a>) &#183; Sponsored by Sonar.</em></figcaption></figure></div><h2><strong>Ownership doesn&#8217;t disappear</strong></h2><p>There is a broader principle underneath all of this.</p><p>The percentage of code physically typed by humans may fall dramatically. I don&#8217;t think human ownership needs to fall with it.</p><ul><li><p>Someone still chooses the problem.</p></li><li><p>Someone still chooses the architecture.</p></li><li><p>Someone still sets the quality bar.</p></li><li><p>Someone decides which verification signals deserve trust.</p></li><li><p>Someone decides when the evidence is sufficient to ship.</p></li></ul><p>And when the resulting system fails, &#8220;the agent wrote it&#8221; doesn&#8217;t cut it. This is why I don&#8217;t think the future of software engineering is best described as humans leaving the loop. Instead, <strong>human judgment is being relocated. </strong></p><p>We should remove people from the parts of the loop where machines can produce stronger, faster, more deterministic signals. At the same time, we should concentrate people around the places where context, taste, risk, and long-term ownership matter most.</p><p>The best software factories will not be defined by how completely they eliminate human involvement.</p><p>They will be defined by how intelligently they <strong>place</strong> it.</p><p>Keep human judgment upstream on intent, system shape, and the quality bar. Review code where automated back-pressure becomes weak or the consequences become subjective. Push every deterministic signal as early and continuously into the loop as possible. Tighten and relax constraints deliberately as the system earns or loses trust.</p><p><strong>A human still has to own what code ultimately ships. Code good enough to ship still starts there.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!tZuD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!tZuD!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!tZuD!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!tZuD!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!tZuD!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!tZuD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:947741,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211963489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!tZuD!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!tZuD!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!tZuD!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!tZuD!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa05cff88-01ad-4919-9245-8d9a00c545e0_2752x1536.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Practical Loop Engineering]]></title><description><![CDATA[Goals, loops, and the discipline of not delegating your judgment]]></description><link>https://addyo.substack.com/p/practical-loop-engineering</link><guid isPermaLink="false">https://addyo.substack.com/p/practical-loop-engineering</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Fri, 14 Aug 2026 14:30:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hKG8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The way that I typically work is I have anywhere between five and ten agents working at the same time in parallel. There are going to be some tasks that I&#8217;m very happy to delegate fully to agents, as long as I have a very clear idea of the stopping conditions and the constraints around them. And then there are going to be some tasks where I am going to want to keep a closer eye and code-review what the agent is doing.</p><p>Now within that, you&#8217;ve probably heard about <strong>loop engineering</strong>. I talked about it a couple of months ago when I wrote a big blog post about it. </p><blockquote><p>A loop is an autonomous, self-correcting feedback cycle where an AI agent repeatedly acts, tests its results and adjusts its approach until a specific goal is met</p></blockquote><p><em>A quick message from our sponsor:</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pXSW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pXSW!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!pXSW!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!pXSW!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!pXSW!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pXSW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg" width="1270" height="760" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:1270,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:92436,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211112800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!pXSW!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!pXSW!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!pXSW!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!pXSW!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760f67b2-a638-4d9a-972a-d8364be73651_1270x760.jpeg 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"><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"><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"><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"><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><figcaption class="image-caption"><strong><span>Make AI agents survive contact with production using </span><a href="https://fandf.co/4pVPWbQ"><span>Trigger.dev</span></a><span>. </span></strong><span>A demo chatbot is a few lines. The same agent in production has to survive users refreshing, you redeploying mid-conversation, servers crashing - and it can&#8217;t take irreversible actions without a human in the loop. This issue&#8217;s sponsor, </span><a href="https://fandf.co/4pVPWbQ"><span>Trigger.dev</span></a><span>, just shipped their chat agent to close exactly that gap. It runs a whole multi-turn conversation as one durable task - so a chat that&#8217;s mid-stream survives refreshes, redeploys, idle gaps, even crashes and picks up right where it left off.</span></figcaption></figure></div><p>There are now basically two core primitives you can think about. In Claude Code you have a <strong><a href="https://code.claude.com/docs/en/goal">goal</a> primitive</strong>, which can drive a single bounded task forward until you&#8217;ve got a particular goal, like a measurable finish line that&#8217;s been met. And then <strong><a href="https://code.claude.com/docs/en/scheduled-tasks">loop</a></strong> reruns on a timer or a fixed interval, so you can use it to kind of schedule changes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!00w3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!00w3!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp 424w, /__u/substackcdn.com/image/fetch/$s_!00w3!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp 848w, /__u/substackcdn.com/image/fetch/$s_!00w3!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!00w3!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!00w3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp" width="1456" height="855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/84591717-7aa7-4119-817a-54065151635d_1456x855.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:855,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39198,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!00w3!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp 424w, /__u/substackcdn.com/image/fetch/$s_!00w3!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp 848w, /__u/substackcdn.com/image/fetch/$s_!00w3!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!00w3!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84591717-7aa7-4119-817a-54065151635d_1456x855.webp 1456w" sizes="100vw"></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"><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"><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"><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"><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><h2><strong>Before the primitives were primitives</strong></h2><p>I remember back before we had primitives baked into Claude Code and Codex, loop engineering was heavily about setting up your own bash loop, a hand-rolled thing. That&#8217;s how I approached it. And you might remember earlier in the year, a number of us were playing around with the <a href="https://ghuntley.com/loop/">Ralph loop</a> by Geoff Huntley. We were experimenting, we were sharing our workflows, we were sharing what worked and what didn&#8217;t, but it was largely on some of our personal projects where, if we ran into a wall, it didn&#8217;t really have a big cost to us because it was on personal projects. </p><p>And as we&#8217;ve tried to see what patterns, what aspects of loop engineering are now a little bit more baked, I think we have a clearer idea of how you babysit it. I can now largely rely on the output of the primitives in Claude Code and Codex. We&#8217;ve come a little way. But at the same time, you need to be very diligent, because loop engineering where you kind of leave it sitting alone, and you haven&#8217;t really thought about whether the end goal or the constraints have been well defined, can leave you in a problematic state. This is why there&#8217;s nuance when deciding to use it for an evergreen codebase without users or as much historical complexity vs. say a brownfield bank codebase.</p><h2><strong>How the Claude Code team frames loops</strong></h2><p>The Claude Code team published their take on four kinds of loops and it lines up with how I use the primitives (<a href="https://x.com/ClaudeDevs/article/2074208949205881033">their write-up</a>). Before we get to it, here&#8217;s my quick summary:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!N8MN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!N8MN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png 424w, /__u/substackcdn.com/image/fetch/$s_!N8MN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png 848w, /__u/substackcdn.com/image/fetch/$s_!N8MN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png 1272w, /__u/substackcdn.com/image/fetch/$s_!N8MN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!N8MN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png" width="1456" height="908" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:908,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:626412,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211112800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!N8MN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png 424w, /__u/substackcdn.com/image/fetch/$s_!N8MN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png 848w, /__u/substackcdn.com/image/fetch/$s_!N8MN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png 1272w, /__u/substackcdn.com/image/fetch/$s_!N8MN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5545307-6cad-40cc-b08f-52a093cf50c8_3200x1996.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><blockquote><p><em>On the Claude Code team, we define loops as agents repeating cycles of work until a stop condition is met. We categorize a few different types of loops based on: how they are triggered, how they are stopped, what Claude Code primitive is used, what type of task is most appropriate for each. Not all tasks require complex loops; start with the simplest solution and use these patterns selectively.</em></p><p><em>Every prompt you send starts a manual loop with you directing each turn. Claude gathers context, takes action, checks its work, repeats if needed, and responds. We call this the agentic loop. For example, ask Claude to create a like button. It reads your code, makes the edit, runs the tests, and hands back something it believes works. You then manually check the work, and write the next prompt.</em></p></blockquote><p>Their write-up walks each rung. </p><p><strong>On goal-based loops:</strong></p><blockquote><p><em>Sometimes, a single turn is not enough, especially for more complex tasks. Agents do better when they can iterate. You can extend how long Claude keeps iterating by defining what done looks like with /goal. When you define the success criteria, Claude doesn&#8217;t have to make a determination on what is &#8220;good enough&#8221; and end the loop early. Each time Claude tries to stop, an evaluator model checks your condition and sends it back to work until the goal is met or a number of turns you define is reached. This is why deterministic criteria, such as number of tests passed or clearing a certain score threshold, are so effective. For example: /goal get the homepage Lighthouse score to 90 or above, stop after 5 tries.</em></p></blockquote><p><strong>On time-based loops:</strong></p><blockquote><p><em>Some agentic work is recurring: the task stays the same and only the inputs change. For example, summarizing Slack messages every morning. Other work depends on external systems, and a simple way to interface with one is to check it on an interval and react to what changed. For example, a PR which may receive code reviews or fail CI. For these, you can trigger when Claude runs with /loop, which re-runs a prompt on an interval. For example: /loop 5m check my PR, address review comments, and fix failing CI. /loop runs on your computer, so if you turn it off, it stops. You can move the loop to the cloud by creating a routine with <a href="https://code.claude.com/docs/en/routines">/schedule</a>.</em></p></blockquote><p><strong>And on proactive loops, the top rung:</strong></p><blockquote><p><em>Triggered by: an event or schedule, with no human in real time. Stop criteria: each task exits when its goal is met. The routine itself runs until you turn it off. Best used for: recurring streams of well-defined work: bug reports, issue triage, migrations, dependency upgrades. Managed usage by: routing routines to smaller, faster models and using the most capable model for judgment calls.</em></p></blockquote><p>Their verification advice is worth lifting whole, because it moves the manual checking into something Claude applies itself:</p><pre><code><code>---
name: verify-frontend-change
description: Verify any UI change end-to-end before declaring it done.
---
# Verifying frontend changes
Never report a UI change as complete based on a successful edit alone.
Verify it the way a human reviewer would:
1. Start the dev server and open the edited page in the browser.
2. Interact with the change directly. For a new control (button, input,
   toggle): click it, confirm the expected state change, and screenshot
   before/after.
3. Check the browser console: zero new errors or warnings.
4. Use the Chrome Devtools MCP, run a performance trace and audit
   Core Web Vitals.
If any step fails, fix the issue and rerun from step 1 - do not hand
back partially verified work.
</code></code></pre><h2><strong>Goal</strong></h2><p>The way that I use goal is I use it for building any specific piece of work until it&#8217;s provably done. Like for example, you can use a goal to say: make sure that this experience loads in five seconds, keep going until it&#8217;s done. And it will continue to use an independent evaluation check to keep checking if the completion criteria has been met. What&#8217;s better is to be even more specific about what tooling is being used.</p><p>As for real goals that I&#8217;ve run to a number, there&#8217;s a few things that I&#8217;ve done. I&#8217;ve used goals for running through GitHub issues: review and close the last 10 issues, or review and move the last 10 issues forward, something like that. And that&#8217;s semi-open-ended, right? Or: let&#8217;s make this page load 50% faster. Sometimes that works well, sometimes it doesn&#8217;t, but it&#8217;s really about the experimentation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!r_sL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!r_sL!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png 424w, /__u/substackcdn.com/image/fetch/$s_!r_sL!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png 848w, /__u/substackcdn.com/image/fetch/$s_!r_sL!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!r_sL!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!r_sL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png" width="1456" height="855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:855,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:406540,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!r_sL!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png 424w, /__u/substackcdn.com/image/fetch/$s_!r_sL!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png 848w, /__u/substackcdn.com/image/fetch/$s_!r_sL!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!r_sL!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85bdc2cf-ca2a-4bd8-bc48-f283b3d0a6c5_3200x1880.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2><strong>Loop</strong></h2><p>Loop is a little bit more of a scheduler, so it keeps an eye on something or repeatedly executes a pattern on some cadence. So think of it a little bit like a cron. It&#8217;s best for doing things like polling logs or monitoring external states. You could use it for potentially checking in. If there are repetitive tasks you find yourself doing on some cadence, loop is pretty good for that.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!v9CV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!v9CV!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png 424w, /__u/substackcdn.com/image/fetch/$s_!v9CV!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png 848w, /__u/substackcdn.com/image/fetch/$s_!v9CV!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png 1272w, /__u/substackcdn.com/image/fetch/$s_!v9CV!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!v9CV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png" width="1456" height="869" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:869,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:384466,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!v9CV!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png 424w, /__u/substackcdn.com/image/fetch/$s_!v9CV!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png 848w, /__u/substackcdn.com/image/fetch/$s_!v9CV!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png 1272w, /__u/substackcdn.com/image/fetch/$s_!v9CV!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7e56709-7f67-4f14-84a4-5d34561e68f2_3200x1910.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2><strong>What I delegate, and what I watch</strong></h2><p>For me, I use probably between five and ten agents every day. Very typically I&#8217;ll max out at about five concurrently. And some of those tasks might be ones that are a little bit safer. So maybe it&#8217;s, hey, I implemented this feature, go write the documentation for it. Or go double check that we have sufficient test coverage. Or something in that vein. If I&#8217;m working on a more complex problem, or something where I know that even if I&#8217;ve given it a good spec, or what I think was a good spec, and I&#8217;ve tried to give it some stopping conditions, there is still a reasonable chance it may not get everything right, I would try to watch it more closely. If the task involves anything just a little bit sensitive, whether it is I&#8217;ve given this access to a system, or whether the feature happens to touch authentication, or something related to security or finance, I&#8217;ll definitely be watching that closely.</p><p>Generally speaking, I do think we&#8217;re going to get to a place where folks are increasingly comfortable with delegation, as long as they&#8217;re able to have these clear ways of verifying that their goal or their stopping condition has been met. But you do still need to take a look at the code, at the thing that&#8217;s being generated, to make sure that it&#8217;s meeting your mark.</p><p>The other habit that matters here is not letting the agent that did the work decide the work is good. One sub-agent drafts the change. A separate one verifies it.</p><p>Sometimes an agent can be confident about something, and a verifying agent can catch things that they weren&#8217;t necessarily expecting. Like if it thinks that the baseline performance of an experience it&#8217;s generated is actually fine, and it&#8217;s only evaluating performance based on desktop, but you&#8217;re actually caring about the experience on mobile. That might mean the agent is being very confident about one dimension of the problem, but not the other.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!fHg7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!fHg7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp 424w, /__u/substackcdn.com/image/fetch/$s_!fHg7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp 848w, /__u/substackcdn.com/image/fetch/$s_!fHg7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!fHg7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!fHg7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp" width="1456" height="851" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:851,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49088,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!fHg7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp 424w, /__u/substackcdn.com/image/fetch/$s_!fHg7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp 848w, /__u/substackcdn.com/image/fetch/$s_!fHg7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!fHg7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a538d8b-09db-4ee0-a5db-2c3100f15eb6_1456x851.webp 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>And I learned this one the hard way. I was curious to figure out: is there something that we&#8217;re missing that we haven&#8217;t gotten direct feedback on from our users, either in an issue tracker or in a comment somewhere? And so I asked it to go and take a look at some of our competitors, and put together a list, and some PRs, not pushed, but some PRs locally, of what solving some of those gaps might look like. And I almost pushed some of those changes. But I didn&#8217;t actually look at them closely enough. I read through its research, but I didn&#8217;t look at the implementations closely enough. So I delegated the task, but I was close to delegating the judgment as well. Now, when I actually looked through the changes, what I realized is that it would introduce a lot of additional complexity for our users, for, I think personally, not all that much gain. And so I feel like you need to sometimes check yourself, that you are not delegating the taste and the judgment to your agent. You&#8217;re delegating the task, and then you are actually checking back that it&#8217;s meeting your bar.</p><p>The evaluator sitting behind goal is not that checker, by the way. It doesn&#8217;t look at the content to see if it&#8217;s good or bad in any way, shape, or form. All it does is examine the conversation transcript to see if the hard rules you specified have been met.</p><pre><code><code>/goal Refactor the data-fetching layer in Dashboard.tsx until Lighthouse performance score is &gt;= 92 and LCP is under 1.8s as shown by the Lighthouse CLI output. Do not change the public API of any hooks. Each turn must improve at least one reported metric; abort if two consecutive turns show no improvement. Stop after 10 turns.
</code></code></pre><h2><strong>The workflow I run every day</strong></h2><p>One of the workflows that I do every day: I have a popular open source repository called <a href="https://github.com/addyosmani/agent-skills">Agent Skills</a>. We&#8217;ve got over 80,000 stars, and up until recently we were getting anywhere up to like 80 or 90 pull requests that we had to review a day. And so every day I would go and I would spend some time checking on this. Now with loop, what you can do is say: well, every 24 hours or every 12 hours, check the GitHub repository for any new open issues and provide a summary of their urgency, or provide a first pass review, or anything like that.</p><pre><code><code>/loop every 1h "Check the GitHub repository for any new open issues. Provide a bulleted summary of their urgency."</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IsI7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IsI7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png 424w, /__u/substackcdn.com/image/fetch/$s_!IsI7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png 848w, /__u/substackcdn.com/image/fetch/$s_!IsI7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IsI7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IsI7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:394631,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!IsI7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png 424w, /__u/substackcdn.com/image/fetch/$s_!IsI7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png 848w, /__u/substackcdn.com/image/fetch/$s_!IsI7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IsI7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feda9894c-b06f-4cf5-94cf-609391812e6a_3200x1760.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2><strong>Combining loops and goals</strong></h2><p>Now you can also sort of combine loops and goals. So you use loop to schedule a check, and then goal to solve the problem. So you can say something like: loop for every 24 hours, check GitHub for issues labeled bug. If one exists, use goal to implement a fix until all local tests pass and push the branch.</p><pre><code><code>/loop every 24h "Check GitHub for issues labeled 'bug'. If one exists, use /goal to implement a fix until all local tests pass and push the branch."</code></code></pre><p>But also keep in mind that goal has got some limitations around just how much you can sort of cram in there.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!qcHc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!qcHc!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png 424w, /__u/substackcdn.com/image/fetch/$s_!qcHc!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png 848w, /__u/substackcdn.com/image/fetch/$s_!qcHc!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qcHc!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!qcHc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png" width="1456" height="855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:855,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:432054,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!qcHc!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png 424w, /__u/substackcdn.com/image/fetch/$s_!qcHc!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png 848w, /__u/substackcdn.com/image/fetch/$s_!qcHc!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qcHc!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4597394f-0385-47ac-b4c4-84ce52c7a030_3200x1880.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Their write-up also has a composed example that shows where this is all heading:</p><blockquote><p><em>The primitives above, along with other Claude Code features like <a href="https://code.claude.com/docs/en/auto-mode-config">auto mode</a> and dynamic workflows (research preview) can be composed into a loop for long-running work. For example, to handle incoming feedback, you can use: /schedule (research preview) to run a routine that checks for new reports, /goal to define what done looks like, and skills to document how to verify it. <a href="https://code.claude.com/docs/en/workflows">Dynamic workflows</a> to orchestrate agents that triage each report, fix it, and review the fix. Auto mode so the routine runs without stopping to ask for permission. Putting it together, a prompt could look like this: /schedule every hour: check the project-feedback channel for bug reports. /goal: don&#8217;t stop until every report found this run is triaged, actioned, and responded to. When fixing a bug, use a workflow to explore three solutions in parallel worktrees and have a judge adversarially review them.</em></p></blockquote><h2><strong>What the triage system actually does</strong></h2><p>Inside the PR triage, when I have loops and goals working together for me, what I end up having is a system that allows me to really continue accepting PRs and issues, being able to stay on top of what is coming on my plate every day, and especially being able to cross-reference. That&#8217;s been a really big deal for me. If I want to work on a particular goal of, hey, we&#8217;re going to be redoing this part of the system, and I need to make sure that any issues that happen to touch it are closed as a result of this rework, or we&#8217;re not stepping on anyone else&#8217;s toes, I can make sure that that&#8217;s well defined.</p><p>Scheduled tasks are really useful for regularly just reviewing new PRs and closing things that clearly don&#8217;t fit. One good stopping condition, for example: we have a set of contribution guidelines, and our contribution guidelines include things like, hey, we currently don&#8217;t accept translations. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!C9yr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!C9yr!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp 424w, /__u/substackcdn.com/image/fetch/$s_!C9yr!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp 848w, /__u/substackcdn.com/image/fetch/$s_!C9yr!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!C9yr!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!C9yr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp" width="1456" height="846" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:846,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60110,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!C9yr!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp 424w, /__u/substackcdn.com/image/fetch/$s_!C9yr!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp 848w, /__u/substackcdn.com/image/fetch/$s_!C9yr!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!C9yr!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0133fdd6-a421-4c8d-a608-f38cb22a6542_1456x846.webp 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>And it&#8217;s not that we don&#8217;t care, it&#8217;s that they&#8217;re difficult for us to maintain, because we don&#8217;t speak all the languages often coming in. And so if we tell it, close any issues or close any PRs which happen to touch that aspect of our contribution guidelines, that&#8217;s something that can do really well when it&#8217;s on that schedule. And so it reduces the overall batch of things that we need to review.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6B9N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6B9N!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png 424w, /__u/substackcdn.com/image/fetch/$s_!6B9N!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png 848w, /__u/substackcdn.com/image/fetch/$s_!6B9N!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6B9N!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6B9N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png" width="1456" height="855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:855,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:435507,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!6B9N!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png 424w, /__u/substackcdn.com/image/fetch/$s_!6B9N!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png 848w, /__u/substackcdn.com/image/fetch/$s_!6B9N!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6B9N!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dd891d6-13ec-4818-8d23-208a74915c2c_3200x1880.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2><strong>What loops don&#8217;t buy you</strong></h2><p>I&#8217;m often asked what loop engineering is not a great fit for. Generally speaking if you don&#8217;t have a clear idea of what the end-state/done/good means for your completion, it may not be the right pattern for your work. For example, a vague goal would be &#8220;keep going until this UI design is good&#8221;. What does that mean? Good to who? How is it being evaluated? Tasks that require human taste, subjective design, or open-ended creative exploration aren&#8217;t a good fit. When you have a pretty clear idea of the goal, I think loops are a good option to consider. </p><p><em>A final message from our sponsor:</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jDpE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jDpE!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!jDpE!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!jDpE!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!jDpE!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jDpE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg" width="1270" height="760" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:1270,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81173,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/211112800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!jDpE!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!jDpE!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!jDpE!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!jDpE!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba6f2b6-b8d1-4662-b4ca-83e841310bfb_1270x760.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><figcaption class="image-caption">Still hand-rolling durable agents? <a href="https://fandf.co/4pVPWbQ">Trigger.dev</a>&#8217;s new chat agent (above) makes a multi-turn AI conversation a single durable task - survives redeploys and crashes, pauses for human approval, resumes exactly where it left off. Open source, TypeScript, drops into the Vercel AI SDK. <a href="https://fandf.co/4pVPWbQ">Check them out</a>. </figcaption></figure></div><h2><strong>The fine print</strong></h2><p>One classic sign that you&#8217;ve got a loop spinning in place is the same command being tried over and over without any change in the result. Give the same command a third time with no change from the second and it&#8217;s probably time to stop.</p><p>One bit of fine print worth knowing. Recurring loops expire seven days after creation. I&#8217;d been telling people this was three days. It&#8217;s seven. And loops are session-scoped, so they stop when you start a new conversation - though resuming that session with --resume or --continue brings back any recurring task still inside its seven-day window. If you need something that outlives your session, /schedule runs it in the cloud.</p><p>If there&#8217;s a check you already run every morning by hand, that&#8217;s your first loop. Mine was the pull request pile.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!3QLR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!3QLR!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png 424w, /__u/substackcdn.com/image/fetch/$s_!3QLR!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png 848w, /__u/substackcdn.com/image/fetch/$s_!3QLR!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3QLR!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!3QLR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png" width="1456" height="883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:446017,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!3QLR!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png 424w, /__u/substackcdn.com/image/fetch/$s_!3QLR!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png 848w, /__u/substackcdn.com/image/fetch/$s_!3QLR!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png 1272w, /__u/substackcdn.com/image/fetch/$s_!3QLR!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91307c12-4fc6-48ed-99ef-2672210998d2_3200x1940.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!hKG8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!hKG8!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png 424w, /__u/substackcdn.com/image/fetch/$s_!hKG8!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png 848w, /__u/substackcdn.com/image/fetch/$s_!hKG8!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hKG8!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!hKG8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:538053,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210699556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!hKG8!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png 424w, /__u/substackcdn.com/image/fetch/$s_!hKG8!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png 848w, /__u/substackcdn.com/image/fetch/$s_!hKG8!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hKG8!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a351633-8c64-479d-b066-811f8d0ec3fb_1376x768.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Agentic Code Quality]]></title><description><![CDATA[Quality now depends on the constraints you set around your agents.]]></description><link>https://addyo.substack.com/p/agentic-code-quality</link><guid isPermaLink="false">https://addyo.substack.com/p/agentic-code-quality</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Sat, 08 Aug 2026 14:31:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_7mu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>For much of human history, we&#8217;ve evaluated code quality via code review: someone reads what you wrote and makes sure it&#8217;s clean, thoughtful, fast, understandable, and tests well. For agents, that approach doesn&#8217;t scale well; there&#8217;s just too much code for anyone to read. As a result, more and more of our quality checks have to happen in the harness, environment, and operating system around the agent. I still read and review code, but am very intentional about where I am comfortable with constraints as the check.</span></p><p><strong><span>Software quality now depends on the constraints you set around your agents.</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yDtq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yDtq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_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;:259005,&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://addyo.substack.com/i/210128469?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!yDtq!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_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"><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"><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"><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"><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><figcaption class="image-caption"><strong><span>Speaking of quality, agents are writing your code. </span><a href="https://fandf.co/4fTA599"><span>Sonar</span></a><span> gives you the quality gates to make it shippable.</span></strong><span> I had a coding agent build a slick app, then asked an agent to review it - twice. The reviews disagreed, and a re-run gave a third answer. You can&#8217;t gate a merge on a coin flip. Sonar runs the same complete check on every commit: deep cross-file analysis, a map of where the risk lives, and a quality gate that holds every human and agent to one bar.</span><a href="https://fandf.co/4fTA599"><span> </span></a><strong><a href="https://fandf.co/4fTA599"><span>Try Sonar.</span></a><span> </span></strong><em><span>Sponsored by Sonar.</span></em></figcaption></figure></div><p><span>Constraints define what the system is allowed to do by throwing tests and deterministic constraints at an agent&#8217;s proposals. It&#8217;s by setting and maintaining these constraints that we build loops that reliably deliver high-quality production software, even when agents are creating hundreds of thousands or millions of changes every single day.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LIYS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LIYS!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 424w, /__u/substackcdn.com/image/fetch/$s_!LIYS!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 848w, /__u/substackcdn.com/image/fetch/$s_!LIYS!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LIYS!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LIYS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.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;:352841,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/209070908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!LIYS!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 424w, /__u/substackcdn.com/image/fetch/$s_!LIYS!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 848w, /__u/substackcdn.com/image/fetch/$s_!LIYS!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LIYS!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 1456w" sizes="100vw"></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"><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"><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"><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"><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><span>We call these constraints quality gates, and they take many forms. They include conventional unit tests, property tests, and acceptance tests. They include mutation testing, where we generate variations of code, run it against the same tests, and make sure that people aren&#8217;t sneaking bugs in that we&#8217;re missing. They&#8217;re metrics around code quality, such as cyclomatic complexity and line length, that help keep things readable. Constraints also play an important role in what proposals the system will accept and apply as code changes. By the time a change proposal moves from the interpreter running the agent to the agent controller and out to production, we&#8217;ve done enough checks on it to be confident that it&#8217;s safe to ship and the impact of its change is well within the scope of the agent.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!o1Gn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!o1Gn!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png 424w, /__u/substackcdn.com/image/fetch/$s_!o1Gn!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png 848w, /__u/substackcdn.com/image/fetch/$s_!o1Gn!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png 1272w, /__u/substackcdn.com/image/fetch/$s_!o1Gn!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!o1Gn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png" width="468" height="370.2089552238806" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:1072,&quot;resizeWidth&quot;:468,&quot;bytes&quot;:172590,&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;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/210128469?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!o1Gn!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png 424w, /__u/substackcdn.com/image/fetch/$s_!o1Gn!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png 848w, /__u/substackcdn.com/image/fetch/$s_!o1Gn!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png 1272w, /__u/substackcdn.com/image/fetch/$s_!o1Gn!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73022fbb-2a6f-417c-b890-ffaab1e0d0d7_1072x848.png 1456w" sizes="100vw"></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"><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"><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"><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"><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><figcaption class="image-caption">Guillermo's list is a good test for whether you can afford to skip reading. Notice that every "yes" is really a statement about how low the stakes are - no users, throwaway code, prototype. Once the stakes go up, something has to read the code. If it isn't you on every diff then it has to be the constraints.</figcaption></figure></div><p><strong><span>An agent can propose anything. Your constraints decide whether a proposal is safe enough, correct, scoped, and useful, for you and your team to ship.</span></strong></p><p><span>This model offers a lot, but also leaves out many pieces, and those omissions are worth thinking about today. One issue is </span><strong><span>autonomy</span></strong><span>; agents might apply their intentions well, but may fail when there&#8217;s missing information or when what they try to do is ambiguous. That applies both to the task itself and to how it&#8217;s parameterized by the harness, environment, and other components. Many of the reasons that humans fail to ship great code are shared with what agents might do: brittle environments that don&#8217;t hold up under script-driven stress, nondeterministic builds, missing permissions, and weak tests. This motivates a better environment that gives agents trustworthy feedback, allows for low-damage failure modes, and makes it easier to progressively build up success.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rvbK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rvbK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 424w, /__u/substackcdn.com/image/fetch/$s_!rvbK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 848w, /__u/substackcdn.com/image/fetch/$s_!rvbK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rvbK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rvbK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.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;:304537,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/209070908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!rvbK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 424w, /__u/substackcdn.com/image/fetch/$s_!rvbK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 848w, /__u/substackcdn.com/image/fetch/$s_!rvbK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rvbK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong><span>The environment we&#8217;re after is one where an agent can do real work, get feedback it can trust, and fail without doing much damage.</span></strong></p><p><span>The other important issue is trust. We can&#8217;t credulously hand off intent to something even as smart and robust as a modern agent without checking for correctness. We start with trust, but it has to be hard-earned.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IcZM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IcZM!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 424w, /__u/substackcdn.com/image/fetch/$s_!IcZM!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 848w, /__u/substackcdn.com/image/fetch/$s_!IcZM!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IcZM!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IcZM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.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;:337546,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/209070908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!IcZM!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 424w, /__u/substackcdn.com/image/fetch/$s_!IcZM!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 848w, /__u/substackcdn.com/image/fetch/$s_!IcZM!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IcZM!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong><span>Some constraints shape work before it begins. Others give feedback while the agent is working. Others decide whether its output can cross the production boundary at all.</span></strong></p><p><span>There are a bunch of ways to model how we put a verification structure around a system.</span></p><p><span>In my experience it helps to have a broader, but intentionally chosen, set of checks for your constraints instead of solely relying on unit tests. The idea is that each check has a distinct responsibility and that can range from type safety and performance to late-stage security scanning. Folks can define their own constraints too, including architecture rules that linting tools like ESLint can enforce. Many of these tools have built-in hooks that can be used to pull in agents, or humans, when things break.</span></p><p><strong><span>For now, much of the difference between useful agent output and slop still comes down to the skill of the team operating the loop.</span></strong></p><p><span>AI gives us high volume code generation and velocity, but this can also mean it gets harder for humans to review every single change. You have to instead be intentional with where their attention is going. If you put a human check into a system that otherwise moves at machine speed, don&#8217;t be surprised if that impacts productivity. Human attention is scarce and valuable so we should proactively direct it to those most nuanced problems that require our judgment. Downstream humans should only be pulled in when the automated guardrails for constraints break.</span></p><p><strong><span>Human &#8220;code review&#8221; in the future is going to look very different</span></strong></p><p><span>Correctness is one important dimension, but you may care about others as well, like maintainability, performance, security, efficiency, and comprehensibility. Just as correctness decomposes into many signal types, so does the rest of quality. And while it matters how many constraints we have in place, it matters more whether they&#8217;re challenging enough to meet our bar for quality and production readiness.</span></p><p><strong><span>Software quality isn&#8217;t a single metric. Think of it as a collection of signals of varying importance to you and your team.</span></strong></p><p><span>Back-pressure can be implemented through many tools: compilers rejecting invalid code, tests failing, security policies blocking bad practices, CI declining to deploy. Ideally it exists throughout the loop, not as a single review at the very end of all the work.</span></p><p><strong><span>Constraints and back-pressure let agents catch bad work before its a problem</span></strong></p><p><span>What happens if we can&#8217;t apply the constraint because the volume of changes is higher than our tools can consume? We end up building a queue and relying on a verification system that moves at human speed. To scale, we want to push as much as we can into the verification loop throughout and not wait until the end. If we can scale within our automated checks, we can increase the speed and throughput of our entire delivery system. If we run out of room in the verification loop, we need to do one of several things. First, we can scale our verification system and create more capacity to constrain and push back on changes that come in. Second, we can reduce the rate at which agents generate new changes so that verification can catch up to the volume of work. Third, we can lower our quality bar so that verification doesn&#8217;t push back as hard as it otherwise might. From a scaling perspective, we need to be ready to do all of these things. At the same time, we should not stop short of realizing that we could actually get more done by un-constraining in some directions. Maybe we can increase the speed of agent-generated changes by providing swarms of agent developers or automated software factories to create changes without waiting for us to review each of them.</span></p><p><span>And in some places we might want to give them more freedom as long as we keep tighter constraints in others. By providing tighter constraints where we care the most, we can maximize our throughput without sacrificing quality. Throughout these decisions there are many options. Most obviously, we have to trade between different dimensions of quality. As we&#8217;ve emphasized, security is very important, but we&#8217;ve also had to trade between delivering security and delivering a product on time. There is a spectrum from innovation-focused at one end to quality-focused at the other. Somewhere along the way, we have to make choices about where we want to be on that spectrum.</span></p><p><span>We want to send clear feedback from the environment and the system back to our agents or teams, so that people can focus on the more subjective concerns of taste, intent, and architecture. If we can help humans stay inside the safe range of constraints, we can avoid the need for them to work hard trying to figure out where things went wrong.</span></p><p><span>Software quality includes more than just correctness. Software quality also means maintainability, good performance, security, efficiency, and being easy to understand. All the constraints that help us meet these standards and keep our production flowing create back-pressure in our delivery pipeline.</span></p><p><span>We need to make deliberate decisions about where to apply strong constraints and where to remove or relax them. Apply strong constraints where they&#8217;re serving both of these goals. Don&#8217;t support them if they&#8217;re not serving one or both. Be ready to raise or lower standards as the case may require. And remember these constraints at different points in the software system are what make software quality enforceable.</span></p><p><span>We should apply strong constraints where they&#8217;ll serve this dual purpose best and consider removing or relaxing constraints that aren&#8217;t serving either purpose well. We should also be ready to shift quality bars up or down as needed. In effect, these constraints at various points in our software system are what give quality its teeth. In many cases, we can create more back-pressure and more constraints by deploying new tools or strengthening tools that are already in place. All of these things can be used to push back on most change requests. We want to build them throughout the pipeline. We don&#8217;t want to wait until the end of the pipeline when our CI system will simply tell us that we&#8217;re not allowed to deploy without fixing problems. We want to use these signals as early as we possibly can, through every possible pathway. The ultimate constraint in this system is the one we place on ourselves to stand behind the decisions and actions we&#8217;ve taken to build the system and to operate it. But like all other constraints, we need to make thoughtful trade-offs about how much we want our own judgment to restrain, to back-pressure, and to act as a final check.</span></p><p><strong><span>Quality is in the constraints that we place around our agents. So as you&#8217;re thinking about quality for your own apps, take this problem statement and come up with your own constraint-driven plan.</span></strong></p><p><em><span>This article was rated </span><a href="https://www.pangram.com/history/202b457f-9fbc-43f2-9778-70cb96c3a5b4?ucc=tUilR5ia5FA"><span>100% human written</span></a><span> by Pangram 4. A reminder that if you&#8217;re looking for a good starting point for setting up quality gates, </span><a href="https://fandf.co/4fTA599"><span>Sonar</span></a><span> offers a pretty good solution.</span></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_7mu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_7mu!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 424w, /__u/substackcdn.com/image/fetch/$s_!_7mu!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 848w, /__u/substackcdn.com/image/fetch/$s_!_7mu!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_7mu!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_7mu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:535837,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/209070908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!_7mu!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 424w, /__u/substackcdn.com/image/fetch/$s_!_7mu!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 848w, /__u/substackcdn.com/image/fetch/$s_!_7mu!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_7mu!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Software Factories, Light and Dark]]></title><description><![CDATA[A software factory is harnessing loops at scale.]]></description><link>https://addyo.substack.com/p/software-factories-light-and-dark</link><guid isPermaLink="false">https://addyo.substack.com/p/software-factories-light-and-dark</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Wed, 22 Jul 2026 03:44:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!G0um!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>A software factory is harnessing loops at scale. You can run the loop with humans in it (light factory): trading judgment and concentration against speed and breakage. Or you can ignore the humans (dark factory) and let those agents scope, build and ship code, without anyone really reading the details. But if people stop reading, they&#8217;ll stop understanding your software. Your hardest job now is knowing which checks to build and how much autonomy to delegate.</strong></p><div><hr></div><p>This idea of the software factory is a term that dates back to <a href="https://en.wikipedia.org/wiki/R._W._Bemer">Bob Bemer&#8217;s</a> paper, &#8220;The economics of program production,&#8221; given in 1968. For half a century, many have dreamed of a world in which software is a repeatable and instrumentable production process (analogous to stamping out car parts in a factory) rather than the isolated craft of individuals. Historically, this dream has generally (although not universally) fallen flat, in part because of the difficulty of stamping out ideas.</p><p>But in the last two years, things have changed dramatically enough that now it makes sense to take a fresh look at the old dream. And since some subtleties can easily be glossed over, it&#8217;s worthwhile to be somewhat precise about exactly what is really new and different, and what may be recurring traps, dressed up as new opportunities.</p><p>Dex Horthy, co-founder of HumanLayer recently gave a great talk at AI Engineer World&#8217;s Fair called <strong><a href="https://youtu.be/htM02KMNZnk?t=27219">&#8220;Harness Engineering is not Enough: Why Software Factories Fail.&#8221;</a></strong> worth checking out on this topic.</p><h2><strong>The loop is the atom. The factory is the loop at scale.</strong></h2><p>Structure is everything, and it all starts with small units. The whole stack is really three concepts layered on top of each other: the loop, the harness, and the factory.</p><p><strong>A loop is one agent doing a single job on repeat: gather context, take an action, check the result, and go again until some condition is met. It is the smallest unit of agentic work, and everything above it is just loops stacked on loops.</strong></p><p>The point of <a href="https://addyosmani.com/blog/loop-engineering/">loop engineering</a> is that you stop prompting the agent turn by turn and instead design the small system that prompts it for you.</p><p><strong>A harness is the walls around a loop: the sandbox it runs in, the tools it can reach, the memory that survives between runs, and the gates that decide what &#8220;done&#8221; means. The loop is the behavior; the harness is the environment that behavior runs inside.</strong></p><p>Hand a raw model no harness and it will happily spin forever. The harness is everything around it that makes it useful and safe to run.</p><p><strong>A software factory is many harnessed loops running at once, fed by a queue of work and drained through a review gate into production, with humans owning the whole thing from above. It is not a bigger agent; it is an org chart made of loops.</strong></p><p>The final paradigm shift is moving from writing code to building and running <a href="https://addyosmani.com/blog/factory-model/">the factory</a> that writes it. The unit of work shifts up a level, to the loop, the harness, and the flow between them, rather than the individual code diff.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!8LZk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!8LZk!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg 424w, /__u/substackcdn.com/image/fetch/$s_!8LZk!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg 848w, /__u/substackcdn.com/image/fetch/$s_!8LZk!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!8LZk!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!8LZk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg" width="1456" height="477" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:477,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Loop wrapped into a harness, run many times as a factory&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Loop wrapped into a harness, run many times as a factory" title="Loop wrapped into a harness, run many times as a factory" srcset="/__u/substackcdn.com/image/fetch/$s_!8LZk!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg 424w, /__u/substackcdn.com/image/fetch/$s_!8LZk!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg 848w, /__u/substackcdn.com/image/fetch/$s_!8LZk!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!8LZk!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F074b17d2-84d6-4d91-82fb-95d158c663ed_1160x380.svg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><figcaption class="image-caption">Loop &#8594; harness &#8594; factory. A factory isn&#8217;t a smarter agent; it&#8217;s many harnessed loops feeding one review gate, with a human owning the outer loop.</figcaption></figure></div><h2><strong>The factory, drawn</strong></h2><p>The central slide Dex spent most time on was brilliant because it&#8217;s a clarifying wiring diagram that visualizes what otherwise is an obvious loop. Here&#8217;s my take on it:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XqMB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XqMB!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg 424w, /__u/substackcdn.com/image/fetch/$s_!XqMB!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg 848w, /__u/substackcdn.com/image/fetch/$s_!XqMB!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!XqMB!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XqMB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The agentic software factory as a closed loop&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The agentic software factory as a closed loop" title="The agentic software factory as a closed loop" srcset="/__u/substackcdn.com/image/fetch/$s_!XqMB!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg 424w, /__u/substackcdn.com/image/fetch/$s_!XqMB!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg 848w, /__u/substackcdn.com/image/fetch/$s_!XqMB!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!XqMB!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e6a14cc-e1f3-41b3-a22d-aaa25d609bf2_1120x560.svg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><figcaption class="image-caption">The factory is a closed loop: intent and production signals feed a queue, the harness builds, automated checks and review gate it, deploy ships it, monitoring turns prod back into signals.</figcaption></figure></div><p>Intent flows from the vision of engineering leadership, and directly from engineers, into a queue of things to be done. Signals driven by incidents and user requests drive the same queue. The harness is just the thing that picks an item from the queue and builds a change for it. Beyond the harness, we can see all the automated checks required to make changes safe enough to let into production. These automated checks run at once, effortlessly, without any conscious involvement from engineers, thanks to CI, tests, static analysis, and scanning of all kinds. The only decision point here is the review gate. After approval, changes are deployed and monitored in production, with monitoring data feeding back into the signals that kicked the loop into motion to begin with.</p><p>By and large, every box in this diagram is almost zero cost: generation, tests, scanning. They all run at scale for negligible cost. There is only one expensive box that proves stubbornly resistant to scaling, and that&#8217;s the review gate. That shiny amber box is &#8220;judgment&#8221;, and where the crux of the argument about whether we can make development faster and more frequent resides.</p><h2><strong>Why we call it &#8220;dark&#8221;</strong></h2><p><strong>A dark factory runs with the lights physically off, because the only things on the floor are machines and machines don&#8217;t need light to see. A dark software factory is the same move: code ships that no human has read, verified only by other machines.</strong></p><p>The image is borrowed from manufacturing. Its origins are physical rather than digital, rooted in facilities where the lights are turned off and the work is carried out by robots. <a href="https://en.wikipedia.org/wiki/Lights_out_(manufacturing)">FANUC in Japan has been running lights-out factories of this sort since 2001</a>; Xiaomi, in 2024, opened a heavily automated dark factory of its own. What these have in common is a product assembled and shipped without a single human having read any of it. The &#8220;dark&#8221; comes in when that act of reading is removed from the process.</p><p>I&#8217;m not borrowing the concept for its vibe or as an insult. For all its creepy buzz, &#8220;dark&#8221; here is a simple physical claim: the original factory floor, but without light. In software, the floor is the diff. Whoever wrote the diff, whoever reviewed it, whoever shipped it, those humans are gone, and what remains is a diff verified only by the machines that built it.</p><p>This is a surprisingly easy thing to do, at least at first. It&#8217;s easy because that missing review step gets in the way of everything. Its absence makes your perception of your team&#8217;s vertical throughput seem suddenly and radically higher. It feels as if you&#8217;ve broken the sound barrier. For all its apparent ease, it&#8217;s harder than it seems to survive those dark workflows, with all their buried costs.</p><h2><strong>Harness engineering is not enough</strong></h2><p>The harness of orchestration, sandboxed prototyping, and tool calling as models interact with the world and each other will become increasingly powerful and effective. However, there&#8217;s an inherent in-model failure in trying to keep up with codebase quality over the long game and through additive changes, and I think there&#8217;s good reason to believe that models alone will ultimately lose that battle against <a href="https://addyosmani.com/blog/comprehension-debt/">comprehension debt</a>.</p><p><strong>Comprehension debt is the widening gap between how much code exists and how much any human still understands. A dark factory doesn&#8217;t pay it down; it takes it on as fast as it can, with the tests green the whole way.</strong></p><p>This is an important distinction because models do well at some tasks. But for anything that isn&#8217;t an immediate change to a small part of a codebase, especially in a complex brownfield system, model-only automated coding faces an insurmountable obstacle. Weekend toys and side projects are alike in that a few months of development cycles is usually enough to get things in working order, or at least close enough. But an enterprise system that has been under development for a decade or more is a different beast; it has to be maintained, in a professional environment at a professional pace. Three to six months into a project, you&#8217;re already drowning in unread code. That kind of environment, and especially the constraints enforced by production code, would make even a powerful agent do poorly, all of it in contrast to the vibe-coding enjoyed by developers working on weekend toys.</p><p>Dex reports from experience that this is a major failure, so much so that it required painstaking manual debugging to pinpoint. This came from running a fully automated code factory for about four months, during which no human looked at the code that was written. Underlying the experience is a tradeoff between two conflicting metrics. One is maximizing token utilization, the number we currently treat as progress. The other, which it quietly minimizes, is the amount of the system any human participant still understands at any moment.</p><p>Where the dark factory truly shines is in its ability to burn through pristine code while the tests stay green. The ultimate reckoning, when it comes, will not be a dramatic &#8220;it all goes sideways&#8221; moment. It will be quiet and late.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xTdO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xTdO!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg 424w, /__u/substackcdn.com/image/fetch/$s_!xTdO!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg 848w, /__u/substackcdn.com/image/fetch/$s_!xTdO!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!xTdO!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xTdO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg" width="1456" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A dark factory pipeline versus a lit factory pipeline&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A dark factory pipeline versus a lit factory pipeline" title="A dark factory pipeline versus a lit factory pipeline" srcset="/__u/substackcdn.com/image/fetch/$s_!xTdO!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg 424w, /__u/substackcdn.com/image/fetch/$s_!xTdO!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg 848w, /__u/substackcdn.com/image/fetch/$s_!xTdO!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!xTdO!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3361b302-9b6d-498c-9272-348b923cfa68_1120x430.svg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><figcaption class="image-caption">Dark and lit are the same pipeline with the lights in different places. The lit version doesn&#8217;t just re-add review at the end - it moves human judgment upstream to design and architecture, too.</figcaption></figure></div><h2><strong>The bottleneck was never generation</strong></h2><p>The fundamental constraint in a software factory isn&#8217;t how much code we can churn out: it&#8217;s how quickly we can verify it.</p><p><strong>Back pressure is the rule that you can only hand a loop as much autonomy as you can cheaply and reliably verify, and not one inch more. Verification, not generation, is the real constraint on a factory.</strong></p><p>Because unbounded generation capacity is in perpetual tension with the finite, non-scaling resource of human attention, the core problem is the gap between cheap generation and bounded review. Look at the funnel: as long as the neck representing verification doesn&#8217;t widen, it&#8217;s going to back up. As Dex points out, volume alone isn&#8217;t the problem: what we&#8217;re really suffering from is a surplus of bad PRs. When you&#8217;ve got high volume without trustworthy gates, manufactured defects are unavoidable. This is just back pressure again: autonomy can&#8217;t expand beyond what can be cheaply and reliably verified.</p><p>The second-order problem is why improving the model shouldn&#8217;t automatically close the gap between what it can generate and what can be verified. Training on well-architected systems is an arguably more difficult proposition than passing simple tests: remember, the cost functions measuring architectural excellence aren&#8217;t measured in seconds or even minutes, but in months and years. Tidy gradients are functionally impossible to compute, so a system expecting crisp, instant evaluation of complex design decisions isn&#8217;t going to be trained on good examples.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SDtO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SDtO!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg 424w, /__u/substackcdn.com/image/fetch/$s_!SDtO!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg 848w, /__u/substackcdn.com/image/fetch/$s_!SDtO!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!SDtO!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SDtO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg" width="1456" height="520" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Unbounded generation meets a narrow verification gate&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Unbounded generation meets a narrow verification gate" title="Unbounded generation meets a narrow verification gate" srcset="/__u/substackcdn.com/image/fetch/$s_!SDtO!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg 424w, /__u/substackcdn.com/image/fetch/$s_!SDtO!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg 848w, /__u/substackcdn.com/image/fetch/$s_!SDtO!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg 1272w, /__u/substackcdn.com/image/fetch/$s_!SDtO!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dc8e38-697c-4735-95b2-e92182ab34b9_1120x400.svg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><figcaption class="image-caption">Generation is a wide mouth; verification is the narrow neck. Speeding up the mouth just deepens the pile at the neck.</figcaption></figure></div><h2><strong>Turning the lights back on</strong></h2><p><strong>A lit factory is the same pipeline with the lights left on where judgment lives. The agents still do most of the building, but a human reads what comes out before it ships, and the lights stay on wherever a wrong call is expensive.</strong></p><p>The lit version doesn&#8217;t tack review onto the end but moves the point of human judgment upstream, to the product, the design, and the architecture before an agent starts a loop.</p><p>One great thing about that upfront hour is that it leads to fewer implementation hours. It turns a long, frustrating code review into a quick read of a two-hundred-line plan. You get to review a decision before it&#8217;s built, so later you aren&#8217;t chasing through two thousand lines of generated code to find out what the decision even was. Some decisions are expensive and long-lived enough that you&#8217;d want a person in on them early, before the cost compounds. Of course, there are still times you look at diffs, even when you&#8217;ve spent time up front.</p><p>You might be thinking that all sounds unglamorous. You&#8217;re right. The safety net is made up of perfectly ordinary architectural practices we&#8217;ve always known about and mostly ignored: good types and method signatures so that mistakes are caught by the compiler instead of in production; test seams where we can pin behavior and make change observable; laying out the code so the next reader, human or model, knows where to find the thing they care about; keeping call stacks short and legible; keeping component boundaries well defined so a change doesn&#8217;t have a huge blast radius; and dependency injection so we can swap out one piece for another. None of it is new. We&#8217;ve always said we care about good architecture. But now that we&#8217;re using automated coding agents, that architecture is finally doing a second job as a cheap and hard-to-fake safety net against the mistakes the agent will make.</p><p>That safety net has to live outside the model, because the model won&#8217;t supply it. The coding agents that feel most capable, Claude Code and Codex among them, are reinforcement-trained against their own harness and tools: fluent with all the tools and idioms of the trade, but not with things like long-term maintainability. The deliberate architecture we&#8217;ve always talked about is the tool that catches that debt, and the investment we make in it is us buying back our autonomy. Put that together with safe infrastructure, and there are some tight, low-risk loops you can run unattended. Horthy described one in a recent post: a nightly GitHub Actions cron that fixes exactly one anti-pattern, a lint violation or a needlessly optional prop, commits, and opens one small pull request, all on its own, so the team wakes up to a slightly better codebase and a diff short enough to read. But for loops with high enough stakes, you don&#8217;t want to risk waking up to a broken auth system, billing engine, or public API contract. Keep the lights on there, and trust that a person with judgment and a real working knowledge of the system will catch the mistake.</p><h2><strong>What earns a loop the dark</strong></h2><p>This rule applies whether you call it back pressure, verification, or the light switch.</p><p>A loop can earn itself fully automated status only if the check is cheap, runs at high frequency, and relies on something that can&#8217;t be easily faked out. Green-or-red oracles, type gates, property tests, and a review agent coupled with a real rubric all fit. You also need the oracle to answer immediately and not drift over time. When done can be proven not just by you but by a machine, you&#8217;ve reached automation.</p><p>Short loops are easier to verify than long ones. <a href="https://github.com/humanlayer/12-factor-agents/blob/main/content/factor-10-small-focused-agents.md">Dex&#8217;s rule of thumb</a>: an agent holds up for three to ten steps, then starts losing the thread past twenty. The reason is context accumulation, the more the agent drags along, the more likely it is to wander off. When a loop is short, verifying it is cheap. Sprawling loops hide mistakes in the corners, which is another way of saying they never earned lights-out status.</p><p>Keeping the lights on is the opposite case. A loop needs to be reviewed if a wrong answer is expensive and only a person can catch it. Subtle production bugs that can&#8217;t be caught by tests, large blast radii, and a decision that&#8217;s going to shape the work of a year or more all qualify. In those cases, <a href="https://addyosmani.com/blog/human-is-the-expensive-part/">your attention is the actual product</a>, the costly, essential one.</p><p>The danger is forgetting to flip each switch and just setting all of them to the same mode. All dark, and you&#8217;re stuck tearing everything down four months later. All lit, and no one can get reviews done in time and you&#8217;re stuck in a gigantic bottleneck. The hard, skilled job is deciding where to put each switch.</p><h2><strong>Loops, graphs or state machines?</strong></h2><p>When you hand an agent a task, you&#8217;re probably going to build a graph around it, whether you call that graph a finite state machine or a set of conditionally-linked service calls. It&#8217;s a framing where the software isn&#8217;t just following some abstract rules but a structured workflow: every node is an explicit step, and every edge between nodes is an explicit condition. </p><p>That sounds like a lot of structure, but most of it is already there in any software, since any code can be expressed as a control-flow graph. So the only real novelty is that an agent insisting on autonomy is really just walking around a particular graph, and its freedom is constrained to the inside of a node. And here&#8217;s the part people forget, which <a href="https://github.com/humanlayer/12-factor-agents">Dex wrote down</a> a year ago: software was always going to have that structure. There&#8217;s a reason we used to draw programs as flow charts. The genuinely new move was trying to throw the diagram away, leaning on a loop where the model picks the path tool call by tool call, until it declares itself done. That felt like liberation, right up until it met a ten-year-old codebase, and the discipline everyone is now rediscovering, owning your control flow, is really just walking the graph back around the loop. So the question of whether we should shift from loops back to graphs is almost an admission that we needed the flowchart all along.</p><p>Here&#8217;s what it looks like in practice. Take a bug to fix. As a pure loop, you sit down and think: figure out what&#8217;s wrong, change some code, run the tests, see what happens, and if that round doesn&#8217;t kill the run, loop back and start again. The whole journey is decided as you go, which problem you chase, the exact code you change, which tests you run and in what order, whether you run tests at all, and whether you try again or declare victory. As a graph, the first thing you do is map out what should happen. Reproduce the bug or go ask for more information, find the cause, try a fix, run the tests, and let a failing run route back to the fix while a passing one goes on to review, where only an approval reaches done. The agent is still clever inside each box; it just can&#8217;t wander off the paths you sanctioned. Santi laid this out with a diagram that makes the difference obvious.</p><p>The real appeal of that graph, of course, is that it&#8217;s back pressure drawn as a diagram. You give up some of the agent&#8217;s freedom and get mandatory checks and legible failure points in return, so when a run dies you can point at the node that killed it. It&#8217;s the same instinct behind Dex&#8217;s blunt line that most so-called agents aren&#8217;t very agentic at all, &#8220;mostly deterministic code, with LLM steps sprinkled in at just the right points.&#8221; And this isn&#8217;t just an artifact of how people happen to be building things right now: you can see the pattern in LangGraph and LlamaIndex Workflows, in Jerry Liu&#8217;s hybrid workflow-graph-over-agents with an outer loop that grows parts of the graph as it runs, and in David Khourshid&#8217;s reminder that this is really just state machines and the actor model turning up in new clothes.</p><p>One clarification, because the term is badly overloaded: when I keep calling this a graph, I don&#8217;t mean a knowledge graph. I mean a predefined directed graph of how the work should flow, conditional edges and all, giving the loop a shape you can actually trust.</p><h2><strong>Where the human actually goes</strong></h2><p>Notice that the person never left the factory. They moved.</p><p>I think engineers need to increasingly own the <a href="https://addyosmani.com/blog/own-the-outer-loop/">outer loop</a>. The agents can investigate a bug, write up the diagnosis, implement a fix, run the tests, and write up a report. That&#8217;s the execution of the inner loop, and they can do it as efficiently as anyone. But that was never the job. The bits you own are what I&#8217;d call the outer loop: decide whether it&#8217;s the right way to address the problem, verify that the diagnosis and implementation are sound, approve the change, and carry the consequences of being wrong. The boundary between the two loops is evidence, the diffs, the tests, the logs, and a brief explanation that connects them. Types, seams, and rubrics make it possible to oversee all this without doing a lot of work for every change.</p><p>I think it&#8217;s useful to put it this way: you&#8217;re not down on the line writing changes any more; you&#8217;re up at the end of the production line designing it and guarding the gate. There&#8217;s a lot you can do to make the model better and the harness more capable, but I&#8217;ve observed that identifying problems that are expensive in the long term is not typically something you can automate away. The core thing that&#8217;s still the job is to exercise human judgment better than any flow of paper and computing power.</p><p>Robots are fine operating in the dark, but humans need to see what they&#8217;re doing. If everything on the factory floor is dark, and you can&#8217;t see anything, and you can&#8217;t even find the light switch, that&#8217;s where the danger is.</p><p><strong>Pangram <a href="https://www.pangram.com/history/d151077c-b4ca-4277-a2fe-75e6cb282f06">scored</a> this article as 100% human written.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!G0um!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!G0um!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!G0um!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!G0um!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!G0um!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!G0um!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg" width="1456" height="762" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:762,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:93029,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/207949243?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!G0um!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!G0um!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!G0um!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!G0um!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2867fd41-c596-4b85-bc56-4eb61c03f0e6_2400x1256.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Own the Outer Loop]]></title><description><![CDATA[Why loop engineering needs a human at the boundary]]></description><link>https://addyo.substack.com/p/own-the-outer-loop</link><guid isPermaLink="false">https://addyo.substack.com/p/own-the-outer-loop</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Thu, 09 Jul 2026 14:31:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Sd4F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the past year, the conversation around <strong><span>agentic engineering</span></strong> has moved to <strong><span>harnesses</span></strong> and <strong><a href="https://x.com/addyosmani/article/2064127981161959567?lang=en"><span>loops</span></a></strong>, <strong><span>fleets</span></strong> and <strong><span>software factories</span></strong>. My 2c is engineers need to <strong><span>own the outer loop</span></strong> - the <strong><span>accountability</span></strong> for these systems. This only gets more true as powerful models like Fable and GPT-5.6 become available.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xpZm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xpZm!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!xpZm!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!xpZm!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!xpZm!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xpZm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!xpZm!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!xpZm!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!xpZm!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!xpZm!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e356d81-8300-4b65-ad66-e73ae74b3fb7_1956x1102.jpeg 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"><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"><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"><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"><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>Agents have leverage, and leverage creates obligations. <strong><span>Someone must be able to explain exactly what changed, why it was safe, and what will happen if they&#8217;re wrong.</span></strong> Otherwise, their actions can&#8217;t be justified. Which makes it unlikely their organization will ask for them in the first place.</p><p>And so I want to talk about three terms. The first, <strong><span>Quality</span></strong>, refers to all the checks we install before we let the system loose. Those checks produce evidence, and from that evidence we derive a Verdict. </p><p>The second, <strong><span>Verdict</span></strong>, refers to the final decision we make before work enters our dependent system: I&#8217;m the line-producer of this content. I run the team whose work is shipped under my name. The model may write the line, but the Verdict is mine. The work of my team will not enter our dependent systems without my decision. A Verdict is the production decision: should we ship, block, redirect, narrow the response, add a guardrail, or reject outright?</p><p>The third, <strong><span>Answerability</span></strong>, refers to the guarantee that if someone asks, I can explain why. </p><p>To say this another way: our agent (which I define as a model plus a harness of files, tools, memory, skills, sandboxes, permissions, observability, and recovery) is what runs our loop (which I define as investigation, implementation, verification, and repeat). And it&#8217;s what creates our software factory.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!b5NR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!b5NR!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!b5NR!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!b5NR!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!b5NR!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!b5NR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!b5NR!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!b5NR!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!b5NR!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!b5NR!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7df09d3f-8dfb-4fd7-9de4-aa9bb3464d2c_1599x900.png 1456w" sizes="100vw"></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"><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"><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"><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"><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>The model is just the engine. The harness - tools, memory, permissions, sandboxes, tests - is the car you build around it so it can do real work safely.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7018!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7018!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!7018!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!7018!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!7018!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7018!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!7018!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!7018!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!7018!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!7018!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8bdf1-8d62-465f-aa14-3e34697f31df_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Wrap that harness in a repeatable cycle: investigate, implement, verify, repeat. The loop is how one good run becomes a process you can trust to run again. Wrap that harness in a repeatable cycle - investigate, implement, verify, repeat - where an independent check, not the model&#8217;s own say-so, decides when the work is done.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LODv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LODv!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!LODv!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!LODv!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!LODv!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LODv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!LODv!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!LODv!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!LODv!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!LODv!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eee1fe-f263-4ef5-af61-930279d183be_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Now run many loops at once. A factory is loops at scale - the agents ship the work inside, while humans own the decisions at the boundary. </p><p>And <strong><span>at the heart of that factory is a careful boundary between what&#8217;s inside the system and what&#8217;s outside it</span></strong>. Inside the system: we collect inputs (from the product team&#8217;s intent, or knowledge of previously shipped work, or of recent incidents, or of specific feedback from users). The agent loop investigates the task, implements a plan, and verifies the result. Then, evidence crosses that boundary. A human, who owns the dependent system, sees the evidence and decides whether to proceed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Kqik!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Kqik!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!Kqik!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!Kqik!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Kqik!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Kqik!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/62704113-5908-4335-9a45-f7f62826e366_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!Kqik!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!Kqik!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!Kqik!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Kqik!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62704113-5908-4335-9a45-f7f62826e366_1599x900.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>And that, friends, is the shift we&#8217;re trying to make. Before, our agents were doing the inner loop of the execution loop. Now they run the inner execution loop. <strong><span>Engineers own the outer loop.</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!5Xt5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!5Xt5!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!5Xt5!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!5Xt5!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5Xt5!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!5Xt5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!5Xt5!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!5Xt5!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!5Xt5!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5Xt5!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb190162-deb3-45ca-9ce5-15f31b3a173a_1599x900.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Inside the system, there&#8217;s really just one kind of thing our agents are doing: capability. The capability to investigate tasks, implement plans, test their results, and report back. That&#8217;s the capability of a model. And as we&#8217;ve said, that future is already here.</p><p><strong><span>Outside the system, there&#8217;s a single kind of thing: agency. The agency to decide, verify, approve, and ow</span></strong>n.</p><p>We&#8217;re still talking about code, you see. It just needs to live in a place and be performed by people who know what they&#8217;re doing.</p><p>The potential for AI code is no longer marginal. In a Sonar 2026 survey, we asked teams about the share of their commits that were AI-assisted. It was small but non-trivial. And several of the respondents said they expect the share of AI-assisted commits to grow substantially. </p><p><a href="https://www.sonarsource.com/state-of-code-developer-survey-report.pdf">Sonar&#8217;s 2026 State of Code report</a> found that 42% of committed code was AI-generated or significantly AI-assisted, with expectations for that share to keep growing rather than plateauing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!auS_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!auS_!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!auS_!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!auS_!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!auS_!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!auS_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!auS_!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!auS_!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!auS_!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!auS_!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e3fdfd6-602f-497c-b30a-253b1c8b6448_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Creation, in other words, is getting cheaper. Scarcer resources are review, validation, understanding, and maintenance.</p><p>We moved the speed of generation faster than we moved the speed of control. And so we have a trust-verification gap. A lot of people we talk to still express some degree of distrust in AI code. Yet fewer of them seem to consistently build that distrust into their verification processes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LZrj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LZrj!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!LZrj!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!LZrj!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!LZrj!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LZrj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d806a630-1380-4968-b6cb-925033278900_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!LZrj!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!LZrj!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!LZrj!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!LZrj!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd806a630-1380-4968-b6cb-925033278900_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>And that&#8217;s a dangerous place to be in. We&#8217;re going to need cheaper, clearer ways to verify the trustworthiness of AI code.</p><p>If you look at the GitLab June 2026 report, you&#8217;ll see that governance questions have shifted.</p><p><a href="https://ir.gitlab.com/news/news-details/2026/GitLab-Research-Reveals-Organizations-Are-Generating-AI-Code-Faster-Than-They-Can-Control-It/default.aspx">GitLab&#8217;s June 2026 AI accountability research</a> shows that review and validation are the current bottlenecks when using AI and, more worryingly, that governance usually happens after code creation, after we&#8217;ve accepted the risk and lost control over ownership. Today, it&#8217;s not just about control. It&#8217;s about what constraints we set on the system. It&#8217;s about how we&#8217;ll check the work with evidence, and how we&#8217;ll hold teams accountable. It&#8217;s about who will own what part of the AI lifecycle.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!yrrG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!yrrG!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!yrrG!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!yrrG!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!yrrG!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!yrrG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!yrrG!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!yrrG!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!yrrG!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!yrrG!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4297e539-985a-448e-a8a7-be7099d6e33b_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>So the final distinction in this series is between process and quality. Quality is the concept of back pressure. We mean it literally. <strong><span>We don&#8217;t want to grant our agents as much autonomy as they can possibly exercise.</span></strong> We want to grant them just enough autonomy that we have enough back pressure to stop them, regulate them, check their work, and ensure our humanity.</p><p>Ordinary engineering holds up a lot of signals that indicate that the work being done is doing the right thing. Type checks, tests, hooks, sandbox limits, audit logs, monitors. Our engineering systems are full of these kinds of signals, and they&#8217;re designed to provide enough back pressure to keep the system honest.</p><p>And so as long as our agents are emitting these same signals, we can trust our ordinary engineering to provide appropriate back pressure.</p><p><strong><span>Trusting our systems doesn&#8217;t mean we don&#8217;t want a human in the loop.</span></strong> It just means that the human doesn&#8217;t need to be in the inner loop. <strong><span>We want them in the constraints loop </span></strong>(what inputs, architectures, instructions, or invariants should we set?), <strong><span>the sampling loop </span></strong>(how much output should we sample and review?), <strong><span>the audit loop </span></strong>(what evidence should we keep and how do we make sure our audit log is effective?), <strong><span>and the ownership loop</span></strong> (what part of the production boundary should we own).</p><p>But the human doesn&#8217;t need to be in the inner loop.</p><p>The agent can ship more than you can review.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!NouI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!NouI!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!NouI!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!NouI!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!NouI!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!NouI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!NouI!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!NouI!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!NouI!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!NouI!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059e0a70-bba4-4e96-9a20-0c06d3f7041c_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>And the scarce resource is your own core human judgment, informed by quality signals like logs or tests.</p><p>The AI June 2026 report shows that, in the experimental setting, agentic delegation along hour-scale time horizons is essentially here. The work by <a href="https://openai.com/index/how-agents-are-transforming-work/">OpenAI this year on agents and the future of work</a> was a great source for these ideas. So we need to start thinking about how to establish this ownership boundary, as our systems start shipping more than we can review.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zUnE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zUnE!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!zUnE!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!zUnE!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!zUnE!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zUnE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!zUnE!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!zUnE!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!zUnE!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!zUnE!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1c5b533-f5e8-41f9-8091-773fa3f0053d_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>And that&#8217;s where the answerability comes in.</p><p>Because with long-horizon agents, the decisions made over hour-scale time horizons are just that - decisions. And not all the decisions are going to be recorded. You can&#8217;t trace them all back to input tokens. If all you&#8217;re doing is trusting that the output you get is the correct choice for the problem at hand, the hundreds or even thousands of human hours of work you&#8217;re going to need to reconstruct the chain of decisions that lead to it become impossible. And so, again, <strong><span>answerability becomes something that must be at the core of our system design</span></strong>.</p><h2><strong>Three hidden costs</strong></h2><p>And there are three hidden costs:</p><p><strong><span>Cognitive surrender ~ blindly accepting what AI gives you.</span></strong> When you delegate work to an agent, the work itself may appear to be the work of the agent. But it&#8217;s actually your work. It&#8217;s your reputation. It&#8217;s your responsibility. And it&#8217;s your software that suffered the defects in the output. And it&#8217;s your software that needs to be changed to reflect that output. So the agent&#8217;s output becomes your answer. And with it comes all the accountability. The <a href="https://executiveeducation.wharton.upenn.edu/thought-leadership/wharton-at-work/2026/05/thinking-fast-slow-and-artificially/">Wharton study</a> that put this together is reassuring when the AI is right. But when it&#8217;s wrong, the news isn&#8217;t great. When the AI was wrong, nearly three-quarters of people accepted it anyway, and felt more confident than they would have without the AI.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!WpuS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!WpuS!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!WpuS!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!WpuS!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!WpuS!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!WpuS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!WpuS!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!WpuS!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!WpuS!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!WpuS!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10723b7-66dc-425c-9f51-82404d97524c_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong><span>Cognitive debt ~ erosion of your understanding and memory of how to solve problems.</span></strong> When you delegate work to an agent, you&#8217;re offloading all the thought work to the agent. And while thinking it all out yourself takes time and energy, thinking it out on a massive codebase takes resources that aren&#8217;t available when you&#8217;re trying to run up the learning curve. So the output you get is often unattainable by you. And the longer the time horizon of the agentic planning, the bigger the gap between the code the agent produces and your understanding of it becomes. The gap compounds. The debt accumulates. And the cost of climbing the learning curve grows almost exponentially. There&#8217;s a <a href="https://www.anthropic.com/research/AI-assistance-coding-skills">randomized controlled trial from Anthropic</a></p><p> looking at whether engineers who lean on AI to write code understand it as well as engineers who write it themselves. The conclusion was gloomy: on a comprehension quiz, the engineers who worked through AI scored seventeen percentage points lower than those who didn&#8217;t, 50 percent versus 67 percent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ck4j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ck4j!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ck4j!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ck4j!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ck4j!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ck4j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!ck4j!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ck4j!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ck4j!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ck4j!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5e5390-dcb8-4548-8edf-c984d9e7cd4f_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>And then there&#8217;s the <strong><span>orchestration tax ~ its easy to spin up lots of agents now, but your cognitive bandwidth doesn&#8217;t parallelize in the same way.</span></strong> Steering your agent away from the worst behaviors, sorting the work the agent produces to identify the ones that need your attention, directing it to focus on the work you care about first, verifying your most important constraints and your most dangerous assumptions before you let it run&#8230;</p><p>All of that takes work, and it can&#8217;t be automated.</p><p>There&#8217;s no substitute for human judgment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!k1QZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!k1QZ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!k1QZ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!k1QZ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!k1QZ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!k1QZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!k1QZ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!k1QZ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!k1QZ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!k1QZ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd03d0198-1c08-4228-a86a-60808b6514ff_1599x900.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Brownfield systems are especially dangerous here, because the system behavior you have to audit doesn&#8217;t live in the code. It lives in the scars.</p><p>Fixes? Make attention the priority in your architectural decisions. Use worktrees, scopes, and evidence to reduce the coupling between your initial plan and the work that emerges from it. Time-box the effort to resolve unactionable steps. And make change in your software strictly an opt-in permission.</p><p><strong><span>Alpha, decay, and taste: these are the three core patterns that shape careers and performances across domains.</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IODM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IODM!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!IODM!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!IODM!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IODM!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IODM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!IODM!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!IODM!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!IODM!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IODM!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7124ca6d-d8b6-4ae5-a301-8a6108324407_1599x900.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Alpha is the lead part taken up by the highest achiever in the competition, when you&#8217;re playing your highest-value game move. Decays are established patterns that everyone learns through repetition and watching others (plateaus, if you like). Taste is the earliest we can sense the lead in an alpha or the change in a decay. It&#8217;s our judgment of what&#8217;s coming before we have any evidence that anything is happening.</p><p><a href="https://paulgraham.com/taste.html">Paul Graham&#8217;s point</a> is that when anyone can make anything, choosing what to make matters more, and Mitchell Hashimoto&#8217;s definition is the operational one: making high-quality qualitative judgments where no objective metric exists yet. From now on, taste drives everything: alpha shifts are taste changes. And decays fade out because we start to taste something different.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!DHgb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!DHgb!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!DHgb!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!DHgb!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DHgb!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!DHgb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!DHgb!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!DHgb!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!DHgb!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DHgb!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfa1ebbf-fdd0-428c-bbe1-d084c6094157_1599x900.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Next step? Operationalize your taste. How? Give it a name that reflects what you&#8217;re trying to move from limbic to conscious. Practice it in critique and examples. Make its rationale explicit.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OoXP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OoXP!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!OoXP!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!OoXP!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!OoXP!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OoXP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!OoXP!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!OoXP!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!OoXP!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!OoXP!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23017b46-7366-441a-8ee8-630fc3e5d9c6_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>And keep making the move that delivers the most durable competitive advantage in your industry. What&#8217;s that? Keep moving the edge up from just doing the task to teaching it, systematizing it, deciding when it should be done, and owning the result.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dXab!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dXab!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!dXab!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!dXab!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!dXab!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dXab!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!dXab!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!dXab!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!dXab!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!dXab!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fd9e19f-c380-437c-914f-e35b46998633_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Everyone is a developer, but not everyone is an engineer. Engineering is what a developer turns into when they embrace a work discipline that is more strict: thorough and logically sound reasoning, consideration of constraints and tradeoffs, recognition of risk and exposure, and practical accountability.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!nfKL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!nfKL!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!nfKL!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!nfKL!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nfKL!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!nfKL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!nfKL!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!nfKL!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!nfKL!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nfKL!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bb4f1da-9734-4fc0-84f7-6ec9b658e29a_1599x900.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>In the future, people will leave the administrative work of engineering and embrace new roles that emerge as engineering becomes more demanding. Roles that are un-bundled from the spirit of craft but make clear what each person does. There will be those who prototype. Those who build. Those who sweep. Those who grow. Those who maintain.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!z4hg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!z4hg!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!z4hg!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!z4hg!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!z4hg!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!z4hg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7573db5-3a11-455b-879d-3bee32527c17_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!z4hg!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!z4hg!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!z4hg!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!z4hg!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7573db5-3a11-455b-879d-3bee32527c17_1599x900.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>The humans hold the edge of the system in the other direction, too. Increasing the alpha in the other direction: choosing what is worth doing, defining the constraints within which it should be done, deciding if the evidence is sufficient to proceed, and caring for the result. Whether it&#8217;s a single team or a hundred teams, this is the edge that only humans can hold.</p><p><strong><span>Accountability will scale the factory. </span></strong>Like attention and taste, accountability is also one of the three dualities that makes everything work. <strong><span>Without accountability, there are no rules. </span></strong>No wrangling with questioners. No trade-offs. No risks. No safety nets. If nobody owns the consequence of a decision, then high agency can only bring chaos.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jj5-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jj5-!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!jj5-!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!jj5-!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!jj5-!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jj5-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!jj5-!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!jj5-!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!jj5-!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!jj5-!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e442db-ba5b-4776-b810-b2ee3405290c_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>The half-life of an edge is one release, but the half-life of a signature is a career. A signature is your name on the work, such that you feel you can stand behind what was shipped. Skills get you leverage; accountability turns leverage into trust.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!06Qm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!06Qm!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!06Qm!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!06Qm!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!06Qm!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!06Qm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!06Qm!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!06Qm!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!06Qm!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!06Qm!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7cbf25-edb0-4b6e-80fb-b8ac9fa71529_1599x900.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Only people can choose. Only people inherit consequence. Agents can be asked to choose, route, merge, and escalate safely inside a policy, but they cannot inherit the consequences.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!liae!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!liae!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!liae!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!liae!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!liae!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!liae!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg" width="1456" height="815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!liae!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!liae!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!liae!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!liae!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68023872-c2f5-4aeb-9cd7-31e04e0a2ca1_1698x950.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Every codebase should perhaps come with some kind of accountability contract that explicitly states the checklist that was understood when the change was accepted, the evidence that went into the decision, who was accountable for the change, and the system status after the change was blocked. Just like:</p><ul><li><p>Your attention and taste</p></li><li><p>Your evidence, verdict, and ownership</p></li><li><p>Your alpha, decay, and taste</p></li></ul><h2><strong>High agency</strong></h2><p>In a typical agentic workflow, <strong><span>high agency is the art of knowing when to delegate, when to inspect, when to stop, and when to own the result of a process</span></strong>. The ladder of agency runs from low to high: flag a potential problem, investigate it, execute against it, diagnose it, propose solutions, recommend fixes, and resolve the issue. A high rung on the agency ladder is discernment: found it, it&#8217;s not worth fixing, moving on.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XzXA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XzXA!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!XzXA!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!XzXA!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!XzXA!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XzXA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!XzXA!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!XzXA!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!XzXA!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!XzXA!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97fb0b1e-5976-4f32-89e3-007832c85763_1599x900.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2><strong>The twelve pillars that hold up the software factory</strong></h2><p>Brownfield is the frontier for factories that hope to scale. All those clever little innovations may not feel like much yet, but the production environment is a lot. When building an entirely new system, it&#8217;s much easier to plan and implement sufficient back pressure mechanisms because you have full control. When you&#8217;re adding intelligent agents to a legacy system, however, it&#8217;s another matter entirely.</p><p>Legacy systems include the entirety of production behavior, future expectations from customers, migration histories, release and budget cycle durations, unspoken assumptions, edge cases, data weirdness, runbook procedurals, and all the scars that accumulated without the will to care for the system.</p><p>To be a steward of brownfield requires a form of durable engineering. Work has to be done to turn implicit knowledge into explicit constraints, keep it coherent across teams and through generations, formalize that knowledge into test procedures and functional specifications, and tie that knowledge to objective evidence. All while ratcheting failure into more learning. Because if the system doesn&#8217;t get the care it has always received, everything will come crashing down.</p><h2><strong>New Work is Real Work</strong></h2><p><strong><span>The work will get more interesting as you scale. Because when everything else is built, people will want to build new things. </span></strong>They&#8217;ll want to employ the alpha and taste they have developed through their craft to design new loops that can be grafted onto the software factory. Or they&#8217;ll want to build greenfield systems that employ all the knowledge of the software factory to one elegant, well meaning, principled effort. They&#8217;ll want to design and implement new forms of evidence that will rise to the level of verification for the new systems. They&#8217;ll want to take care of brownfield systems that are now so complex they need dedicated attention. They&#8217;ll want to design and manage new back-pressure mechanisms. They&#8217;ll want to design new agents. And they&#8217;ll want to build agency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!w5RD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!w5RD!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!w5RD!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!w5RD!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!w5RD!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!w5RD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!w5RD!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png 424w, /__u/substackcdn.com/image/fetch/$s_!w5RD!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png 848w, /__u/substackcdn.com/image/fetch/$s_!w5RD!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png 1272w, /__u/substackcdn.com/image/fetch/$s_!w5RD!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd64bc0d2-c3e4-431c-94ce-10d74f96aab0_1599x900.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>And, as they do, they&#8217;ll come to see that all this is real work. That&#8217;s a good thing.</p><p>Automation creates bottlenecks. Bottlenecks in production that are worth owning. Because automation gives us control over industrial scale. But there&#8217;s also new bottlenecks that arise from industrial scale. <strong><span>The bottleneck moves from &#8220;can we build this?&#8221; to &#8220;should this exist, can we answer for it?&#8221;</span></strong></p><p>What I&#8217;m suggesting is a practical operating model for scaling agentic engineering. There&#8217;s inner and outer loops. The inner loop is where the work is done. Loops are designed to be as independent as possible. <strong><span>Put all quality assurances and verification inside the loop. Once you&#8217;ve designed and validated the loop itself, the only thing you have left to do is to grant autonomy by putting in place a back-pressure mechanism that acts to control the rate at which the loop is run and its scope of operation. And put humans in their rightful place, on the right decisions.</span></strong> Don&#8217;t treat understanding as a hand-off or a release gate, but rather as a point of decision where humans are primed to provide their insight. And then for every artifact that exists and is fed back into production and into new teams and engineers, leave behind better artifacts.</p><p><strong><span>Build the factory; keep the lights on; make work legible, verifiable, owned.</span></strong></p><p>An agent can write it. But before it reaches users, someone must explain why it should exist, why it&#8217;s safe enough to be part of production, and what they will do when it is wrong.</p><p>That is agentic engineering at the outer loop - that is the work now.</p><p><em><span>Pangram has </span><a href="https://www.pangram.com/history/ae6caccc-b70f-4336-a019-5c3411516871"><span>scored</span></a><span> this article as 100% human written. It was cross posted to </span><a href="https://x.com/addyosmani/status/2074927530482835916"><span>Twitter/X</span></a><span>.</span></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Sd4F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Sd4F!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png 424w, /__u/substackcdn.com/image/fetch/$s_!Sd4F!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png 848w, /__u/substackcdn.com/image/fetch/$s_!Sd4F!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Sd4F!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Sd4F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png" width="1456" height="762" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:762,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:747448,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/206209109?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Sd4F!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png 424w, /__u/substackcdn.com/image/fetch/$s_!Sd4F!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png 848w, /__u/substackcdn.com/image/fetch/$s_!Sd4F!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Sd4F!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49cbb422-812c-4901-9ef9-5fcd3c96db31_2400x1256.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Agentic Autonomy Levels]]></title><description><![CDATA[A working model of autonomy for agentic engineering]]></description><link>https://addyo.substack.com/p/agentic-autonomy-levels</link><guid isPermaLink="false">https://addyo.substack.com/p/agentic-autonomy-levels</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Fri, 03 Jul 2026 14:30:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2N4L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In most conversations about agentic engineering, the action has changed from prompting to <strong><span>operating</span></strong>. Here&#8217;s a frontier looking into the fog: <strong><span>software factories, goals, loops, background sessions, subagents, hooks, sandboxes, agent-approving agents</span></strong>. For many creators of the future, this behavior will be baked into products day-1: Claude Code and Codex expose the shift directly.</p><p>From the engineer standpoint, you&#8217;ll use <strong><span>low autonomy</span></strong> to limit risk and increase reversibility, but use <strong><span>higher autonomy</span></strong> for explicit activities, and fleets of parallel agents safely refactoring massive codebases. The core question about an action is always: <strong><span>what level does this task deserve, and what verification makes that level defensible?</span></strong></p><p>The edge of the frontier is the <strong><span>manager agent</span></strong> that wakes on its trigger, delegating to its helpers while <strong><span>continuously verifying their output</span></strong>, and <strong><span>returning with only the decisions that must be made by a human</span></strong>. Folks using this kind of setup may indeed already be running hundreds or thousands of agents, largely on evergreen codebases. Like most all thinking about autonomy, <strong><span>how you perceive the scale is still different for everyone</span></strong>.</p><p>The scale most often mentioned is from <strong><span>Steve Yegge&#8217;s single-axis ladder </span></strong>mentioned in &#8220;<a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04">Welcome to Gas Town</a>&#8221; and in The Pragmatic Engineer. It&#8217;s a good reference if you want a number that tells you how AI-native you are: the ladder gives you a single number to measure if you know your trust in a single agent. Here&#8217;s one version of it:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Hcvt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Hcvt!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Hcvt!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Hcvt!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Hcvt!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Hcvt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg" width="1456" height="1409" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1409,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!Hcvt!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Hcvt!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Hcvt!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Hcvt!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf1e5a74-bbd6-44e4-8bd4-f50761d86eec_1554x1504.jpeg 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"><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"><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"><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"><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>In early 2026, even while work began to shift from delegation to orchestration, this was a fairly good proxy for measuring risk. Today, however, <strong><span>many skill sets may have increased significance and leverage when you can run many agents at once.</span></strong> A single rung cannot help you place multi-agent skill.</p><p>Instead, almost every autonomy debate I&#8217;ve seen conflates two questions that should be separated: <strong><span>how far away from yourself are we letting this single agent go, and what is our skill at coordinating many agents?</span></strong></p><p>To capture these two dimensions separately, we&#8217;ll use two axes: <strong><span>agency and orchestration.</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!gf3I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!gf3I!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!gf3I!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!gf3I!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!gf3I!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!gf3I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg" width="1456" height="1048" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/daab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1048,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!gf3I!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!gf3I!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!gf3I!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!gf3I!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaab52b4-1e07-40a3-8426-34a3ea1b8101_1764x1270.jpeg 1456w" sizes="100vw"></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"><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"><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"><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"><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>On the agency axis, low includes suggesting candidate actions and <strong><span>waiting for a decision</span></strong>.</p><p>Mid means that the agent is working on a particular task, but <strong><span>scopes what it does</span></strong>, and <strong><span>constantly reports back</span></strong> what it does along with evidence, so you can keep steering it.</p><p>At the <strong><span>high agency </span></strong>end, the agent is <strong><span>working towards a goal</span></strong>, experimenting, learning, testing, finding ways to solve a problem, getting blocked, asking questions, trying different approaches, and returns all of this work in <strong><span>evidence</span></strong>.</p><p>On the orchestration axis, low means one agent, one thread. At mid, you&#8217;ve got several agents, each working in its own worktree, possibly working towards different goals, but isolated. At the high end, you&#8217;ve got an orchestrator that can take a backlog, issue tracker, schedule, or other queue, and turn it into continuous work, and you only need to step in when things fail: &#8220;management by exception.&#8221; Products and features incorporating these ideas include:</p><ul><li><p>Claude Code&#8217;s /plan, /goal, /loop, /background, /batch, /code-review, /security-review modes, subagents, hooks, checkpointing, agent delegation and management practices, background sessions, agent-team patterns, /schedule arguments</p></li><li><p>Codex&#8217;s local/cloud threads, Goal mode, worktrees, Automations, subagents, review panes, GitHub code review, hooks, sandboxing, Auto-review, and rerun</p></li></ul><p>These capabilities don&#8217;t fit onto a single ladder.</p><h2><strong>The climb: three eras and a single stack</strong></h2><p>If you read the ladder bottom-up, you&#8217;re imagining climbing both agency and orchestration at the same time. In effect, the six levels represent three separate eras that we all pass through:</p><p>First, you&#8217;re in the driver&#8217;s seat, and an agent mostly just helps, waiting for you to steer it.</p><p>Second, the agent takes charge of a bounded task or goal, but you&#8217;re still around to steer it and verify what it does.</p><p>And third, in the era of orchestration, the system is capable of running the show, dispatching work across many agents, and you mostly need to step in when things go wrong: &#8220;management by exception.&#8221;</p><p>This makes things simpler, because the vertical position on the ladder neatly captures the two axes (orchestration only kicks in near the top), leaving it as a single steady climb through the rungs. And yet, the climb is still part of a shift that we&#8217;re all going through.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!D7Gn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!D7Gn!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!D7Gn!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!D7Gn!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!D7Gn!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!D7Gn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg" width="1456" height="1190" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1190,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!D7Gn!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!D7Gn!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!D7Gn!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!D7Gn!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c4b11a-e01f-4b49-87e8-1562ed7ca7fb_1554x1270.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>A good day doing engineering includes touching several rungs, sometimes more: it&#8217;s normal to switch between the eras a few times in the course of a task.</p><h2><strong>The six levels in detail</strong></h2><p><strong><span>Level 0: Assist</span></strong></p><p>The agent makes suggestions that are mostly good and often perfect, but you will always decide whether they&#8217;re good enough to act on. Think autocomplete, inline edit suggestions, or hanging around in a chat session discussing a change that nobody has taken ownership of yet. Use for costly errors, tiny changes, or when you&#8217;re forming your own judgment. Verification mostly takes place locally.</p><p><strong><span>Level 1: Supervised action</span></strong></p><p><strong><span>The agent edits or runs commands on your behalf, asking you before executing anything consequential.</span></strong> This is the default posture for most people. It can be done in local sandbox with approvals before applying changes -  where each approval is an independent verification that the change is okay to apply -  or in an interactive session. Failure mode is approval fatigue; all approvals feel the same regardless of what they&#8217;re approving. You might solve this by squinting at the diff, following some heuristics, checking in with another person before approving, or just agreeing to let the agent be responsible. Codex Auto-review solves this problem by delegating the final approval of boundary conditions to a separate reviewer agent.</p><p><strong><span>Level 2: Scoped task delegation</span></strong></p><p><strong><span>Hand off a bounded task to the agent. </span></strong>That task will have a clear goal, constraints, and a working definition of what done looks like. You&#8217;ll stay nearby, able to interrupt, but mostly not involved. This is the center of gravity in the software engineering world. Verification is shifting away from you (you may need to rest and sleep) towards evidence that the agent can produce: passing automated tests, proper types, lint suggestions, screenshots, repro steps, provenance by example, etc.</p><p><strong><span>Level 3: Goal-driven autonomy</span></strong></p><p><strong><span>The agent does whatever it takes to achieve a goal, stopping only when some condition is met.</span></strong> In prompt mode, this means the prompt itself becomes the goal (e.g., &#8220;Can you reduce this page&#8217;s time-to-interactive below 1 second?&#8221;). In Codex, this is Goal mode: the agent cycles through plan-&gt;act-&gt;test-&gt;review steps until it stops meeting success criteria. In Claude Code, it&#8217;s the /goal, /loop, and /schedule commands. For this level to be useful, the stopping condition must be measurable in a way that can be automated.</p><p>Don&#8217;t ask your agent to help with vague, wooly goals like improving user experience in general&#8221; or &#8220;make the codebase more testable.&#8221; Pick something specific, measurable, and automated: find bugs in production that elude static analysis, reduce load time, ensure that we have a strict TypeScript build with no explicit anys, triage all dependencies to keep just those that we understand and which pass our tests, etc. And, finally, to find bugs in production, the agent will need to be in a production-like environment.</p><p><strong><span>Level 4: Parallel delegation</span></strong></p><p><strong><span>Work across many agents in parallel.</span></strong> Each agent works on an isolated slice of the task. The biggest bottleneck at this level is decomposition: defining the right slices to delegate. Supports include: subagents, background sessions, /batch, worktrees, agent teams, etc. Failure mode is false parallelism: running many agents against overlapping slices at once, so instead of more work you get merge conflicts and duplicated decisions. To do this well, agents need to be isolated from one another, each owning their own files and status. Each needs to have its own review queue, as well. And finally, each agent incurs a cost -  in terms of tokens consumed -  proportional to the number of agents running at the same time. On the human side, orchestration tax makes the marginal cost of adding an agent go up after a few.</p><p><strong><span>Level 5: Managed-by-exception orchestration</span></strong></p><p><strong><span>Define what success looks like, and which policies should apply.</span></strong> A manager agent will wake up based on triggers (e.g. new issue, new task, clock), dispatch worker agents, monitor their progress, verify output, retry on failure, escalate to more competent agents or humans when conditions are met, aggregate results, and ultimately return work products (e.g. PRs) and evidence to external systems. Think factory: the issue tracker or backlog is the input, and the product of the factory is the output (i.e. many fixed issues, bugs). Agents work in an appropriately isolated environment with lots of walls (and if needed, escape hatches), and only an operating system -  defined by the manager agent -  defines what the factory is expected to do.</p><p>The design of this operating system is left to the human; OpenAI has proposed a <a href="https://openai.com/index/open-source-codex-orchestration-symphony/">spec</a> for Symphony which has a Linear board at the center: <strong><span>each issue gets its own agent workspace, and the agent continuously ensures that it is making progress towards its goal as defined in a spec file in its own workspace</span></strong>. Human review can be done at the altitude where evidence is generated, but the frontier (i.e. what is most powerful in the orchestration world) is to build continuous agent factories with hundreds or even thousands of agents. At this point in the climb, it becomes increasingly important to have independent verification: separate implementers and reviewers, separate test runners and QA, separate security checks, separate process gates for acceptance.</p><h2><strong>Risk and reversibility set the ceiling.</strong></h2><p>I remember reading an earlier <a href="https://www.anthropic.com/research/measuring-agent-autonomy">Anthropic study</a> on some of the hardest tasks with Claude Code where it asked for clarification more than twice as often as users interrupted. Experienced users (~750 sessions vs under 50) were more likely to auto-approve and interrupt keeping an eye on the progress.</p><p>They also did a lot of broader <a href="https://www.anthropic.com/research/claude-code-expertise">analysis</a> of how people use Claude Code. They looked at ~400K sessions from ~235K people between October 2025 and April 2026. From each session they could figure out the decisions someone makes like how many actions they ask for in each prompt, which of these they choose to auto-approve, how often they interrupt etc. People make ~70% of the planning decisions, but Claude does ~80% of the execution. <strong><span>High autonomy is not about leaving people out of the loop, but moving from having them do every step to having them decide which direction to go next.</span></strong></p><p><strong><span>If we want to determine whether a large AI system is operating with high autonomy, the three questions we should be asking are</span></strong>: </p><ul><li><p>How quickly will we know we&#8217;re wrong about what it&#8217;s doing? </p></li><li><p>How cleanly can we undo what it&#8217;s doing? </p></li><li><p>What would prove we&#8217;re right about what it&#8217;s doing? </p></li></ul><p>If the answer to all three is: not quickly, at great difficulty, and trusting the summary, it&#8217;s not high autonomy.</p><p><strong><span>Every run of an agent should be preceded by a contract that defines what it&#8217;s trying to do. </span></strong></p><p>The goal: what we&#8217;re trying to achieve (not an activity, not the technique, but an outcome). </p><p>The scope: what domain we&#8217;re operating in, and what techniques are allowed. </p><p>Non-goals: what isn&#8217;t part of the objective. </p><p>Tools and permissions: how the agent can interoperate with the world. Stopping condition: when to stop; ideally, a measurable variable. </p><p>Evidence: specific tests, screenshots, logs, database records or other indicators that can be used to confirm something has been done (independent of the agent). </p><p>Escalation: who gets involved in what circumstances (including who runs the agent). </p><p>And budget: a limit on how much time, effort and tokens are to be devoted to the task (tokens are the budget of large AI models - you can also include a limit on the number of times it can attempt the task and a limit on the degree of parallelism).</p><h2><strong>Metrics make autonomy just a little more reliable</strong></h2><p>Deciding on metric after-the-fact is probably not enough. Metrics can be put in place in advance, in a concise doc. And that makes autonomy feel more reliable and makes the leap of faith just a little easier to take.</p><p>While there are many ways to measure success, considering tracking some version of these metrics for each level of autonomy:</p><ul><li><p>Mean time between interventions</p></li><li><p>Longest successful unattended run with accepted work</p></li><li><p>Share of actions run in the sandbox vs escalated</p></li><li><p>Percentage of actions auto-approved vs rejected</p></li><li><p>Mean number of agent actions per human instruction</p></li><li><p>Clarification request rate Interrupt request rate</p></li><li><p>Review time per accepted change</p></li><li><p>Rework rate on each level of confidence</p></li><li><p>Defect escape rate on each level of confidence</p></li><li><p>Token cost per accepted change</p></li></ul><p>Such metrics can tell a story: a single agent kept busy by human handoffs is Level 4 with a dashboard. A conservative agent, unwilling to proceed without automated intake, retries, and decent evidence, is Level 5 with a real gate.</p><h2><strong>Think about readiness</strong></h2><p>Classify work by risk and by how easily it can be undone. Apply autonomy conservatively, rising only as evidence supporting the higher level accumulates. A payment engine refactor protected by strong tests and reviewer agents with a clean rollback path can support much higher autonomy than a documentation automation task lacking any canonical truth. The autonomy level should follow the verification process, not the task name.</p><h2><strong>Four anti-patterns</strong></h2><p>Every system can easily fall prey to these four autonomy anti-patterns unless vigilantly avoided.</p><p><strong><span>Autonomy as status</span></strong> -  an agent&#8217;s autonomy rating becomes a meaningless badge of status. Higher autonomy is treated as proof of capability, not of safety, and agents are run hotter than verification supports. Fix: Praise and reward those who settle on the correct level of autonomy and relentlessly avoid overstepping.</p><p><strong><span>Permission laundering</span></strong> -  the tyranny of approval fatigue leads us to grant AI agents and tools wildly broader access than necessary. Fix: Better boundaries are always a fix, such as sandbox profiles, scoped writable roots, allowlisted commands, hooks, and Auto-review.</p><p><strong><span>Summary substitution</span></strong> -  the agent&#8217;s work summary substitutes for review, assuming the summary is sufficient. Fix: Bundle the same evidence packet as with fully manual reviews (a diff, tests, logs, screenshots, reviewer findings, risks, gaps, etc.) while avoiding cognitive surrender.</p><p><strong><span>Fleet cosplay </span></strong>-  dozens of agents run in parallel, but a human persists in orchestrating every dependency manually. Fix: Shared state, ownership rules, and better dependency tracking gradually reduce the need to coordinate manually. Smaller WIP limits force a focus on encoding and documenting the coordinated steps until orchestration becomes automated.</p><p><strong><span>A calibration exercise</span></strong></p><p>Review the last ten tasks you undertook with agent assistance. For each task, record the autonomy level exercised, the risk involved, how easily the work could be undone, the evidence produced to meet verification requirements, the review time, if any rework was needed, and whether the autonomy level chosen would still be a fit next time.</p><p><strong><span>How to climb safely</span></strong></p><p>Move up one axis at a time. Start with a single supervised agent to do a single scoped task that produces defensible evidence of success (an autonomy level 1, if tidy enough). Then gradually expand in the three orthogonal directions. Parallelize read-heavy exploration tasks (autonomy level 4). Add write agents acting on separate worktrees with constrained file ownership rules (autonomy level 4). Add recurring automations, then agent-led orchestration based on issues, voice, etc. Every step up the lever requires a new set of safety mechanisms (such as new failure modes).</p><p>Name them: Longer single-agent runs can lead to drift, context rot, dropped communication, or strayed objectives. Background work can lead to stale assumptions and weak handoffs. Too much parallel work can lead to merge conflicts or duplicated decisions. Too much recurring work can lead to silent token spend or stale prompts. Managed by exception can lead to long review queues and alert fatigue. Fix not trusting harder; instead, narrow scope, ensure better evidence, enable cheaper rollback paths, harden gates, and define clearer ownership rules.</p><p><strong><span>Use the autonomy level:</span></strong></p><ul><li><p>Level 0 is best for delicate work and when judgment is still being formed.</p></li><li><p>Level 1 is best for most exploration, if the work is done close to the boundaries of what is well-understood.</p></li><li><p>Level 2 is best for most bounded tasks, knowing there may be unknown depends and unforeseen gotchas.</p></li><li><p>Level 3 is best where the success conditions can be stated with sufficient clarity.</p></li><li><p>Level 4 is best when the work can be cleanly split across these success conditions.</p></li><li><p>Level 5 is best once the coordination and communication needed across the various success conditions is fully encoded.</p></li></ul><p><strong><span>Verification will always be the bottleneck.</span></strong></p><p>Despite current bravado and current tooling, the mature posture of an engineering team working with AI agents is <strong><span>calibrated autonomy</span></strong>. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dsls!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dsls!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!dsls!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!dsls!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!dsls!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dsls!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="/__u/substackcdn.com/image/fetch/$s_!dsls!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!dsls!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!dsls!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!dsls!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b4446d8-b988-46b5-91fe-2d44ac921a51_1900x1066.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>In the near future, we&#8217;ll want to design loops that know when to work, when to verify, and when to ask -  but <strong><span>the skill of the engineer will still lie in choosing the right level of autonomy and in building patterns and defensible evidence that guard against its darker corners</span></strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2N4L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2N4L!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2N4L!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2N4L!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2N4L!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2N4L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52241,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/204795713?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!2N4L!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2N4L!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2N4L!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2N4L!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5a99c5-704d-45ee-93fb-3d51a232a19c_1376x768.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Agentic Code Review]]></title><description><![CDATA[Why review is the most leveraged skill in software right now.]]></description><link>https://addyo.substack.com/p/agentic-code-review</link><guid isPermaLink="false">https://addyo.substack.com/p/agentic-code-review</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Tue, 16 Jun 2026 14:31:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ya4s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Coding agents are extraordinarily good now and getting better fast. The interesting consequence is that <strong>the hard part of engineering moved from writing code to deciding whether to trust it, which makes review the most leveraged skill in software right now</strong>. How you approach it depends enormously on who you are: a solo developer with no users and a team maintaining a ten-year-old application are not solving the same problem.</em></p><p>I am more optimistic about agentic engineering than I have ever been. The agents are genuinely good, they get better every month, and on an ordinary week I now ship things I would not have attempted in the same time a year ago. This write-up is a map of where the interesting work went, because it did move, and most teams have not fully caught up to where.</p><p>Code review used to work because of a happy accident of relative speed. A senior engineer could read code faster than a junior could write it, so review kept pace without anyone designing it to, and the team absorbed how the system fit together as a side effect of reading each other&#8217;s diffs. A lot of that was not deliberate. It fell out of a single fact: writing code was the slow, expensive part, and reading it was cheap and fast.</p><p>That fact no longer holds. An agent will produce a thousand lines of often solid, well-formatted code in less time than it takes me to read this paragraph, while a human&#8217;s reading speed has not changed since roughly the day we started staring at screens for a living. So the constraint moved downstream, to the one step that did not get faster: a person being confident the change is right. I do not think that is a loss. It is the most leveraged place in software to be good right now, and it is where I have put most of my attention this year.</p><p>There is a happy twist here that shapes the rest of this piece. <strong>The same tools generating all that extra code are also the best thing I have for keeping up with it. </strong>On my own projects, including the popular open-source ones, I now point Claude Code or Codex at a batch of incoming PRs and have them triage the queue for me, and that has genuinely changed how I spend my time. So this is not an anti-AI argument, and I will come back to exactly how I use it.</p><p>It is also not a data dump, and not another round of whether letting a model write your code is wonderful or the end of the craft, because that framing is useless. The only answer that survives contact with a real codebase is that it depends entirely on who you are. A developer vibe-coding a side project a dozen people will ever run, and a team keeping a ten-year-old enterprise system alive for another quarter, share almost no constraints worth naming, and most of the advice in circulation is really one of those two people telling the other how to live.</p><h2><strong>What the 2026 data actually shows</strong></h2><p><strong>The productivity gains from AI are real, but raw output overstates them: about four times the code for a tenth more delivered value. The gap between those numbers is review work, which is exactly why review is where the leverage now sits.</strong></p><p>For a couple of years this was anecdote and argument. It is now measured at scale, by organizations with no shared agenda and in several cases competing commercial interests, and the measurements keep pointing the same way: AI pushes output sharply up, and pushes both quality and reviewability down.</p><p><a href="https://www.faros.ai/blog/ai-acceleration-whiplash-takeaways">Faros AI</a> instrumented 22,000 developers across 4,000 teams and tracked what happened as teams moved from low to high AI adoption. This is March 2026 data, about as current as anything here. The upside is real and worth stating plainly: developers merge considerably more PRs and complete more work, and throughput per engineer climbs. Then the rest of the report:</p><ul><li><p>code churn up <strong>861%</strong></p></li><li><p>the incidents-to-PR ratio up <strong>242.7%</strong></p></li><li><p>the per-developer defect rate up from <strong>9% to 54%</strong></p></li><li><p>median review <em>duration</em> up <strong>441.5%</strong>, with time-to-first-review and average review time both roughly doubling</p></li><li><p>PRs merged with <strong>zero review up 31.3%</strong></p></li></ul><p>The last figure is the one I find hardest to dismiss, because nobody chose it. There was no decision to stop reviewing. <strong>Reviewers simply could not keep pace with the volume, so code began merging unread, and that became normal. </strong>The detail I keep returning to is that teams with mature, disciplined engineering practices were hit just as hard as everyone else. Good process did not protect them, because the volume arrived faster than any process was designed to absorb.</p><p>One caveat to hold throughout: CodeRabbit and Faros both sell into this market, so their framing is not disinterested. That does not make the numbers wrong, the effect sizes are large and consistent across unrelated sources, but vendor research deserves to be read with that in mind.</p><p><a href="https://www.businesswire.com/news/home/20251217666881/en/CodeRabbits-State-of-AI-vs-Human-Code-Generation-Report-Finds-That-AI-Written-Code-Produces-1.7x-More-Issues-Than-Human-Code">CodeRabbit</a> studied 470 open source PRs in December 2025, 320 AI-coauthored and 150 human-only, and found the AI changes carried roughly <strong>1.7x more issues</strong>: logic and correctness problems up about 75%, security issues 1.5 to 2x more common, readability problems more than tripling. Their AI director David Loker described these as &#8220;predictable, measurable weaknesses that organizations must actively mitigate&#8221;. Predictable is the operative word. These are known, locatable weaknesses, which is good news: it means a review process, human or automated, can be aimed straight at them.</p><p><a href="https://www.gitclear.com/research/ai_tool_impact_on_developer_productive_output_from_2022_to_2025">GitClear</a> has interesting data here too. In their productivity data through 2025, daily AI users produce around <strong>4x the raw output</strong> of non-users, but measured against their own output a year earlier, the real productivity gain is only about <strong>12%</strong>. You are generating roughly four times the code for something like a tenth more delivered value, and a human still has to review all four times of it. To GitClear&#8217;s credit, Bill Harding is explicit that some of even that 12% is selection bias, because stronger developers concentrated in the AI cohort. The gap between 4x the code and a tenth more value is the review problem stated in one line.</p><p><a href="https://github.blog/ai-and-ml/generative-ai/agent-pull-requests-are-everywhere-heres-how-to-review-them/">GitHub</a> reports that Copilot review has now run over 60 million reviews, a 10x increase in under a year, and more than one in five reviews on the platform involves an agent. This is no longer a niche practice. It is how code gets made.</p><p>Four datasets, four methods, one conclusion. We poured machine-speed output into a system built for human-speed work. The bottleneck did not disappear; it <a href="https://addyosmani.com/blog/verification-bottleneck/">moved to verification</a>, and review is where that bill comes due.</p><h2><strong>Everyone is solving a different problem</strong></h2><p><strong>How much review a change needs depends almost entirely on its blast radius, and most advice you read was written by someone operating at a very different one.</strong></p><p>Almost all the alarming data above comes from enterprise telemetry and from open source maintainers being overwhelmed. It is entirely real if that is your situation. If you are one person shipping something a handful of people will ever run, much of it simply does not apply to you, and you should not be made to feel otherwise.</p><p>Three variables determine where you sit:</p><ul><li><p><strong>blast radius</strong>: what happens when it breaks. Nothing, or angry users and money and PII on the line.</p></li><li><p><strong>how long the code lives</strong>: a throwaway prototype you might rewrite next week, or a codebase you will maintain for years.</p></li><li><p><strong>how many people need to understand it</strong>: just you holding the whole thing in your head, or a team that has to share ownership over time.</p></li></ul><p>Run the same diff through those three and &#8220;good review&#8221; means genuinely different things.</p><p>If you are working solo on a greenfield project with no users, review&#8217;s second job, distributing knowledge across a team, does not exist for you. You are the team. </p><p>The reasonable move is to lean hard on <a href="https://addyosmani.com/blog/verification-bottleneck/">tests and automation</a>, review the parts that genuinely matter, and accept a lighter touch on the rest. Duplication and churn cost far less when the code may not exist in a month and nobody is paged at 3am when it breaks. The catch, and people learn this one painfully, is that it only works if the tests are real. Skipping review without a safety net does not remove the work, it <a href="https://addyosmani.com/blog/intent-debt/">defers it</a> at a higher price, and standards slip when no one is there to push back. No users is permission to defer review. It is not permission to skip verification.</p><p>Then the project gets users. This is the dangerous middle, and the crossing is rarely noticed at the time. Review&#8217;s bug-catching role suddenly matters, because bugs now hurt people, and its knowledge-sharing role switches on, because it is no longer only you. Teams keep their solo-era habits a few months too long, and then there is a postmortem and the Faros numbers stop being a chart and become their own dashboard.</p><p>At the far end is the large organization with an old codebase and many users. Here every alarming figure lands at full strength. A change nobody understood is <a href="https://addyosmani.com/blog/comprehension-debt/">comprehension debt</a> that becomes someone&#8217;s on-call incident. Review is doing several jobs at once, and the volume of agent output quietly breaks all of them. The Faros finding about mature teams is aimed squarely here.</p><p>So the point is not &#8220;enterprises should be cautious and solo developers can relax&#8221;. It is that the purpose of review changes with your position, so the rules have to change with it. Bolt an enterprise&#8217;s locked-down, multi-agent, evidence-required pipeline onto a two-person prototype and you have added friction for no benefit. Run &#8220;tests pass, ship it&#8221; on a payments system and you have built an incident generator with a green checkmark on top. Most bad advice in this space is one position on that spectrum prescribing to another.</p><h2><strong>What review is actually for now</strong></h2><p><strong>Review was built to check an author&#8217;s reasoning and catch bugs + knowledge share with the team. An agent does reason, but that reasoning is usually thrown away rather than attached to the code, so the reviewer has to reconstruct a rationale that never made it into the diff. The good news: that is a tooling problem, and capturing the reasoning makes review dramatically easier.</strong></p><p>This is the part that genuinely changed, and I think it is underappreciated.</p><p>When a human writes code, intent comes along for free. The reasoning, the alternatives weighed and discarded, lived in the author&#8217;s head, and review was you checking that reasoning. Modern agents do reason, often visibly, producing thinking traces and weighing options and explaining themselves as they go. The catch is that this reasoning is usually discarded the moment the diff is produced. It is rarely captured, rarely attached to the PR, and in any case it is the agent&#8217;s reasoning about how to implement the task, not a human&#8217;s judgment about whether it was the right task to begin with. So review shifts from checking reasoning that sits in front of you to reconstructing intent that never got written down, which is harder and slower, and we keep acting surprised that it takes <a href="https://www.faros.ai/blog/ai-acceleration-whiplash-takeaways">441% longer</a>.</p><p>A 2026 paper, <a href="https://arxiv.org/html/2604.16754v1">AI Slop and the Software Commons</a>, analyzed 1,154 posts across 15 Reddit and Hacker News threads where developers discussed &#8220;AI slop&#8221;. One line from a developer caught my eye: reviewing an agent&#8217;s PR made them &#8220;the first human being to ever lay eyes on this code&#8221;.</p><p>That points straight at the fix. <strong>In normal review the author already understood the change and you were checking their work. With an agent PR, nobody has reconstructed the why yet. The reviewer is the first to try. </strong></p><p>As the paper puts it, review &#8220;wasn&#8217;t built to recover missing intent&#8221;. The encouraging part is that missing intent is recoverable: the reasoning existed, we just discarded it. Have the agent state what it was trying to do and what it ruled out, capture that <a href="https://addyosmani.com/blog/intent-debt/">as a decision log</a> on the PR, and a large part of the reconstruction cost disappears. This is a tooling problem, and tooling problems get solved.</p><p>None of which makes &#8220;have the AI review the AI&#8221; a complete answer on its own. A second model with different priors genuinely catches real bugs, and it catches a lot of them, which is why you should run one. What it does not supply is the human judgment about whether this is the right change to build in the first place. That judgment stays with a person, and it happens to be the most interesting part of the job, the part worth keeping.</p><h2><strong>The tools are good, but not always for the reason they advertise</strong></h2><p><strong>The current AI reviewers are genuinely good, and they occasionally don&#8217;t flag the same lines as each other, so the right move is not picking the best one but running two that are built differently.</strong></p><p>The dedicated AI review tools are good now, and I think you should be running at least your main coding agent if not a dedicated review agent on everything, side projects included. </p><p><a href="https://www.coderabbit.ai/">CodeRabbit</a> is the most widely deployed and topped the independent <a href="https://www.coderabbit.ai/blog/coderabbit-tops-martian-code-review-benchmark">Martian benchmark</a> (January to February 2026) on F1, around 49% precision with the best recall in the field.</p><p><a href="https://www.greptile.com/">Greptile</a> trades precision for recall: around an 82% bug-catch rate against CodeRabbit&#8217;s 44% in one benchmark, at the cost of more false positives.</p><p><a href="https://claude.com/blog/code-review">Anthropic&#8217;s Code Review</a> reports under 1% of its findings marked incorrect by their engineers, and the figure I would actually show a manager: it raised their internal rate of PRs receiving a substantive review from 16% to 54%. The long tail of changes that used to get a glance and an approval now gets read by something.</p><p>The most useful result I have seen this year is not from a vendor. An engineer <a href="https://dev.to/_vjk/best-ai-code-reviewer-in-2026-we-ran-4-in-parallel-for-3-weeks-146-prs-679-findings-1c0f">ran four reviewers in parallel</a>, CodeRabbit, Sentry Seer, Greptile and Cursor BugBot, across 146 real PRs and 679 findings over three and a half weeks:</p><blockquote><p>Of 617 distinct flagged locations, <strong>93.4% were caught by exactly one of the four tools</strong>. 6% by two. Almost none by three. <strong>None at all by all four.</strong></p></blockquote><p>The four tools never once flagged the same line. Each was strong at a different class of problem: Greptile with near-zero false positives on correctness and architecture, CodeRabbit with the widest net and one-click fixes, Seer best on production-failure severity. That is the adversarial review argument demonstrated on a real codebase rather than in a paper. Heterogeneity is the whole point. Four copies of one model is a single reviewer with a larger invoice, whereas four genuinely different reviewers surface a set of bugs no single member could find alone, the human included.</p><p>In practice: do not agonize over the single best tool, there isn&#8217;t one. At the high-stakes end, run two with deliberately different characters (the experiment above paired Greptile for everyday correctness with Seer for production-failure severity, with almost no overlap). If you are solo, one good reviewer plus real tests is plenty. And whatever the marketing says, measure it on your own code, because every one of these results was specific to a particular codebase, and yours will be too.</p><h2><strong>Should we just let AI review more of it?</strong></h2><p><strong>The machine is already reviewing more of your code than you are. The only real decision left is whether you do that deliberately, and the amount of human you keep should scale with your blast radius.</strong></p><p>I keep hearing a question that would have been heresy a year ago, now from experienced engineers: should the machine be doing more of the reviewing, perhaps most of it? I no longer think that is a foolish question.</p><p>The uncomfortable part is that AI review works. Under 1% of Anthropic&#8217;s findings are marked wrong, the tools catch bugs humans read straight past, and they do not get tired on the thirtieth PR of the day, which is exactly when a human is least reliable. Meanwhile humans are visibly not keeping up: zero-review merges are up 31% and review times are up triple digits. In a real sense the machine is already reviewing more of the code than we are. The honest framing is not &#8220;should we let AI review more&#8221; but &#8220;AI is already doing it, are we going to be deliberate about that or let it happen by default while pretending humans still read everything&#8221;.</p><p><a href="https://addyosmani.com/blog/loop-engineering/">Loop engineering</a> sharpens this. The premise of a loop is that you stop being the person who prompts the agent and instead build a system that prompts it, and a central part of that system is a judge: an agent that decides whether the work is done before moving on. The reviewer is the next role being designed out of the inner loop, on purpose. We spent a year automating the writing, and the loops are now automating the checking, and the human keeps getting pushed up and out. &#8220;Where does the human stay&#8221; is not a seminar question, it is something you decide every time you wire up a loop, whether or not you realize you are deciding it.</p><p>Where I currently land is: the answer may not be &#8220;a human reads every line&#8221;. That is over. But it is also not &#8220;let the loop review itself and walk away&#8221;. When an agent writes the code, another reviews it and a third judges it, you have a closed loop of models with broadly correlated blind spots, especially when they come from the same family, confidently agreeing in the same places. A confident &#8220;looks good&#8221; with no human anywhere in it is <a href="https://addyosmani.com/blog/cognitive-surrender/">borrowed confidence</a>: the system&#8217;s certainty becomes yours, and nobody actually understood anything. The loop can be both very sure and very wrong, with no human left to tell the difference.</p><p>So the human does not leave; the human moves up a level. You stop reviewing every diff and start owning the parts that do not transfer to a model. Accountability matters.</p><p>The judgment of whether this is even the right change to build, as distinct from whether the code is correct. The high-blast-radius gates where being wrong is expensive. And the awkward one: the behavior nobody specified, because a model reviews the code that exists and rarely flags the requirement that nobody thought to write down, which remains <a href="https://addyosmani.com/blog/comprehension-debt/">a human-shaped gap</a> I do not expect to close soon. </p><p>Human in the loop becomes human on the loop: sampling, spot-checking and auditing the system rather than reading every PR, and spending your limited attention where being wrong would actually hurt.</p><p>This is already how I work on my own projects, including the open-source ones that now see more PRs in a day than I could carefully read in an evening. I point Claude Code or Codex at a batch of incoming PRs and ask for a first pass: a high-level read of what looks safe to merge, what needs more work, and what is genuinely high-risk. I do not auto-merge on the result, and I do not lazy-merge whatever it approves. What it gives me is a way to allocate attention. I can spend a few minutes confirming the changes it considers low-risk, and put real, careful time into the ones it flags as dangerous. The detail that matters is that this is not my old review hour made slightly faster. It is a different shape of hour, and at the volume I now deal with, it is the main reason the queue stays survivable at all.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!svQQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!svQQ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!svQQ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!svQQ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!svQQ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!svQQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg&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;:null,&quot;alt&quot;:&quot;Claude Code and Codex running side by side, each producing a risk-sorted summary of a batch of pull requests on one of my projects.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Claude Code and Codex running side by side, each producing a risk-sorted summary of a batch of pull requests on one of my projects." title="Claude Code and Codex running side by side, each producing a risk-sorted summary of a batch of pull requests on one of my projects." srcset="/__u/substackcdn.com/image/fetch/$s_!svQQ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!svQQ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!svQQ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!svQQ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff13550e1-9671-4bf2-8cf0-80c9e9cc92a5_2400x1350.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>&#128247; <em>Codex and Claude Code giving me a first-pass, risk-sorted read of a batch of PRs. The triage is the help. The merge decision stays mine.</em></p><p>A more extreme version of the same move is Kun Chen, an <a href="https://creatoreconomy.so/p/how-this-ex-meta-l8-engineer-ships-40-prs-a-day-with-ai-kun-chen">ex-Meta L8 engineer now shipping around 40 PRs a day as a solo builder, who has largely stopped reviewing code</a> as told to <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Peter Yang&quot;,&quot;id&quot;:6052627,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2dbd75e-1c5a-48ab-94ef-b24caea63cdf_1024x1024.png&quot;,&quot;uuid&quot;:&quot;05bc43fe-a18e-4a69-90eb-4598109c6a8b&quot;}" data-component-name="MentionToDOM"></span>. It would be easy to dismiss this, except he is an L8, unusually good at the thing he stopped doing, which is what makes it interesting. He runs 20 to 30 agents in parallel and has moved his effort into the plan: he writes detailed plans up front, the agents run for hours against them, and he says plan quality determines how long they can run unattended. That is the move I described above. It is worth being precise about what actually happened, because it is not that he stopped verifying. The intent did not vanish, he wrote it down himself in the plan, so the &#8220;first human to ever lay eyes on this&#8221; problem is half-solved: a human did understand the why, just up front rather than after. And he did not work without a net, he built an automated review gate (he calls it No Mistakes) that checks the code before it merges, and he stays on escalation when an agent gets stuck. The human does the expensive thinking before the code exists and the machine does the line-by-line afterward, which may well be the shape of where this goes.</p><p>But he is a solo builder with no large team and no decade-old system full of landmines beneath him. The exact conditions that make 40 PRs a day without review rational for him are conditions most readers do not have. Copy his workflow onto a team shipping to many users and you reproduce the Faros numbers on your own dashboard. He is not wrong; he is a long way down one specific end of the spectrum.</p><p>Which is the spectrum point again. Solo with no users: letting AI review almost all of it is a defensible 2026 position, and you should not feel guilty about it. Maintaining something large for many people: let the machine handle the first pass, the second pass and the boring 90%, but keep a real human on the load-bearing paths and do not let the loop close completely on anything that can hurt someone. How much human you keep is a dial, and you set it by blast radius, not by guilt.</p><h2><strong>What to actually do</strong></h2><p><strong>Stop reviewing everything to the same depth. Spend scarce human attention only where being wrong is costly, and let cheap deterministic gates and AI reviewers handle the rest.</strong></p><p>The organizing idea is to match review effort to the cost of being wrong, push the cheap deterministic work as early as possible, and reserve human attention for what only humans can do.</p><p><strong>Tier by risk, not by author.</strong> A config change earns a linter and a glance. A revision to your core business logic path earns the full stack: types, tests, two different AI reviewers, a human who owns that system, and a security pass. Do not spend a heavy review on boilerplate, and do not wave through a big change because the tests are green. The <a href="https://addyosmani.com/blog/verification-bottleneck/">layered approach</a> is the same everywhere; what changes is how many layers a given diff has to clear.</p><p><strong>Fast-fail the expensive tail.</strong> The most useful recent finding for teams drowning in agent PRs is <a href="https://arxiv.org/html/2601.00753">Early-Stage Prediction of Review Effort</a> (January 2026), which studied 33,707 agent-authored PRs. Agents are good at small, well-defined changes, around 28% merge almost instantly, but they tend to &#8220;ghost&#8221; the moment they get subjective feedback, abandoning the back-and-forth that review actually is. (A companion 2026 paper found <a href="https://arxiv.org/html/2601.15195">reviewer abandonment accounted for 38% of rejected agent PRs</a>.) The researchers built a &#8220;circuit breaker&#8221; that predicts high-maintenance PRs from cheap signals like file types and patch size before a human looks, and it works well. Triage agent PRs up front, fast-track the trivial ones, and do not let a person sink an hour into a sprawling change the agent will abandon as soon as you push back.</p><p><strong>Raise the bar for what you will even review.</strong> The fix for being buried is not locking down the repository, it is <a href="https://www.builder.io/blog/developers-drowning-in-ai-prs">refusing to review changes that arrive without evidence</a>. Require, before review: a statement of what the change is for, a diff that is not 3,500 lines with no comments, the test output, and proof it was actually run. This is how you stop being the first human to read the code. You push the intent-reconstruction work back onto whoever submitted it, where it is cheap, rather than absorbing it yourself, where it is expensive.</p><p><strong>Keep PRs small, deliberately.</strong> Agent PRs run large, <a href="https://www.faros.ai/blog/ai-acceleration-whiplash-takeaways">51% larger on average</a> in the Faros data, and reviewer engagement is one of the strongest predictors that a PR merges at all. A large unreviewable PR gets <a href="https://addyosmani.com/blog/comprehension-debt/">rejected outright</a> or, worse, rubber-stamped. Instruct your agents to produce small commits. A diff a human can actually read is now a design constraint, not a courtesy.</p><p><strong>Read the test changes more carefully than the code.</strong> This is the agent failure mode to watch. The agent changes behavior, then &#8220;fixes&#8221; the test by rewriting the assertion to match the new, broken behavior. A green check over 200 edited tests means nothing until you have confirmed the edits were correct. Treat any diff that rewrites many tests as a flag and read those first. Mutation testing earns its place here: coverage tells you a line ran, mutation testing tells you whether the test would notice if that line were wrong.</p><p><strong>Treat CI as the wall that does not move.</strong> Watch for the patterns <a href="https://github.blog/ai-and-ml/generative-ai/agent-pull-requests-are-everywhere-heres-how-to-review-them/">GitHub now warns reviewers about</a>: removed tests, skipped lint, lowered coverage thresholds, a duplicated helper that already exists elsewhere, and untrusted input flowing into a prompt. That last one deserves emphasis, because agent-built features are a fresh source of <a href="https://simonwillison.net/series/prompt-injection/">prompt injection</a>: if a change pipes user-controlled text into an LLM call without thinking about what that text can instruct the model to do, the vulnerability is not visible in the diff, it is latent in the data that will arrive later. Agents will also weaken CI to make themselves pass, not maliciously, just gradient descent finding the cheapest path to green. Deterministic gates are the one part of the pipeline that cannot be talked out of their verdict by a confident paragraph, so keep them strict.</p><p><strong>A human owns the merge.</strong> A model cannot be paged and cannot be held responsible for what it shipped, so whoever clicks merge owns it. When an AI review says &#8220;looks good&#8221; in a calm, confident voice, it is handing you <a href="https://addyosmani.com/blog/cognitive-surrender/">confidence it has not necessarily earned</a>. Treat every AI review as a sensor, not a verdict: data, not a decision.</p><p>If you are solo with no users, the tiering, the test-change discipline and CI are most of what you need; the rest is overhead until people show up. If you are the large organization, all of it is the baseline, and the triage and intake bar are the difference between a review process that scales and one that quietly collapses.</p><h2><strong>What this means if you run a team</strong></h2><p><strong>The bottleneck is no longer how fast you write code, it is how fast a trusted human can be confident in a review. Cutting the people who provide that confidence because &#8220;AI made us faster&#8221; simply converts the saving into future incidents.</strong></p><p>The binding constraint on shipping is no longer how fast you can write code. It is how fast a trusted human can be confident a change is correct. Any plan that treats generation as the bottleneck and review as free will quietly stall, with the velocity dashboard staying green the whole way.</p><p>The Faros report is direct about this: QA and review work rises even as output rises, so reducing engineering headcount because &#8220;AI made us faster&#8221; is dangerous unless you have closed the review gap first. The senior-engineer tax, review time up by triple digits, falls hardest on the people you can least afford to bottleneck, and it is invisible to any metric that only counts merged PRs.</p><p>Open source maintainers hit this wall first and hardest. The <a href="https://arxiv.org/html/2604.16754v1">steady stream of plausible but hollow contributions</a> costs real triage time even when it is well-intentioned, and that is the canary. Companies are next. The ones handling it well treat review capacity as a real resource to be measured, protected and spent deliberately, not as slack that AI has freed up.</p><h2><strong>Writing got cheap, understanding didn&#8217;t</strong></h2><p><strong>Code review did not become less important when agents arrived. It became the central activity. Writing code is increasingly solved and getting cheaper by the month; the durable advantage is the system that lets you trust what was written.</strong></p><p>Do not take the one-size answer in either direction. If you are solo with no users, the enterprise horror stories about churn and duplication are a future risk, not today&#8217;s fire, so lean on your tests, review what matters, and stay honest that the deferred work is still owed. If you maintain something large for many people, every alarming number here is about you, and the only thing that holds is a tiered, evidence-required, deliberately heterogeneous review process with a human owning the merge.</p><p>What is constant across the whole spectrum is the underlying economics. We made writing cheap, and understanding stayed exactly as expensive as it has always been. The teams that do well over the next few years will not be the ones generating the most code, they will be the ones who built a review system they can actually trust, and who never confuse &#8220;the tests passed&#8221; with &#8220;a person understands what this does and why&#8221;.</p><p>Or, as <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Simon Willison&quot;,&quot;id&quot;:5753967,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5a30d45c-fcba-407a-bebf-96f51a8944a4_48x48.jpeg&quot;,&quot;uuid&quot;:&quot;48311855-ce0a-4a87-95ba-4fc82caa3434&quot;}" data-component-name="MentionToDOM"></span> keeps putting it, <a href="https://simonwillison.net/2025/Dec/18/code-proven-to-work/">your job is to deliver code you have proven to work</a>. Agents have not changed that. They have made the proving the center of the job rather than an afterthought, and I think that is a good trade. </p><p><strong>Understanding a system well enough to stand behind it is the most durable and most interesting skill in software, and there has never been a better time to get extraordinarily good at it.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Ya4s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Ya4s!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Ya4s!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Ya4s!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Ya4s!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Ya4s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55854,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/202172785?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Ya4s!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Ya4s!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Ya4s!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Ya4s!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F762e6720-3a1f-45a0-9a81-8033975a97f4_1376x768.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Loop Engineering]]></title><description><![CDATA[Loop engineering is replacing yourself as the person who prompts the agent.]]></description><link>https://addyo.substack.com/p/loop-engineering</link><guid isPermaLink="false">https://addyo.substack.com/p/loop-engineering</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Mon, 08 Jun 2026 14:31:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ntYX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Loop engineering is replacing yourself as the person who prompts the agent. You design the system that does it instead.</strong> <strong>A loop here can be thought of a recursive goal where you define a purpose and the AI iterates until complete. </strong>It&#8217;s roughly five building blocks and Claude Code and Codex both have all five now. </p><p>I believe this <em>may</em> be the future of how we work with coding agents. However, its still early, I&#8217;m skeptical and you absolutely <em>have</em> to be careful about <strong>token costs</strong> (usage patterns can vary wildly if you are token rich or poor), so I want to unpack what it is and what it means.</p><div><hr></div><p>Peter Steinberger recently <a href="https://x.com/steipete/status/2063697162748260627">said</a>: &#8220;You shouldn&#8217;t be prompting coding agents anymore. You should be designing loops that prompt your agents.&#8221; Similarly, Boris Cherny, head of Claude Code at Anthropic, <a href="https://x.com/rohanpaul_ai/status/2063289804708835412">said</a> &#8220;I don&#8217;t prompt Claude anymore. I have loops running that prompt Claude and figuring out what to do. My job is to write loops&#8221;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!D7tC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!D7tC!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png 424w, /__u/substackcdn.com/image/fetch/$s_!D7tC!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png 848w, /__u/substackcdn.com/image/fetch/$s_!D7tC!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png 1272w, /__u/substackcdn.com/image/fetch/$s_!D7tC!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!D7tC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png" width="1320" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1320,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:118058,&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://addyo.substack.com/i/201079702?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!D7tC!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png 424w, /__u/substackcdn.com/image/fetch/$s_!D7tC!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png 848w, /__u/substackcdn.com/image/fetch/$s_!D7tC!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.png 1272w, /__u/substackcdn.com/image/fetch/$s_!D7tC!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2944249f-df8a-4a26-a170-dc27afe21db4_1320x596.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"><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"><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"><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"><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>Okay, so what does any of that mean? </p><p>For like two years the way you got something out of a coding agent was you wrote a good prompt and shared enough context. You type a thing, you read what came back, you type the next thing. The agent is a tool and you are holding it the entire time, one turn after the other. That part is kind of over, or at least some think it&#8217;s going to be.</p><p>Now you build a small system that finds the work, hands it out, checks it, writes down what is done and then decides the next thing, and you let that system poke the agents instead of you. I wrote before about the cousin of this, <a href="https://addyosmani.com/blog/agent-harness-engineering/">agent harness engineering</a>, which is making the environment one single agent runs inside and the <a href="https://addyosmani.com/blog/factory-model/">factory model</a> - the system that builds the software. Loop engineering sits one floor above the harness. The harness but it runs on a timer, it spawns little helpers, and it feeds itself.</p><p>The thing that surprised me is this is not really a tool thing anymore. A year ago if you wanted a loop you wrote a pile of bash and you maintained that pile forever and it was yours and only yours. Now the pieces just ship inside the products. Steinberger&#8217;s list maps almost exactly onto the Codex app, and then almost the same onto Claude Code. And once you notice the shape is the same you stop arguing about which tool, you just design a loop that still works no matter which one you happen to be sitting in.</p><h2><strong>The five pieces, and then notes</strong></h2><p>A <a href="https://x.com/reach_vb/status/2063713960495558940">loop</a> needs five things and then one place to remember stuff. Let me list it first and then map it.</p><ol><li><p><strong>Automations</strong> that go off on a schedule and do discovery and triage by themselves.</p></li><li><p><strong>Worktrees</strong> so two agents working in parallel dont step on each other.</p></li><li><p><strong>Skills</strong> to write down the project knowledge the agent would otherwise just guess.</p></li><li><p><strong>Plugins and connectors</strong> to plug the agent into the tools you already use.</p></li><li><p><strong>Sub-agents</strong> so one of them has the idea and a different one checks it.</p></li></ol><p>Then the sixth thing, the memory. A markdown file, or a Linear board, anything that lives outside the single conversation and holds what&#8217;s done and what is next. Sounds too dumb to matter. But it&#8217;s the same trick every long running agent depends on and I went into it in <a href="https://addyosmani.com/blog/long-running-agents/">long-running agents</a>, the model forgets everything between runs so the memory has to be on disk and not in the context. The agent forgets, the repo doesnt.</p><p>Both products have all five now.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Hj5a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Hj5a!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png 424w, /__u/substackcdn.com/image/fetch/$s_!Hj5a!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png 848w, /__u/substackcdn.com/image/fetch/$s_!Hj5a!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Hj5a!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Hj5a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png" width="1456" height="1002" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1002,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:317300,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/201079702?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Hj5a!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png 424w, /__u/substackcdn.com/image/fetch/$s_!Hj5a!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png 848w, /__u/substackcdn.com/image/fetch/$s_!Hj5a!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Hj5a!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2058eaaa-382e-4f99-a8e9-2cb8261dce4d_2026x1394.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>The names are a bit different here and there but the capability is the same thing. Let me go one by one because honestly the details are where a loop either holds together or quietly leaks everywhere.</p><h2><strong>Automations, this is the heartbeat</strong></h2><p>Automations are what make a loop an actual loop and not just one run you did once. In the Codex app you make one in the Automations tab and you pick the project, the prompt it will run, how often, and if it runs on your local checkout or on a background worktree. The runs that find something go to a Triage inbox, and the runs that find nothing just archive themselves which is nice. OpenAI uses them internally for boring stuff like daily issue triage, summarizing CI failures, writing commit briefings, hunting bugs somebody added last week. And an automation can call a skill, so you keep the recurring thing maintainable, you fire <code>$skill-name</code> instead of pasting a giant wall of instructions into a schedule that nobody will ever update.</p><p>Claude Code gets to the same place but through scheduling and hooks. You can run a prompt or a command on a interval with <code>/loop</code>, you can schedule a cron task, you can fire shell commands at certain points in the agent lifecycle with hooks, or you push the whole thing to GitHub Actions if you want it to keep running after you close the laptop. Same idea exactly, you define an autonomous task, you give it a cadence, and the findings come to you so you are not the one going around checking.</p><p>There is a second in-session primitive worth knowing, and it's the one closer to what this whole post is about. <code>/loop</code> re-runs on a cadence. <code>/goal</code> keeps going until a condition you wrote is actually true, and after every turn a separate small model checks whether you are done, so the agent that wrote the code isnt the one grading it. You give it something like "all tests in test/auth pass and lint is clean" and walk away. Codex has the same thing, also called <code>/goal</code>, it keeps working across turns until a verifiable stopping condition holds, with pause and resume and clear. Same primitive, both tools, wich is kind of the pattern for this whole article.</p><p>So this is the part that surfaces the work. The rest of the loop is what acts on it.</p><h2><strong>Worktrees so parallel doesn&#8217;t turn into chaos</strong></h2><p>The second you run more than one agent the files start colliding, that becomes the failure. Two agents writing the same file is the exact same headache as two engineers committing to the same lines and nobody talked to each other first. A git worktree fixes it, its a separate working directory on its own branch sharing the same repo history, so one agent&#8217;s edits literally can not touch the other one&#8217;s checkout.</p><p>Codex builds the worktree support right in so several threads hit the same repo at once and dont bump into each other. Claude Code gives you the same isolation with <code>git worktree</code>, a <code>--worktree</code> flag to open a session in its own checkout, and a <code>isolation: worktree</code> setting you stick on a subagent so each helper gets a fresh checkout that cleans itself up after. I wrote about the human side of all this in <a href="https://addyosmani.com/blog/orchestration-tax/">the orchestration tax</a>, the worktrees take away the mechanical collision but YOU are still the ceiling, your review bandwith decides how many you can actually run, not the tool.</p><h2><strong>Skills, so you stop explaining your project every single time</strong></h2><p>A skill is how you stop re-explaining the same project context every session like a goldfish. Both tools use the same format, a folder with a <code>SKILL.md</code> inside holding instructions and metadata, and then optional scripts, references, assets. Codex runs a skill when you call it with <code>$</code> or <code>/skills</code>, or by itself when your task matches the skill description, which is the reason a tight boring description beats a clever one. Claude Code does it the same way and I wrote the pattern up in <a href="https://addyosmani.com/blog/agent-skills/">agent skills</a>.</p><p>Skills are also where intent stops costing you over and over. I argued in <a href="https://addyosmani.com/blog/intent-debt/">the intent debt</a> that an agent starts every session cold and it will fill any hole in your intent with a confident guess. A skill is that intent written down on the outside, the conventions, the build steps, the &#8220;we dont do it like this because of that one incident&#8221;, written one time where the agent reads it every run. Without skills the loop re-derives your whole project from zero every cycle, with skills it kind of compounds.</p><p>One thing to keep straight, the skill is the authoring format and a plugin is how you ship it. When you want to share a skill across repos or bundle a few together you package them as a plugin. True in Codex, true in Claude Code.</p><h2><strong>Plugins and connectors, the loop touches your real tools</strong></h2><p>A loop that can only see the filesystem is a tiny loop. Connectors, which are built on MCP, let the agent read your issue tracker, query a database, hit a staging api, drop a message in Slack. Codex and Claude Code both speak MCP so the connector you wrote for one usually just works in the other. And plugins bundle connectors and skills together so your teammate installs your setup in one go instead of rebuilding the whole thing from memory.</p><p>This is the difference between an agent that says &#8220;here is the fix&#8221; and a loop that opens the PR, links the Linear ticket and pings the channel once CI is green by itself. The connectors are the reason the loop can act inside your actual environment instead of just telling you what it would do if it could.</p><h2><strong>Sub-agents, keep the maker away from the checker</strong></h2><p>The most useful structural thing in a loop, by far, is splitting the one who writes from the one who checks. The model that wrote the code is way too nice grading its own homework. A second agent with different instructions and sometimes a different model catches the stuff the first one talked itself into.</p><p>Codex only spawns subagents when you ask, runs them at the same time and then folds the results back into one answer. You define your own agents as TOML files in <code>.codex/agents/</code>, each with a name, a description, instructions and optional model and reasoning effort, so your security reviewer can be a strong model on high effort while your explorer is some fast read-only thing. Claude Code does the same with subagents in <code>.claude/agents/</code> and agent teams that pass work between them. The usual split in both is one agent explores, one implements, one verifies against the spec.</p><p>I made this case twice already, once as <a href="https://addyosmani.com/blog/code-agent-orchestra/">the code agent orchestra</a> and once as <a href="https://addyosmani.com/blog/adversarial-code-review/">adversarial code review</a>. The reason it matters specifically inside a loop is the loop runs while you are not watching, so a verifier you actually trust is the only reason you can walk away. Subagents do burn more tokens since each one does its own model and tool work, so spend them where a second opinion is worth paying for. This is also basically what Claude Code&#8217;s /goal does under the hood, a fresh model decides if the loop is done instead of the one that did the work, the maker and checker split applied to the stop condition itself.</p><h2><strong>What one loop looks like</strong></h2><p>Stick it together and a single thread turns into a little control panel. Here is one shape I keep using.</p><p>An automation runs every morning on the repo. Its prompt calls a triage skill that reads yesterdays CI failures, the open issues, the recent commits, and writes the findings into a markdown file or a Linear board. For each finding that is worth doing the thread opens an isolated worktree and sends a sub-agent to draft the fix, and a second sub-agent reviews that draft against the project skills and the existing tests.</p><p>Connectors let the loop open the PR and update the ticket. Anything the loop can not handle lands in the triage inbox for me. The state file is the spine of the whole thing, it remembers what got tried, what passed, what is still open, so tomorrow morning the run picks up where today stopped.</p><p>And look at what you actually did there. You designed it one time. You did not prompt any of those steps. Thats Steinberger&#8217;s whole point made real, and its the same loop in Codex or in Claude Code because the pieces are the same pieces.</p><h2><strong>What the loop still does not do for you</strong></h2><p>The loop changes the work, it does not delete you from it. And three problems actually get sharper as the loop gets better, not easier.</p><p>Verification is still on you. A loop running unattended is also a loop making mistakes unattended. The whole reason you split the verifier sub-agent from the maker is to make the loop&#8217;s &#8220;its done&#8221; mean something, and even then &#8220;done&#8221; is a claim and not a proof. I keep saying the same line from <a href="https://addyosmani.com/blog/code-review-ai/">code review in the age of AI</a>, your job is to ship code you confirmed works.</p><p>Your understanding still rots if you allow it. The faster the loop ships code you did not write, the bigger the gap between what exists and what you actually get. Thats <a href="https://addyosmani.com/blog/comprehension-debt/">comprehension debt</a> and a smooth loop just makes it grow faster unless you read what the loop made.</p><p>And the comfortable posture is the dangerous one. When the loop runs itself its very tempting to stop having an opinion and just take whatever it gives back. I called that <a href="https://addyosmani.com/blog/cognitive-surrender/">cognitive surrender</a>. Designing the loop is the cure when you do it with judgement and the accelerant when you do it to avoid thinking, same action, opposite result.</p><h2><strong>Build the loop. Stay the engineer.</strong></h2><p>I think this is a preview of how our work is going to evolve. That said, If I weren&#8217;t reviewing the code myself or if I relied entirely on automated loops to fix it my product&#8217;s quality would suffer. I&#8217;d likely end up stuck in a downward spiral, continuously digging myself into a deeper hole.</p><p>That said, go ahead and set up your loops, but don&#8217;t forget that prompting your agents directly is also effective. It&#8217;s all about finding the right balance.</p><p>Loops can also result in different outcomes depending on you. Two people can build the exact same loop and get completely opposite results. One uses it to move faster on work they understand deeply. The other uses it to avoid understanding the work at all. The loop doesn&#8217;t know the difference. You do.</p><p>That&#8217;s what makes loop design harder than prompt engineering, not easier. Cherny&#8217;s point isn&#8217;t that the work got easier. It&#8217;s that the leverage point moved. </p><p>Build the loop. But build it like someone who intends to stay the engineer, not just the person who presses go.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ntYX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ntYX!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ntYX!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ntYX!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ntYX!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ntYX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg" width="1456" height="812" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76297,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/201079702?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ntYX!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!ntYX!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!ntYX!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!ntYX!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b297081-dbed-48a8-9fa2-68b17b34eb67_2754x1536.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Long-running Agents]]></title><description><![CDATA[A long-running AI agent can keep making progress over hours, days, or weeks.]]></description><link>https://addyo.substack.com/p/long-running-agents</link><guid isPermaLink="false">https://addyo.substack.com/p/long-running-agents</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Thu, 30 Apr 2026 14:30:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FqTC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>A long-running AI agent can keep making progress over hours, days, or weeks. It can do this across many context windows and sandboxes, recover from failure, leave structured artifacts behind, and resume where it left off.</strong></p></blockquote><p>For two years the dominant image of an &#8220;AI agent&#8221; has been a chat window with a clever loop in it. You type a goal, the agent calls some tools, you watch tokens stream by, you stop watching when the work runs out of patience or the context window fills up. That paradigm got us a long way, but it has a ceiling. The model forgets. It declares &#8220;task complete&#8221; when it isn&#8217;t. It re-introduces a bug it fixed nine turns ago. The whole thing is structured around a single sitting.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4O50!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4O50!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!4O50!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!4O50!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!4O50!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4O50!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg" width="1375" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1375,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Long-running AI agents&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Long-running AI agents" title="Long-running AI agents" srcset="/__u/substackcdn.com/image/fetch/$s_!4O50!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!4O50!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!4O50!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!4O50!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda5ccdb-7770-425c-9e92-c72938025a32_1375x768.jpeg 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"><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"><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"><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"><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>Long-running agents are what comes next. The idea is easy to state: an agent that keeps making forward progress on a goal across many sessions and many sandboxes, possibly many days or weeks, while leaving the workspace clean enough that the next session can pick up where the last one left off. The engineering is harder. You have to solve for persistence, recovery, and verification in a way that doesn&#8217;t just paper over the cracks. You have to build a state layer that lives outside the model&#8217;s context window, and you have to design the handoff between sessions so the agent doesn&#8217;t lose its mind when it wakes up and finds itself in a different sandbox with a different context window.</p><p>This post is my attempt to lay out what&#8217;s changed, who&#8217;s pushing on it, and how an engineer can use long-running agents today without writing the whole thing from scratch.</p><div><hr></div><h2><strong>What &#8220;long-running&#8221; actually means</strong></h2><p>&#8220;Long-running&#8221; gets used to mean at least three different things in practice, and it helps to keep them separate.</p><p><strong>Long-horizon reasoning.</strong> The agent has to plan and execute over many dependent steps. This is mostly a model-quality story: coherence, planning, the ability to recover from a wrong turn ten steps ago. METR has been tracking this with their <em>time horizon</em> metric, which estimates how long a task a frontier model can complete with 50% reliability. The headline finding is that the metric has been <a href="https://metr.org/time-horizons/">doubling roughly every seven months</a> since 2019, and their <a href="https://metr.org/blog/2026-1-29-time-horizon-1-1/">TH1.1 update</a> earlier this year doubled the count of 8-hour-plus tasks in the eval set. <strong>If that curve holds, frontier agents complete tasks at the day scale by 2028 and the year scale by 2034.</strong></p><p><strong>Long-running execution.</strong> The agent&#8217;s <em>process</em> runs for hours or days. Maybe it&#8217;s a coding job, maybe it&#8217;s a research sweep, maybe it&#8217;s a 24/7 monitoring service. The model might be invoked thousands of times across the run. This is mostly a <em>harness</em> story, and it&#8217;s the one this post is mostly about.</p><p><strong>Persistent agency.</strong> The agent has an identity that outlives any single task. It accumulates memory, learns user preferences, and is always available. This is the <a href="https://docs.cloud.google.com/agent-builder/agent-engine/memory-bank/overview">Memory Bank</a> flavor of long-running.</p><p>In practice the three blur together. A real production agent does long-horizon reasoning <em>inside</em> a long-running execution <em>backed by</em> persistent agency. But the engineering problems are different in each, and so are the products that solve them.</p><div><hr></div><h2><strong>Why this matters</strong></h2><p>There are two reasons I believe this work matters a lot right now.</p><p>The first is a phase change in what&#8217;s economically feasible to delegate. An agent that runs for ten minutes can answer a question, summarize a doc, fix a small bug. An agent that runs for ten hours can own an entire feature, finish a migration that was on the backlog for six quarters, or do the kind of overnight research sweep that used to require a junior analyst. One of Anthropic&#8217;s <a href="https://www.anthropic.com/news/claude-sonnet-4-5">Claude Sonnet announcements</a> put concrete numbers on this last fall: 30+ hours of autonomous coding in internal tests, including <a href="https://venturebeat.com/ai/anthropics-new-claude-can-code-for-30-hours-think-of-it-as-your-ai-coworker">one run</a> that produced an 11,000-line Slack-style app. <strong>That&#8217;s already past the threshold where the answer to &#8220;should I delegate this?&#8221; is no longer obvious.</strong></p><p>The second is that persistence changes what the agent <em>is</em>. A stateless agent answers your question and disappears. A long-running one accumulates context: which competitor moved which way last week, which test flaked twice on Tuesday, what you usually mean by &#8220;the dashboard.&#8221; Anthropic&#8217;s <a href="https://www.anthropic.com/research/project-vend-1">Project Vend</a> was the most public early demonstration of this. They had a Claude instance run an actual office vending business for a month, managing inventory, setting prices, talking to suppliers. It failed in informative ways, and <a href="https://www.anthropic.com/research/project-vend-2">the second phase</a> ran much better, but the point wasn&#8217;t profitability. The point was watching what kinds of weird coherence problems show up when an agent has to maintain identity across weeks instead of turns.</p><p>Those are the same problems every team building production agents now hits.</p><div><hr></div><h2><strong>The three walls every long-running agent hits</strong></h2><p>Three walls show up in basically every write-up I&#8217;ve read this year.</p><p><strong>Finite context.</strong> Even a 1M-token window fills. And <a href="https://addyosmani.com/blog/agent-harness-engineering/">context rot</a>, the steady degradation of model performance as the window gets full, kicks in well before the hard limit. A 24-hour run is not going to fit in any context window the field has on its roadmap. Something has to give.</p><p><strong>No persistent state.</strong> A new session starts blank. Anthropic&#8217;s framing in their <a href="https://www.anthropic.com/research/long-running-Claude">scientific computing post</a> is the cleanest version I&#8217;ve seen: <em>&#8220;imagine a software project staffed by engineers working in shifts, where each new engineer arrives with no memory of what happened on the previous shift.&#8221;</em> Without an explicit persistence story, every shift change is a productivity disaster.</p><p><strong>No self-verification.</strong> Models reliably skew positive when they grade their own work. Asked &#8220;are you done?&#8221; they answer &#8220;yes&#8221; more often than they should. Without a separate signal that the work meets a bar, you get the agent that ships at 30% complete with full confidence.</p><p>Long-running agent designs are mostly answers to these three problems. <strong>The major labs have converged on similar shapes of answer, but with very different surface area.</strong></p><div><hr></div><h2><strong>The Ralph loop: one of the simpler practitioner versions of long-running agents</strong></h2><p>The <strong>Ralph loop</strong> (sometimes called the Ralph Wiggum technique) is one of &#8220;simpler&#8221; practitioner version of long-running agents, popularized by <a href="https://ghuntley.com/ralph/">Geoffrey Huntley</a> and <a href="https://github.com/snarktank/ralph">Ryan Carson</a>. The reference implementation is <a href="https://ghuntley.com/ralph/">literally a bash script</a> that loops:</p><ol><li><p>Pick the next unfinished task from a list (<code>prd.json</code> or equivalent).</p></li><li><p>Build a prompt with the task, the relevant context, and any persistent notes.</p></li><li><p>Call the agent.</p></li><li><p>Run tests or other checks.</p></li><li><p>Append what happened to <code>progress.txt</code>.</p></li><li><p>Update the task list (done, failed, blocked).</p></li><li><p>Go back to step 1.</p></li></ol><p>The reason it works is the same reason any of the harnesses below work: state lives outside the agent&#8217;s context. <code>prd.json</code> is the plan, <code>progress.txt</code> is the lab notes, <code>AGENTS.md</code> is the rolling rulebook. <strong>The agent itself is amnesiac, but the filesystem isn&#8217;t.</strong> Each iteration starts fresh and reads enough state from disk to keep going. Carson&#8217;s <a href="https://github.com/snarktank/compound-product">Compound Product</a> extends the idea by chaining multiple loops (an analysis loop that reads daily reports, a planning loop that emits a PRD, an execution loop that writes the code), which is roughly the open-source version of the planner-generator-evaluator triad Anthropic landed on independently.</p><p>I went deeper on all of this in <a href="https://addyosmani.com/blog/self-improving-agents/">Self-improving agents</a>: task list structure, progress files, QA gates, monitoring, the failure modes you&#8217;ll actually hit. The short version is that you can build a working long-running agent in an evening with a bash script and a JSON file. Most of what Google and Anthropic have productized is the work of making this pattern recoverable, secure, and observable at scale.</p><p>The big-lab stories below are different ways of paying for that production-readiness.</p><div><hr></div><h2><strong>Anthropic: harnesses, then the brain/hands/session split</strong></h2><p>Anthropic has been the most public about the engineering. Two posts are worth reading end-to-end.</p><p>The first is <a href="https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents">&#8220;Effective harnesses for long-running agents&#8221;</a>, which lays out a two-agent harness for autonomous full-stack development. An <strong>initializer agent</strong> runs once at the start of a project to set up the environment, expand the prompt into a structured <code>feature-list.json</code>, and write an <code>init.sh</code> that future sessions will run on boot. A <strong>coding agent</strong> is then woken up over and over, each session asked to make incremental progress on one feature, run tests, leave a <code>claude-progress.txt</code> note, and commit. A test ratchet (<em>&#8220;it is unacceptable to remove or edit tests because this could lead to missing or buggy functionality&#8221;</em>) sits in the prompt to stop the very common failure of an agent deleting failing tests to &#8220;make them pass.&#8221; <a href="https://www.infoq.com/news/2026/04/anthropic-three-agent-harness-ai/">InfoQ&#8217;s writeup</a> extends this into a planner, generator, and evaluator triad, on the same logic that separating generation from evaluation matters because models grade their own work too generously.</p><p>The second is <a href="https://www.anthropic.com/engineering/managed-agents">&#8220;Scaling Managed Agents: Decoupling the brain from the hands&#8221;</a>, the architectural post behind <a href="https://platform.claude.com/docs/en/managed-agents/overview">Claude Managed Agents</a> (Anthropic&#8217;s hosted runtime, launched in early April). The argument is that an agent has three components that should be independently replaceable. The Brain is the model and the harness loop that calls it. The Hands are sandboxed, ephemeral execution environments where tools actually run. The Session is an append-only event log of every thought, tool call, and observation.</p><p>This sounds abstract and it isn&#8217;t. Anthropic&#8217;s framing: <em>&#8220;every component in a harness encodes an assumption about what the model can&#8217;t do on its own.&#8221;</em> When you couple them, an assumption that goes stale (e.g., the model used to need an explicit planner and now plans natively) means the whole system has to change at once. When you decouple them, the harness becomes stateless, sandboxes become <em>cattle, not pets</em>, and a brain crash doesn&#8217;t lose the run. A fresh container calls <code>wake(sessionId)</code> and reconstitutes the state from the log. They reported <a href="https://www.anthropic.com/engineering/managed-agents">time-to-first-token dropped ~60% at p50 and over 90% at p95</a> just from being able to start inference before the sandbox is ready.</p><p><strong>The session-as-event-log idea is the part most teams underappreciate.</strong> It is what makes a long-running agent recoverable. Without it, a container failure is a session failure and you&#8217;re debugging into a stale snapshot. With it, the agent&#8217;s memory is a queryable artifact that lives outside whatever process happens to be running at the moment.</p><p>For the scientific computing crowd, Anthropic&#8217;s <a href="https://www.anthropic.com/research/long-running-Claude">long-running Claude post</a> reduces all of this to a simpler stack: <code>CLAUDE.md</code> as a living plan the agent edits as it learns, <code>CHANGELOG.md</code> as portable lab notes, <code>tmux</code> plus <code>SLURM</code> plus <code>git</code> as the execution and coordination layer, and the <strong>Ralph loop</strong>, a <code>for</code> loop that kicks the agent back into context whenever it claims completion and asks if it&#8217;s <em>really</em> done. Their flagship case study is a Boltzmann solver Claude Opus built over a few days that reached sub-percent agreement with a reference CLASS implementation. Months-to-years of researcher time, compressed.</p><p>Same patterns across all three posts: an explicit plan file, an explicit progress file, structured handoffs between sessions, separate generation from evaluation, and a loop that refuses to let the agent stop early.</p><div><hr></div><h2><strong>Cursor: planners, workers, judges</strong></h2><p><a href="https://cursor.com/blog/scaling-agents">Cursor&#8217;s &#8220;Scaling long-running autonomous coding&#8221;</a> is the other essential read this year. They walked into walls that Anthropic mostly papered over.</p><p>Their first attempt was a flat coordination model: equal-status agents writing to shared files with locks. It became a bottleneck and made the agents risk-averse, churning rather than committing. Their second attempt swapped locks for optimistic concurrency control, which removed the bottleneck but didn&#8217;t fix the coordination problem. The third design is what&#8217;s running in production now and what they describe as solving most of the problem:</p><ul><li><p><strong>Planners</strong> continuously explore the codebase and emit tasks. They can recursively spawn sub-planners.</p></li><li><p><strong>Workers</strong> are focused executors. They don&#8217;t coordinate with each other and they don&#8217;t worry about the big picture.</p></li><li><p><strong>Judges</strong> decide when an iteration is finished and when to restart.</p></li></ul><p>Two things stand out from the post. One: <em>&#8220;a surprising amount of the system&#8217;s behavior comes down to how we prompt the agents&#8221;</em> more than the harness or the model. Two: different models slot into different roles. Their reported finding is that a GPT model was better than Opus for <em>extended autonomous work</em> specifically because Opus tended to stop early and take shortcuts. <strong>Same task, different role, different model.</strong> The matching is becoming part of the design surface.</p><p>This pairs with <a href="https://cursor.com/blog/composer">Composer 2</a> (their proprietary frontier coding model that ships in <a href="https://cursor.com/changelog/2-0">Cursor 3</a>) and their <strong>background cloud agents</strong>: long-running tasks that run on Anysphere&#8217;s cloud infrastructure rather than your laptop. Eight-hour refactors and codebase-wide migrations survive a closed lid. You can start a task locally, hit <em>run in cloud</em> when you realize it&#8217;ll take 30 minutes, and re-attach later from your phone. Each agent runs in an isolated git worktree and merges back via PR. The handoff between local and remote is the part most teams haven&#8217;t figured out yet, and Cursor&#8217;s bet is that it has to be its own product surface.</p><p>The shape ends up close to Anthropic&#8217;s: roles are split, sessions are durable, judges sit beside the worker, and a long task runs in a cloud sandbox with git as the coordination substrate.</p><div><hr></div><h2><strong>Google: long-running agents on the Agent Platform</strong></h2><p>Google&#8217;s announcement at <a href="https://cloud.google.com/blog/products/ai-machine-learning/introducing-gemini-enterprise-agent-platform">Cloud Next &#8216;26</a> two weeks ago folded Vertex AI into the <strong>Gemini Enterprise Agent Platform</strong> and turned long-running agents into a named product, with named SLAs.</p><p>The pieces that matter for this post:</p><ul><li><p><strong>Agent Runtime</strong> supports agents that <em>&#8220;run autonomously for days at a time&#8221;</em> with sub-second cold starts and on-demand sandbox provisioning. The launch post&#8217;s example use case is a sales prospecting sequence that takes a week to play out, which is roughly the right shape for it.</p></li><li><p><strong>Agent Sessions</strong> persist conversation and event history. You can pin them to a custom session ID that maps to your own CRM or DB record, so the agent&#8217;s state lives next to the business state instead of in a separate AI silo.</p></li><li><p><strong><a href="https://docs.cloud.google.com/gemini-enterprise-agent-platform/scale/memory-bank">Agent Memory Bank</a></strong> is the persistent long-term memory layer, generally available as of Next &#8216;26. It curates memories from sessions, scopes them to a user identity, and exposes a search API so the next agent invocation can pull what&#8217;s relevant. Payhawk reported that auto-submitting expenses through a Memory-Bank-backed agent cut submission time by over 50%.</p></li><li><p><strong>Agent Sandbox</strong> handles hardened code execution.</p></li><li><p><strong>Agent-to-Agent Orchestration</strong>, <strong>Agent Registry</strong>, <strong>Agent Identity</strong>, <strong>Agent Gateway</strong>, <strong>Agent Observability</strong>, and <strong>Agent Simulation</strong> cover basically every operational concern you&#8217;d otherwise build by hand for a production fleet, including the cryptographic-identity-and-audit-log story enterprises actually need to ship.</p></li></ul><p>Architecturally this is the same brain/hands/session split Anthropic described, just productized at platform scale and bundled with <a href="https://google.github.io/adk-docs/">ADK</a> (the code-first dev kit) and Agent Studio (the visual one). If you&#8217;re building inside Google Cloud, you don&#8217;t have to design a session log or a memory store from scratch anymore. You wire an ADK agent into Memory Bank and Sessions, deploy onto Agent Runtime, and the persistence question is answered.</p><p>Notice how much this looks like the pattern Anthropic and Cursor describe, just unbundled into named services with SLAs. Three years ago you&#8217;d have built all of this yourself. <strong>Now you pick which version of &#8220;decoupled brain, hands, and session&#8221; you want to rent.</strong></p><div><hr></div><h2><strong>Five patterns for long-running agents in production</strong></h2><p>Shubham Saboo and I <a href="https://x.com/GoogleCloudTech/status/2046989964077146490">wrote up</a> five design patterns we&#8217;ve seen separate working long-running agents from demos. They aren&#8217;t Google-specific, but they map cleanly onto the primitives Agent Runtime now exposes, so it&#8217;s worth walking through them here in shortened form.</p><p><strong>Checkpoint-and-resume.</strong> The most common multi-day failure is context loss. An agent processes 200 documents over four hours, hits an error on document 201, and without a checkpoint you start from scratch. Treat the agent like a long-running server process: write intermediate state to disk, checkpoint every N units of work, recover from failures. The Agent Runtime sandbox gives you a persistent filesystem, but choosing the right checkpoint granularity (not every step, not only the end) is on you.</p><p><strong>Delegated approval (human-in-the-loop).</strong> Most &#8220;human-in-the-loop&#8221; implementations are: serialize state to JSON, fire a webhook, hope someone responds. The state goes stale, the notification gets buried, the agent re-deserializes into a slightly different world. Long-running runtimes let the agent pause in place with full execution state intact: reasoning chain, working memory, tool history, pending action. Hours of human time pass, the agent consumes zero compute, and it resumes with sub-second latency. Mission Control is Google&#8217;s inbox for this. The pattern works regardless of vendor.</p><p><strong>Memory-layered context.</strong> A seven-day agent needs more than session state. Memory Bank handles long-term curated memory, Memory Profiles add low-latency lookups, and the failure mode you&#8217;ll hit in production is <strong>memory drift</strong>: the agent learns a procedural shortcut from a few atypical interactions and starts applying it broadly. <strong>Govern memory like you govern microservices.</strong> Agent Identity controls who can read and write which banks. Agent Registry tracks which version of which agent is running. Agent Gateway enforces policy on the wire. The auditing question stops being &#8220;what are my agents doing?&#8221; and becomes &#8220;what are my agents remembering, and how is that changing their behavior?&#8221;</p><p><strong>Ambient processing.</strong> Not every long-running agent talks to a human. Some sit on a Pub/Sub stream or a BigQuery table and act on events as they arrive: content moderation, anomaly detection, inbox triage. The architectural decision worth making early is to not hardcode policy into the agent. Define it in the Gateway and the fleet picks up policy changes without redeploys. Ambient agents run unsupervised for long stretches, and the only sane way to update a hundred of them is to update the policy layer once.</p><p><strong>Fleet orchestration.</strong> In real systems, you rarely have one agent. A coordinator delegates sub-tasks to specialists (a Lead Researcher Agent, a Scoring Agent, an Outreach Agent), each running independently for different durations. Each specialist gets its own Identity (so the Outreach Agent can&#8217;t read financial data meant for Scoring), its own policy enforcement, its own Registry entry. This is the same coordinator/worker shape distributed systems have used for decades. What&#8217;s new is that ADK handles it declaratively with graph-based workflows, and a bad deployment in one specialist doesn&#8217;t cascade to the others.</p><p>The patterns compose. A compliance system might use checkpointing for document processing, delegated approval for review gates, memory layering for cross-session knowledge, and fleet orchestration to coordinate the specialists. The opening question is always the same: <em>what&#8217;s the longest uninterrupted unit of work your agent needs to perform?</em> Minutes, and you don&#8217;t need long-running agents. Hours or days, and these patterns are where to start. The <a href="https://x.com/GoogleCloudTech/status/2046989964077146490">full write-up with code samples</a> covers each pattern in depth.</p><div><hr></div><h2><strong>So how do you actually build one today?</strong></h2><p>This is the practical question and it has a different answer depending on what you&#8217;re building.</p><p><strong>You&#8217;re a developer who wants long-running coding work on your own repo.</strong> Just use <a href="https://addyosmani.com/blog/agent-harness-engineering/">Claude Code</a> (or Antigravity, Cursor, or Codex). The harness is already there. Treat your <code>AGENTS.md</code> like a pilot&#8217;s checklist: short, every line earned by a real failure. Add hooks for typecheck and lint that surface failures back to the agent. Write a plan file before the agent starts. Use <a href="https://addyosmani.com/blog/self-improving-agents/">the Ralph loop</a> when the agent claims it&#8217;s done and you don&#8217;t believe it. For multi-hour or overnight jobs, run in a worktree so a closed laptop doesn&#8217;t kill the run, and have it commit progress every meaningful unit of work. <strong>This is the path most people should take, and it&#8217;s where the most leverage is right now.</strong></p><p><strong>You&#8217;re building a hosted agent product.</strong> Don&#8217;t build the runtime. Pick a managed one. The three real options today: <a href="https://cloud.google.com/products/gemini-enterprise-agent-platform">Google&#8217;s Agent Platform</a> (Agent Engine + Memory Bank + Sessions), <a href="https://platform.claude.com/docs/en/managed-agents/overview">Claude Managed Agents</a>, or roll something on top of <a href="https://google.github.io/adk-docs/">ADK</a>, the <a href="https://www.anthropic.com/engineering/building-agents-with-the-claude-agent-sdk">Claude Agent SDK</a>, or <a href="https://platform.openai.com/docs/codex">Codex SDK</a> and host it yourself. The trade-off is the usual one. Managed gets you the brain/hands/session split, observability, identity, and an audit trail out of the box. Self-hosted gets you control and the ability to use weird models for weird roles (Cursor&#8217;s pattern). For most teams, the right starting point is a managed runtime plus your own ADK or SDK code for the actual loop.</p><p><strong>You&#8217;re doing something autonomous and operational</strong> (monitoring, research, ops). Memory Bank-style persistence is what you want, and it&#8217;s the part that doesn&#8217;t exist in Claude Code. ADK + Memory Bank + Cloud Run + Cloud Scheduler is the cleanest stack I&#8217;ve seen for &#8220;agent runs every N hours, accumulates state, alerts on a threshold.&#8221; This is also where Cursor&#8217;s planner/worker/judge split starts to matter more than it does for IDE coding, because the work is genuinely parallel and the failure modes are different.</p><p>A few things matter regardless of which path you take.</p><p><em>Write down the done-condition before the agent starts.</em> This is the single highest-leverage move for long runs. The Anthropic harness post calls it the feature list; Cursor calls it the planner&#8217;s task spec. Either way, it&#8217;s an external file with explicit, testable completion criteria, and it exists so the agent can&#8217;t quietly redefine <em>done</em> mid-run.</p><p><em>Separate the evaluator from the generator.</em> Self-grading is the failure mode. A planner / worker / judge pipeline, or a generator / evaluator pair, is a real architectural pattern not a stylistic preference. Even if it&#8217;s the same model in different roles with different prompts.</p><p><em>Invest in the session log, not just the prompt.</em> The append-only event log is what makes the agent recoverable, debuggable, and auditable. If you can&#8217;t reconstruct what the agent did in the last 24 hours from durable storage, what you have is a long-running shell script that happens to call an LLM, not a long-running agent.</p><p><em>Treat compaction and context resets as first-class.</em> Anthropic is explicit that summarization-as-compaction wasn&#8217;t enough for very long jobs; they had to do full context resets where the harness tears the session down and rebuilds it from a structured handoff file. It is essentially how humans onboard a new engineer.</p><div><hr></div><h2><strong>There are some real limitations right now</strong></h2><p>A few things are still genuinely unsolved.</p><p><strong>Cost.</strong> A 24-hour run with a frontier model and a few tools is not cheap. Without budgets, circuit breakers, and a hard cap on tool spend, an agent can quietly burn through a week&#8217;s API budget in an afternoon. This is solvable, but it&#8217;s an explicit step you have to take.</p><p><strong>Security.</strong> A long-running agent with API keys, cloud access, and the ability to run shell commands has a much larger attack surface than a chat session. The brain/hands separation pattern matters here too: credentials should be unreachable from the sandbox where model-generated code runs, which is one of the benefits Anthropic calls out for Managed Agents.</p><p><strong>Alignment drift.</strong> Over many context windows, agents drift. The original goal gets summarized, then re-summarized, then loses fidelity. This is the part hooks and judges exist to defend against. It is also the most common reason &#8220;the agent went off and did something I didn&#8217;t ask for.&#8221;</p><p><strong>Verification.</strong> Auditing 24 hours of autonomous activity is a real human-time problem. Observability and structured artifacts (PRs, commits, briefings, test runs) are how you make this tractable. Without them, you&#8217;re scrolling logs and you&#8217;ll miss what matters.</p><p><strong>The human role.</strong> Defining work crisply enough that an agent can run for a day on it is harder than doing the work yourself. The skill that&#8217;s appreciating in value isn&#8217;t writing code. It&#8217;s writing specs that survive contact with an autonomous executor.</p><div><hr></div><h2><strong>Where this is going</strong></h2><p>Google, Anthropic, and Cursor have converged on roughly the same shape. <strong>Separate the model loop from the execution sandbox from the durable session log. Split planning from generation from evaluation. Bake in compaction, hooks, and context resets. Expose memory as a managed service that any agent invocation can query.</strong></p><p>Surface area is what differs. Google&#8217;s Agent Platform is the enterprise-stack version, with the identity and audit trail story baked in. The patterns underneath are the same. Claude Managed Agents is &#8220;Anthropic&#8217;s harness, hosted.&#8221; Cursor&#8217;s background agents are &#8220;long-running coding, pulled out of the IDE and into the cloud.&#8221;</p><p>The harder problems for the next year aren&#8217;t in any of those layers individually. They&#8217;re in the coordination above them. Many long-running agents on a shared codebase. Agents that read their own traces and patch their own harnesses. Harnesses that assemble tools and context just-in-time for a task instead of being pre-configured at startup. That&#8217;s where the agent stops looking like a smarter chat window and starts looking like a colleague who&#8217;s been on the project longer than you have.</p><p>The model is still load-bearing. But the gap between a chat window and an agent you can leave running overnight is mostly in the state, sessions, and structured handoffs wrapped around it. That&#8217;s where I&#8217;d spend my learning time right now.</p><p><em>You might be interested in checking out some of my O&#8217;Reilly books such as <a href="https://beyond.addy.ie/">Beyond Vibe Coding</a>, <a href="https://www.oreilly.com/library/view/the-effective-software/9798341638167/">The Effective Software Engineer</a> or <a href="https://www.oreilly.com/library/view/web-performance-engineering/9798341660182/">Web Perf engineering in the age of AI</a>.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FqTC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FqTC!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!FqTC!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!FqTC!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!FqTC!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FqTC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41180,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/195959711?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FqTC!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!FqTC!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!FqTC!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!FqTC!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf57c226-c3eb-4c62-86c4-083008b5f2f1_1376x768.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[The Agent Stack Bet]]></title><description><![CDATA[The bet every serious developer needs to make on on their agent stack]]></description><link>https://addyo.substack.com/p/the-agent-stack-bet</link><guid isPermaLink="false">https://addyo.substack.com/p/the-agent-stack-bet</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Sat, 18 Apr 2026 17:16:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!w6mN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Peek under the hood of most &#8220;production agents&#8221; shipping today and you won&#8217;t find intelligence. You&#8217;ll find custom plumbing, fragile session logic, shared service accounts, and a security model held together by hope. This can be so much better.</p><p>If you&#8217;ve spent the last 18 months putting agents into production, you already know the models and tools have gotten <em>dramatically</em> better. You also know the problems that are still burning your on-call rotation are not problems you can prompt your way out of. We are running into a <strong>stack ceiling</strong>, and it is quietly creating a <strong>governance</strong> and <strong>reliability gap</strong> that the next generation of agentic systems cannot grow through.</p><p>Right now the industry is living with what I&#8217;d call <em>excessive agency</em>: <strong>autonomous systems given broad permissions to get things done</strong>, then left to discover - at runtime, in production - that a schema drifted, an API changed, or a downstream service started returning PII it wasn&#8217;t supposed to. Agents mark tasks &#8220;complete&#8221; while leaving a trail of corrupted state behind them. The humans find out on Monday.</p><p>This is not a failure of the people building agents. It is a failure of the stack they&#8217;re building on.</p><p>Here are the four architectural bets I think every serious team has to make in the next twelve months.</p><h2><strong>1) Agents need identities, not shared credentials</strong></h2><p>Every engineer who has shipped agents to production knows this specific flavor of dread: you have agents doing useful work, and effectively zero visibility into which tools they touched, which data they moved, or which credentials they used to do it. I call this <em>governance debt</em> - the silent accumulation of security and audit risk that eventually forces a full rewrite, usually right after the first incident that reaches the CISO.</p><p>The root cause is that most agents today are ghosts. They don&#8217;t have identities. They borrow a service account, inherit a human&#8217;s OAuth token, and &#8220;promise&#8221; - in application code, in a prompt - to stay inside the lines. In a real enterprise environment, a promise in a prompt is not a policy.</p><p><strong>My bet is that agent identity has to move from the application layer down into the platform layer.</strong> </p><p>The difference is between bolted-on vs. embedded security. Bolted-on looks like middleware in front of every tool call, politely asking the agent to behave: easy to bypass, expensive in latency, and invisible to your existing IAM. Embedded looks like a badge reader welded into a steel frame. The agent has a distinct, unforgeable identity recognized at the network and platform level, and policy is enforced at the source. If the agent reaches for a database it isn&#8217;t cleared for, the connection never opens. No middleware, no vibes.</p><p>Done right, this turns &#8220;a fleet of liabilities&#8221; into something that looks a lot more like a managed workforce: every action attributable, every permission auditable, every agent revocable with one call.</p><h2><strong>2) Agents need universal context, not scraped windows</strong></h2><p>Context management is a tax every builder is currently paying. Teams are burning a huge share of their engineering hours (and tokens) on undifferentiated plumbing - custom serialization, bespoke session stores, hand-rolled memory layers - just to keep an agent from forgetting its mission halfway through a multi-step task.</p><p>Worse, the context agents <em>can</em> get their hands on is usually siloed. A browser-based agent can see the open tab. A desktop wrapper can see the files a user happened to drag in. Neither of them can easily reason across the systems where the business actually lives - the CRM, the ERP, the data warehouse, the ticketing system, the transcripts, the project plans - at the same time.</p><p><strong>Agents need universal context that integrates at the platform level.</strong> If we don&#8217;t fix this, we should be honest that the ceiling of agentic AI is &#8220;slightly better spreadsheet autocomplete,&#8221; and we should stop writing vision pieces about it.</p><h1><strong>3) Agents need to survive your laptop closing</strong></h1><p>Here&#8217;s the uncomfortable version of this: a lot of what ships today as &#8220;an agent&#8221; isn&#8217;t yet ready to deploy across a business. </p><p>I want to be precise, because the frontier has genuinely moved in the last six months. Environments like Claude Code, OpenClaw, and similar platforms are capable - persistent task state, scheduled execution, multi-agent coordination, and long-running sessions that survive disconnects are no longer aspirational. These are not toys. The question has moved on.</p><p>The question now is whether an agent can run for a week instead of an hour. Whether it can cross three handoffs, two credential rotations, and an approval gate without a human babysitting the session. Whether the work it did on Tuesday is auditable on Friday by someone who wasn&#8217;t in the room. A session that survives a dropped WebSocket is table stakes. A mission that survives a quarter is the bar enterprises actually need.</p><p>Real work doesn&#8217;t fit in a session, and most of it doesn&#8217;t fit in a day either. A procurement workflow spans weeks and a dozen handoffs. A compliance audit runs for a month. An incident investigation outlives three on-call rotations. </p><p><strong>Most agents today hit a hard ceiling - sometimes time-based, sometimes token-based, sometimes governance-based - and when they hit it, the mission fails and a human picks up the pieces from wherever the transcript ended.</strong></p><p>Enterprise-grade autonomy requires durable, cloud-native execution with a much higher floor than &#8220;the session stayed up.&#8221; Concretely, that means:</p><ul><li><p><strong>State</strong> and <strong>checkpointing</strong> that survives restarts, disconnects, redeploys, and model version changes by default - not bolted on with a local Redis and a prayer.</p></li><li><p><strong>Context that outlives the window</strong>: long-horizon memory, summarization, and handoff between agent instances, so a multi-week task doesn&#8217;t die because a single run exhausted its tokens.</p></li><li><p><strong>Missions that outlive sessions</strong>: agents that stay on the job across days, handoffs, and credential rotations, with an auditable trail of what happened while you were asleep.</p></li><li><p><strong>First-class human-in-the-loop primitives,</strong> so the agent can pause and ask for permission to do something new instead of silently deciding it has the authority.</p></li></ul><p>Persistence with guardrails. That&#8217;s the bar. Anything less and you&#8217;re building demos that happen to run for a long time.</p><h1><strong>4) Agents need platforms</strong></h1><p>The pattern I see most often in strong teams is the saddest one: brilliant engineers draining their bandwidth into stack problems that do not differentiate their product. Custom memory. Bespoke eval harnesses. Homegrown observability. Handwritten retry logic. A tracing system that almost works. None of this is the hard part of the agentic era, and none of it is what your users are paying you for.</p><p>The real value lives in domain reasoning and business logic - the judgment calls that are specific to your company, your customers, your regulatory environment. Everything underneath should be the platform you <em>build on</em>, not the plumbing you <em>build</em>.</p><p>This is why the maturation of open primitives matters right now. Open-source orchestration frameworks exist precisely so the scaffolding isn&#8217;t locked behind any single vendor&#8217;s roadmap. The model that worked for cloud compute, containers, and CI/CD - start local on open primitives, graduate to a managed platform when you&#8217;re ready to scale - is the model agent platforms need to copy. </p><p><strong>Teams should be able to prototype on their laptop with the same building blocks they&#8217;ll run in production, and cross that boundary without a rewrite.</strong></p><p>That&#8217;s the engineering standard that lets teams stop fighting plumbing and get back to the product.</p><h2><strong>The five-year horizon</strong></h2><p>The teams that pull ahead in the next five years will not pull ahead by being smarter at writing boilerplate. They&#8217;ll pull ahead by <strong>choosing the right agent foundation</strong> and spending their engineering hours on the problems <em><strong>only they can solve</strong></em>.</p><p>Every month spent rebuilding the common stack - identity, context, persistence, orchestration - is a month not spent on the logic that actually makes your agents worth deploying. </p><p><strong>The agent stack has to become a solved problem.</strong> The only real question is whether you want to solve it yourself, again, or build on a foundation that was engineered for agents from the ground up.</p><p>My bet is on the latter. I think yours should be too.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!w6mN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!w6mN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!w6mN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!w6mN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!w6mN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!w6mN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg" width="1456" height="930" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:930,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85329,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/194581773?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!w6mN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!w6mN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!w6mN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!w6mN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F618c5adc-46c0-4142-9254-4ed4c5ab0eca_2556x1632.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[Is the IDE dead?]]></title><description><![CDATA[How Agent orchestration is replacing the editor as the center of developer work]]></description><link>https://addyo.substack.com/p/death-of-the-ide</link><guid isPermaLink="false">https://addyo.substack.com/p/death-of-the-ide</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Fri, 20 Mar 2026 14:31:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wgTu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>The </strong><em><strong>center</strong></em><strong> of developer work is moving.</strong> Not disappearing - moving. Away from continuous, line-by-line editing inside a single window, and <strong>toward supervising agents</strong> that can plan, rewrite files, run tests, and propose changes for review. IDEs as we know them may stop being the primary tool for software work, or heavily evolve.</p><p>Across the tools many developers including myself are already using daily - <a href="https://conductor.build/">Conductor</a>, <a href="https://code.claude.com/docs/en/claude-code-on-the-web">Claude Code Web</a>, <a href="https://github.com/copilot/agents">GitHub Copilot Agent</a>, <a href="http://jules.google">Jules</a>, <a href="https://www.vibekanban.com/">Vibe KanBan</a>, even cmux - the same shift keeps showing up: <strong>the control plane is becoming the primary surface, and the editor is becoming one of several instruments underneath it.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Av7X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Av7X!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Av7X!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Av7X!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Av7X!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Av7X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg&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;:466191,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/191542117?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Av7X!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Av7X!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Av7X!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Av7X!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbfdde15-b9fc-4cf8-a399-5769c44274e7_2400x1350.jpeg 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"><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"><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"><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"><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>Cursor just shipped <a href="https://cursor.com/glass">Glass</a> - a new interface explicitly built to make &#8220;working with agents clear, intuitive, and in your control&#8221; where agent management is the primary experience and the traditional editor is something you reach for when you need to go deeper. The <a href="https://x.com/F2aldi/status/2034801927041818823">reaction</a> from developers was immediate: </p><blockquote><p><em>Now Cursor feels more like an Agent Orchestrator than an IDE. Managing agents in parallel is easier</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!P0AV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!P0AV!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!P0AV!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!P0AV!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!P0AV!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!P0AV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48500cf2-98ed-4280-8ae9-25e3ae8d0669_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;:619387,&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;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/191542117?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!P0AV!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png 424w, /__u/substackcdn.com/image/fetch/$s_!P0AV!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png 848w, /__u/substackcdn.com/image/fetch/$s_!P0AV!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!P0AV!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48500cf2-98ed-4280-8ae9-25e3ae8d0669_1920x1080.png 1456w" sizes="100vw"></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"><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"><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"><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"><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>But Glass is one data point in a much larger pattern. Terminal UIs like <a href="https://cmux.com/">cmux</a> highlight how the surfaces we&#8217;re used to are evolving to better manage agent workflows.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BGo7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BGo7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png 424w, /__u/substackcdn.com/image/fetch/$s_!BGo7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png 848w, /__u/substackcdn.com/image/fetch/$s_!BGo7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BGo7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BGo7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png" width="1456" height="843" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:843,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;cmux terminal app screenshot&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="cmux terminal app screenshot" title="cmux terminal app screenshot" srcset="/__u/substackcdn.com/image/fetch/$s_!BGo7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png 424w, /__u/substackcdn.com/image/fetch/$s_!BGo7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png 848w, /__u/substackcdn.com/image/fetch/$s_!BGo7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BGo7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F936597fd-b43d-4b9e-8e0c-f6ae8aaa9929_3840x2224.png 1456w" sizes="100vw"></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"><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"><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"><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"><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><div><hr></div><h2>From editing files to steering workstreams</h2><p>Historically, IDEs optimized for a tight inner loop: open files &#8594; edit &#8594; build &#8594; debug &#8594; repeat. <strong>The &#8220;death&#8221; argument is that this loop is no longer the dominant unit of productivity once agents can execute most of it autonomously.</strong></p><p>The new loop looks like this: <strong>specify intent &#8594; delegate &#8594; observe &#8594; review diffs &#8594; merge</strong>. What makes it different from &#8220;autocomplete with a chat window&#8221; is tool-using autonomy combined with interfaces designed to make that autonomy governable.</p><p>You can see this playing out across tools already in heavy use. Claude Code Web (or Desktop) and Codex let developers hand off well-defined tasks to agents running in isolated cloud environments, with progress visible in a browser - no terminal, no local setup required. </p><p>GitHub Copilot&#8217;s Agents plan and implements multi-file changes independently, creates branches, runs tests, and surfaces a PR for review; the developer&#8217;s primary job becomes reviewing the outcome and iterating, not directing each step. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!L3L8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!L3L8!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png 424w, /__u/substackcdn.com/image/fetch/$s_!L3L8!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png 848w, /__u/substackcdn.com/image/fetch/$s_!L3L8!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png 1272w, /__u/substackcdn.com/image/fetch/$s_!L3L8!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!L3L8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png" width="549" height="302.779532967033" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:803,&quot;width&quot;:1456,&quot;resizeWidth&quot;:549,&quot;bytes&quot;:549881,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/191542117?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!L3L8!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png 424w, /__u/substackcdn.com/image/fetch/$s_!L3L8!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png 848w, /__u/substackcdn.com/image/fetch/$s_!L3L8!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png 1272w, /__u/substackcdn.com/image/fetch/$s_!L3L8!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f9eef48-c593-4a33-a05c-cd2602ef85ff_3018x1664.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Conductor takes a different approach: a desktop app for running multiple Claude Code agents simultaneously in isolated workspaces, with live progress monitoring across all of them. And Google&#8217;s Jules handles asynchronous background tasks - you assign work, it runs, you review the result when it&#8217;s done. </p><p>What these tools share is a mental model: <strong>the agent is the unit of work, not the file</strong>. The interface worth optimizing is the one that helps you direct, monitor, and review agents - not the one that helps you type faster.</p><div><hr></div><h2>The orchestration layer taking shape</h2><p>The displacement story becomes persuasive only when you look at the specific interface patterns converging across tools.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Uidv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Uidv!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif 424w, /__u/substackcdn.com/image/fetch/$s_!Uidv!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif 848w, /__u/substackcdn.com/image/fetch/$s_!Uidv!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif 1272w, /__u/substackcdn.com/image/fetch/$s_!Uidv!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Uidv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif" width="562" height="398.72664835164835" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1033,&quot;width&quot;:1456,&quot;resizeWidth&quot;:562,&quot;bytes&quot;:136737,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/avif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/191542117?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Uidv!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif 424w, /__u/substackcdn.com/image/fetch/$s_!Uidv!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif 848w, /__u/substackcdn.com/image/fetch/$s_!Uidv!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif 1272w, /__u/substackcdn.com/image/fetch/$s_!Uidv!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e9d9a9-4541-4381-b6b8-14d07e95a2c2_2500x1774.avif 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong>Work isolation as a primitive.</strong> Parallel agents need to not step on each other. Virtually every serious tool in this space has landed on git worktrees (or similar) as the answer. Conductor maps each agent session to its own isolated workspace. Vibe Kanban (shown above) does the same for its kanban-driven agent workflow. The pattern is near ubiquitous because the problem is real: without isolation, parallel agents produce chaos.</p><p><strong>Planning and task state as the primary UI.</strong> Tools like Vibe Kanban have replaced &#8220;tabs and files&#8221; with &#8220;tasks and states&#8221; as the top-level mental model. You create task cards (a landing page, a backend service, an email integration), assign each to an agent and a model, and manage the whole effort like a lightweight project board - except the &#8220;team&#8221; is running autonomously. This is a project management surface that happens to have agents doing the implementation.</p><p><strong>Background agents and async-first design.</strong> Some of the most interesting tools in this space don&#8217;t even try to keep you in the loop during execution. Cursor, Copilot and Antigravity support background agents that run without requiring your presence - you define intent, step away, and review when they&#8217;re done. Jules works similarly: assign a task, come back to a diff. The implicit promise is that your attention is too valuable to spend watching a progress bar. That&#8217;s a significant departure from the IDE&#8217;s real-time, synchronous feedback loop.</p><p><strong>Attention management for parallel agents.</strong> When many agents run concurrently, the real bottleneck becomes knowing which one needs you <em>right now</em>. This is why tools like Conductor surface live progress across sessions and cmux introduced notification rings and unread badges for terminal panes. &#8220;Agent needs attention&#8221; is becoming a first-class event in the developer environment - something to route and triage, not just notice.</p><p><strong>Agents embedded into the software lifecycle.</strong> GitHub&#8217;s Copilot coding agent is asynchronous, secured by a control layer, and powered by GitHub Actions - attached to how code actually ships (issues &#8594; PRs &#8594; CI &#8594; merge), not just how it gets written. </p><p>None of these tools claim IDEs are obsolete - many still interoperate with them. But the repeated patterns (parallel workspaces, diff-first review, task state, background execution, lifecycle integration) are precisely what &#8220;death of the IDE&#8221; proponents mean when they talk about a center-of-gravity shift.</p><div><hr></div><h2>Why developers still reach for an IDE</h2><p><strong>The best critique of &#8220;the IDE is dead&#8221; is that the IDE </strong><em><strong>still</strong></em><strong> compresses several genuinely hard problems into a high-fidelity feedback loop</strong>: precise navigation, local reasoning, interactive debugging, and the ability to <em>understand</em> a system by directly manipulating it.</p><p>Even the most ambitious orchestration tools keep a manual-edit escape hatch. For example, reviewing diffs in-thread, commenting on changes, and then opening the result in your editor for manual adjustments. That&#8217;s an acknowledgment that human intervention is part of the intended workflow.</p><p>Agent tooling itself highlights where the limits still are. Multi-file refactorings in large repositories remain among the toughest challenges for software engineering agents. These are exactly the situations where interactive code navigation and human judgment still matter most - where you need to hold a mental model of the system that the agent can&#8217;t fully reconstruct from context alone.</p><p>The failure mode that keeps developers anchored to IDE-level inspection is agents being <em>almost</em> right. When something is 90% correct and subtly broken, the cost of finding the issue often exceeds what it would have taken to write it yourself. For high-stakes changes, the IDE remains the best instrument for that kind of deep, precise inspection.</p><div><hr></div><h2>The new costs: review fatigue and governance overhead</h2><p>If development becomes &#8220;run many agents in parallel&#8221; the workflow inherits problems that look less like text editing and more like distributed systems management - observability, permissions, isolation, and governance.</p><p>Agent workflows invert the labor. Instead of writing, you&#8217;re reviewing. That sounds like an improvement until you&#8217;re staring at twelve diffs from twelve parallel agents at the end of the day. Review fatigue is real, and it&#8217;s one of the reasons the most thoughtful tools in this space focus on attention routing, structured plans, and review-first gates rather than pushing for full autonomy by default.</p><p>The security surface also expands as agents gain access to more tools, repos, and external systems. As agents can browse the web, query databases, write to filesystems, and trigger deploys, what they&#8217;re <em>allowed</em> to do becomes as important as what they&#8217;re <em>capable</em> of doing.</p><p>On observability and control, IDE-integrated agent modes are already pushing toward explicit tool logs and approval gates. The governance question isn&#8217;t optional once agents act asynchronously and touch CI pipelines.</p><div><hr></div><h2>What survives: the IDE, the control plane, or both</h2><p>A clear reading of the landscape is that &#8220;death of the IDE&#8221; is directionally right about the <em>center of gravity</em>, but wrong as a literal forecast.</p><p>The strongest version of the claim is this: <strong>the IDE stops being the primary workspace and becomes one of several subordinate instruments</strong> - used for targeted inspection, debugging, and final edits - while planning, orchestration, review, and agent management move into dashboards, issue trackers, observability terminals, and cloud control planes. </p><p>The &#8220;bigger IDE&#8221; framing is equally well-supported. The new &#8220;IDE&#8221; is a system that provides multi-agent orchestration, isolated workspaces, permissions and audit logs, diff-first review, reliable tool connectivity, and attention routing. <strong>The file editor is still there. It&#8217;s just no longer the front door.</strong></p><p>The IDE isn&#8217;t dying. It&#8217;s being <em>de-centered</em>. The work is moving outward - into orchestration surfaces where humans define intent, delegate to parallel agent runtimes, and spend more time supervising, reviewing, and governing than typing. </p><p><strong>The IDE remains critical for correctness, comprehension, and the hard problems agents still struggle with. But its no longer the only place where programming happens - and for a growing number, it&#8217;s no longer the first place they go.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!wgTu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!wgTu!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!wgTu!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!wgTu!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!wgTu!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!wgTu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30361,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/191542117?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!wgTu!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!wgTu!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!wgTu!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!wgTu!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2368a63a-b3fc-4358-a6c5-57f2a33c6fd8_1376x768.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p>]]></content:encoded></item><item><title><![CDATA[14 More lessons from 14 years at Google]]></title><description><![CDATA[This time about teams, trust, and the systems around the code.]]></description><link>https://addyo.substack.com/p/14-more-lessons-from-14-years-at</link><guid isPermaLink="false">https://addyo.substack.com/p/14-more-lessons-from-14-years-at</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Thu, 12 Feb 2026 15:30:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4cMX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A while back, I wrote down <a href="/__u/addyo.substack.com/p/21-lessons-from-14-years-at-google">21 lessons from my time at Google</a>. The response caught me off guard because of <em>which</em> ones stuck. It wasn&#8217;t tech-specific advice. It was the stuff about people, decisions, and the messy reality of building things together.</p><p>That made me realize I&#8217;d left a lot on the table. The first list skewed toward individual craft - how to write better code, how to think about your career. But some of the hardest lessons I&#8217;ve learned aren&#8217;t about how you work. They&#8217;re about how teams work: how decisions actually get made, where coordination breaks down, what separates the groups that ship from the ones that spin.</p><p>These lessons pick up where the first left off. They&#8217;re less about being a better individual engineer and more about the systems around the engineering.</p><h2><strong>1. The best engineers pick the right problems to solve.</strong></h2><p>Every yes is an implicit no to something else.</p><p>I&#8217;ve watched talented engineers burn out because they said yes to everything - every bug, every feature request, every &#8220;quick favor.&#8221; Their calendar filled up with other people&#8217;s priorities, and their own roadmap became a graveyard of half-finished ideas.</p><p>Sometimes it&#8217;s just because they truly do care so much about the product. Protect your bandwidth from &#8220;nice to have&#8221; the same way you protect production from outages. The skill is doing the right things and letting the wrong things stay undone.</p><p>The engineers who create disproportionate impact aren&#8217;t necessarily faster or smarter. They&#8217;re more ruthless about what deserves their attention. They&#8217;ve learned that the opportunity cost of working on the wrong thing is working on the wrong thing.</p><h2><strong>2. If you can&#8217;t say what decision you&#8217;re asking for, you&#8217;re not ready for the meeting.</strong></h2><p>Most meetings fail not because they&#8217;re unnecessary, but because they&#8217;re disguised journaling. I&#8217;ve sat through hundreds of hours where smart people talked around a problem without ever naming what they needed. The meeting ends with vibes and no owner.</p><p>I learned to start with the ask: approve, choose, unblock, or inform.</p><p>Just those four words changed how I prepare for every meeting. If I can&#8217;t pick one, I&#8217;m not ready to take anyone&#8217;s time. And when I&#8217;m on the receiving end, I&#8217;ve started asking &#8220;what decision do you need from me?&#8221; within the first two minutes. It sounds blunt, but people are usually relieved - they often didn&#8217;t realize they hadn&#8217;t defined it themselves.</p><p>The hidden cost of vague meetings isn&#8217;t just the hour you lose. It&#8217;s the week of drift that follows while everyone waits for clarity that never came.</p><h2><strong>3. &#8220;We should&#8221; is not a plan. &#8220;On Tuesday, I will&#8221; is a plan.</strong></h2><p>The difference between motion and progress is specificity.</p><p>Teams drown in intentions. I&#8217;ve watched roadmaps fill up with &#8220;we should improve the onboarding flow&#8221; and &#8220;we should reduce latency&#8221; and &#8220;we should document the API.&#8221; Months later, the same items are still there, gathering dust and guilt. You might think that&#8217;s a solved problem now that we have <a href="https://addyosmani.com/blog/agentic-engineering/">agentic engineering</a>, but not quite.</p><p>Convert talk into the smallest next action someone can actually do, then put a name and a date on it. Not &#8220;we should improve onboarding&#8221; but &#8220;On Tuesday, Sarah will run three user sessions and document the top friction points.&#8221;</p><p>This is about respecting that humans need traction to make progress. Vague intentions create anxiety. Specific commitments create momentum. The plan doesn&#8217;t have to be perfect - it just has to be concrete enough that someone can actually start.</p><h2><strong>4. Slow code is sometimes a symptom. Slow decisions are always a problem.</strong></h2><p>Speed is about removing the friction that makes smart people hesitate. &#8220;Bias towards action&#8221; when you can.</p><p>When a project drags, the instinct is to blame velocity: people aren&#8217;t working hard enough, the codebase is messy, there aren&#8217;t enough engineers. But in my experience, slow code is often a symptom. Slow decisions are the disease.</p><p>If decisions routinely take weeks or months, look deeper. Missing context means people can&#8217;t evaluate tradeoffs. Unclear ownership means everyone&#8217;s waiting for someone else to decide. Fear of accountability means people hedge instead of commit.</p><p>The fastest engineering team I ever worked with wasn&#8217;t the one with the best programmers. It was the one where decisions happened in hours instead of weeks because the authority was clear, the context was shared, and being wrong wasn&#8217;t a career risk.</p><h2><strong>5. Reliability is a product feature. Treat it like one.</strong></h2><p>Users don&#8217;t praise reliability but they do notice its absence.</p><p>This creates a dangerous dynamic: reliability work is invisible until it fails, which means it&#8217;s perpetually under-resourced compared to shiny new features.</p><p>Error budgets are one way to make the tradeoff explicit. If your service has an SLO of 99.9% uptime, you have a &#8220;budget&#8221; of 0.1% downtime to spend on innovation. Burn through it, and you focus on reliability until you&#8217;ve earned it back. This is a framework for having honest conversations about risk.</p><p>The teams that maintain both velocity and reliability don&#8217;t do it through heroics. They do it by treating reliability as a first-class product feature with its own roadmap, its own metrics, and its own advocates. </p><p>You wouldn&#8217;t ship a feature without product review. Don&#8217;t ship a system without some kind of reliability discussion.</p><h2><strong>6. You can&#8217;t &#8220;communication&#8221; your way out of a bad interface between teams.</strong></h2><p>Team interaction modes exist for a reason: collaboration (working closely together), service (clear API and SLAs), or facilitation (one team helping another build capability). </p><p>Most cross-team pain isn&#8217;t about effort or good intentions. It&#8217;s about unclear boundaries and messy contracts. I&#8217;ve watched teams &#8220;improve communication&#8221; by adding more meetings, more Slack channels, more syncs - and it doesn&#8217;t make things better.</p><p>The problem isn&#8217;t that people aren&#8217;t talking. It&#8217;s that the interface between teams is undefined. Who owns what? What&#8217;s the contract? What can team A depend on team B for, and vice versa?</p><p>Choose deliberately, and you&#8217;ll need fewer meetings to make things work. Try to paper over a bad interface with communication, and you&#8217;ll burn out your most collaborative people while the underlying dysfunction remains.</p><h2><strong>7. The best escalation comes with a proposal.</strong></h2><p>&#8220;Here&#8217;s the problem&#8221; is half the job. I used to think my role was to identify issues and bring them to leadership. That&#8217;s necessary but insufficient.</p><p>&#8220;Here are two options, the tradeoffs, and what I recommend&#8221; is how you get unblocked and earn trust. It shows you&#8217;ve done the thinking. It gives decision-makers something super specific to react to instead of an open-ended problem to solve.</p><p>It makes their job easier, which makes them more likely to give you what you need.</p><p>The difference between &#8220;I need help&#8221; and &#8220;I need you to choose between A and B, and here&#8217;s why I lean toward B&#8221; is the difference between being a problem-raiser and being a problem-solver.</p><p>Both identify issues. Only one earns increasing trust and autonomy.</p><h2><strong>8. Avoid hero culture. Build systems that don&#8217;t require heroes.</strong></h2><p>The hero is burned out, undocumented, and a single point of failure.</p><p>If one person saving the day is a recurring pattern, that&#8217;s a failure mode rather than a badge of honor. I&#8217;ve seen teams celebrate their heroes while ignoring the dysfunction that made heroism necessary.</p><p>When they leave - and they always leave eventually - the team discovers that no one else really knows how things work. The celebration of heroism masks a systemic problem: the path for &#8220;normal humans on a normal day&#8221; doesn&#8217;t work.</p><p>Make the normal path the default. Document the system. Spread the knowledge. Design for the average Tuesday, not the exceptional crisis. Heroes should be unnecessary, and if they&#8217;re necessary, you should be working to make them unnecessary.</p><h2><strong>9. Make observability part of the feature.</strong></h2><p>A feature without telemetry is a liability in disguise.</p><p>If you ship a feature without knowing how it behaves in production, you shipped uncertainty. </p><p>I&#8217;ve watched teams celebrate launches only to discover weeks later that their feature was silently failing for 20% of users. They had no logs, no metrics, no dashboards but a gap where understanding should be. This can cause all kinds of pain if you want to fix it, including unshipping just to properly A/B test with observability in place.</p><p>Logs, traces, dashboards, and alerts aren&#8217;t &#8220;ops work.&#8221; They&#8217;re how you learn. They&#8217;re how you know whether the thing you built actually works for real people doing real things in real conditions.</p><p>The best engineers I know treat observability as part of the definition of done. Not &#8220;I wrote the code&#8221; but &#8220;I wrote the code and I can see it working.&#8221;</p><h2><strong>10. Small PRs are kindness. Especially if the PR is AI generated.</strong></h2><p>Small changes are easier to review, easier to reason about, and easier to revert.</p><p>I used to write large pull requests. I liked the idea of a complete feature being reviewable at once. I was optimizing for my convenience at the expense of my reviewers&#8217; sanity. Smaller PRs are often better for everyone.</p><p>They ship faster because they don&#8217;t sit in a review queue while someone tries to find an hour to understand your thousand-line diff. If you want teammates to trust your pace, make your work reviewable.</p><p>The hidden benefit is that small PRs force you to think in increments. Instead of one monolithic change, you build up capability piece by piece. Each piece gets feedback. Each piece can be rolled back independently. It&#8217;s slower per-PR but faster to actual production.</p><h2><strong>11. When you add a team, you add edges, not just nodes.</strong></h2><p>Coordination cost grows faster than headcount.</p><p>This is why &#8220;just throw more people at the problem&#8221; often fails, and why adding heads late in a project can make it later. Every new person adds communication overhead with everyone they need to coordinate with. The graph gets denser, not just larger.</p><p>I&#8217;ve seen managers genuinely puzzled when a team doubled in size but output barely changed. The answer is always the same: the new edges ate the new capacity. More people meant more alignment meetings, more context-sharing, more waiting for decisions that now required more stakeholders.</p><p>The solution isn&#8217;t to stop hiring. It&#8217;s to be intentional about reducing edges. Clear ownership. Autonomous teams with minimal dependencies. Interfaces that let people work in parallel instead of in lockstep. The best organizations aren&#8217;t the ones with the most people - they&#8217;re the ones with the most leverage per person.</p><h2><strong>12. The migration is never just a migration</strong></h2><p>Every migration is a negotiation between the system you have, the system you want, and the people who didn&#8217;t ask for either.</p><p>I&#8217;ve seen migrations estimated at one quarter stretch to years. Not because the technical work was wrong, but because nobody accounted for the human work: convincing teams to prioritize your migration over their roadmap, supporting the long tail of edge cases nobody knew existed, and maintaining two systems in parallel while the old one refuses to die.</p><p>The technical plan is the easy part. The hard part is designing for coexistence. You will run old and new simultaneously for longer than you think. You will discover that the &#8220;legacy&#8221; system encodes decisions nobody documented and workflows nobody remembers designing but everyone depends on. You will need a adoption strategy that doesn&#8217;t require every team to drop what they&#8217;re doing at once.</p><p>The migrations that actually finish share three traits: a sponsor who stays engaged past the kickoff, a team that really owns the migration instead of treating it as a side quest, and a clear deprecation date that people believe is real. Without all three, you get a migration that&#8217;s perpetually &#8220;almost done&#8221; - which is worse than not starting, because now you&#8217;re paying the cost of two systems indefinitely.</p><p>If you&#8217;re not willing to fund the finish, don&#8217;t start the migration.</p><h2><strong>13. AI makes drafts cheap. Taste becomes expensive.</strong></h2><p>Everyone can generate code now. The barrier to producing code, content, designs - it&#8217;s largely collapsing. AI will write you ten versions of anything in the time it used to take to write one.</p><p>The differentiator is choosing: what to build, what to delete, what to simplify, what not to ship, and what &#8220;good&#8221; looks like. Taste - the ability to distinguish between options and pick the right one - becomes the scarce resource.</p><p>Use AI to explore options fast, then apply judgment ruthlessly. The engineers who thrive in this environment won&#8217;t be the ones who generate the most. They&#8217;ll be the ones who curate the best.</p><p>Production is cheap. Editing is expensive. Selection is everything.</p><h2><strong>14. Trust is a latency optimization for teams.</strong></h2><p>This is the highest-leverage thing you can build. Not a system but credibility.</p><p>When people trust you, they don&#8217;t need five meetings to approve a decision. They assume competence, good intent, and follow-through. Decisions that would take weeks in a low-trust environment take hours in a high-trust one.</p><p>Every time you deliver on a promise, every time you&#8217;re honest about a mistake, every time you make someone else&#8217;s life easier, you&#8217;re depositing into an account that will pay dividends for years.</p><p>I&#8217;ve watched engineers with modest technical skills accomplish enormous things because everyone trusted them. I&#8217;ve watched brilliant engineers accomplish little because nobody would take their calls.</p><p>The code doesn&#8217;t matter if you can&#8217;t get anyone to ship it with you.</p><h2><strong>A final thought</strong></h2><p>The first time around, I said these lessons come down to staying curious, staying humble, and remembering that the work is about people. I still believe that.</p><p>But if this second list has a through-line, it&#8217;s something more specific: the work is about making it easier for normal people to do extraordinary things on a normal day. A career in engineering gives you plenty of time to learn these things the hard way and I&#8217;ve certainly learned a lot during my time at Google so far.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IMBS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IMBS!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!IMBS!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!IMBS!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!IMBS!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IMBS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg" width="308" height="410.49280270956814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1574,&quot;width&quot;:1181,&quot;resizeWidth&quot;:308,&quot;bytes&quot;:234411,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/187716319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!IMBS!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!IMBS!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!IMBS!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!IMBS!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797bdb7f-ae19-4038-a929-14265678f331_1181x1574.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>I hope a few of them save you a scar or two. And if they do, share what you&#8217;ve figured out with someone earlier in the journey. </p><p>That&#8217;s how the good lessons travel.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4cMX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4cMX!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png 424w, /__u/substackcdn.com/image/fetch/$s_!4cMX!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png 848w, /__u/substackcdn.com/image/fetch/$s_!4cMX!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4cMX!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4cMX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1246393,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/187716319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4cMX!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png 424w, /__u/substackcdn.com/image/fetch/$s_!4cMX!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png 848w, /__u/substackcdn.com/image/fetch/$s_!4cMX!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4cMX!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8f101eb-1d56-49a1-8b88-1c8890a86dbb_7838x7838.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p>]]></content:encoded></item><item><title><![CDATA[The 80% Problem in Agentic Coding]]></title><description><![CDATA[Managing comprehension debt when leaning on AI to code]]></description><link>https://addyo.substack.com/p/the-80-problem-in-agentic-coding</link><guid isPermaLink="false">https://addyo.substack.com/p/the-80-problem-in-agentic-coding</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Wed, 28 Jan 2026 17:20:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lmAD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Andrej Karpathy&quot;,&quot;id&quot;:23972309,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6d0938b-93a9-4ead-933f-26da5da1bafc_400x400.jpeg&quot;,&quot;uuid&quot;:&quot;17d7fb74-2769-43c2-9344-1afaa83fa8c8&quot;}" data-component-name="MentionToDOM"></span> said something this week that made me pause: </p><blockquote><p><strong>&#8220;I rapidly went from about 80% manual+autocomplete coding and 20% agents to 80% agent coding and 20% edits+touchups. I really am mostly programming in English now.&#8221;</strong></p></blockquote><p>The inversion happened over a few weeks in late 2025. While this may apply to new (greenfield) or personal projects more than existing or legacy apps, I imagine <strong>how far AI takes you is still further than a year ago. </strong>You can thank models, specs, skills, MCPs and our workflows improving. </p><p>Boris Cherney, creator of Claude Code, has recently echoed similar sentiments:</p><blockquote><p><strong>&#8220;Pretty much 100% of our code is written by Claude Code + Opus 4.5. For me personally it has been 100% for two+ months now, I don&#8217;t even make small edits by hand. I shipped 22 PRs yesterday and 27 the day before, each one 100% written by Claude. I think most of the industry will see similar stats in the coming months - it will take more time for some vs others.&#8221;</strong></p></blockquote><p>Some time ago I wrote about &#8220;<a href="/__u/addyo.substack.com/p/the-70-problem-hard-truths-about">the 70% problem</a>&#8221; - where AI coding took you to 70% completion, then leave the final 30% last mile for humans. That framing may now be evolving. The percentage may shift to 80% or higher for certain kinds of projects, but the nature of the problem changed more dramatically than the numbers suggest.</p><p>Armin Ronacher&#8217;s <a href="https://x.com/mitsuhiko/status/2010446141817844207">poll</a> of 5,000 developers compliments this story: 44% now write less than 10% of their code manually. Another 26% are in the 10-50% range. We&#8217;ve crossed a threshold. But here&#8217;s what the triumphalist narrative misses: the problems didn&#8217;t disappear, they shifted. And some got worse.</p><p><strong>I want to caveat: I&#8217;ve definitely felt the shift to 80%+ agent coding on new side-projects, however, this is </strong><em><strong>very</strong></em><strong> different in large or existing apps, especially where teams are involved. Expectations differ, but this is a taste of where we&#8217;re headed.</strong></p><h2>The mistakes changed</h2><p><strong>AI errors evolved from syntax bugs to conceptual failures - the kind a sloppy, hasty junior may make under time pressure.</strong></p><p>Karpathy catalogs what still breaks: </p><blockquote><p><strong>&#8220;The models make wrong assumptions on your behalf and run with them without checking. They don&#8217;t manage confusion, don&#8217;t seek clarifications, don&#8217;t surface inconsistencies, don&#8217;t present tradeoffs, don&#8217;t push back when they should. They&#8217;re still a little too sycophantic.&#8221;</strong></p></blockquote><p><strong>Assumption propagation</strong>: The model misunderstands something early and builds an entire feature on faulty premises. You don&#8217;t notice until you&#8217;re five PRs deep and the architecture is cemented. This is kind of two-steps-back pattern.</p><p><strong>Abstraction bloat</strong>: Given free rein, agents can overcomplicate relentlessly. They&#8217;ll scaffold 1,000 lines where 100 would suffice, creating elaborate class hierarchies where a function would do. You have to actively push back: &#8220;Couldn&#8217;t you just...?&#8221; The response is always &#8220;Of course!&#8221; followed by immediate simplification. They&#8217;re optimizing for looking comprehensive, not for maintainability.</p><p><strong>Dead code accumulation</strong>: They often don&#8217;t clean up after themselves. Old implementations linger. Comments get removed as side effects. Code they don&#8217;t fully understand gets altered anyway because it was adjacent to the task.</p><p><strong>Sycophantic agreement</strong>: They don&#8217;t always push back. No &#8220;Are you sure?&#8221; or &#8220;Have you considered...?&#8221; Just enthusiastic execution of whatever you described, even if your description was incomplete or contradictory.</p><p><strong>It&#8217;s possible to mitigate some of this via Skills if you know what to watch for.</strong></p><p>These otherwise persist despite system prompts, despite CLAUDE.md instructions, despite plan mode. They&#8217;re not bugs to be fixed - they&#8217;re sometimes inherent to how these systems work. </p><p><strong>Agents optimize for coherent output, not for questioning your premises.</strong></p><p>I've watched this happen on my own teams - code that looks right in review but breaks three commits later when someone touches an adjacent system. </p><p>If you&#8217;re data minded, recent <a href="https://www.sonarsource.com/blog/ai-coding-trust-gap/">survey data</a> suggests &#8220;verification bottleneck&#8221; has emerged: only 48% of developers consistently check AI-assisted code before committing it, even though 38% find that reviewing AI-generated logic actually requires more effort than reviewing human-written code. <strong>We&#8217;re generating correct code faster, but may be accumulating technical debt even faster.</strong></p><h2>Comprehension debt: a hidden cost we don&#8217;t track</h2><p><strong>Generation (writing code) and discrimination (reading code) are different cognitive capabilities. You can review code competently even after your ability to write it from scratch has atrophied. But there&#8217;s a threshold where &#8220;review&#8221; becomes &#8220;rubber stamping.&#8221;</strong></p><p><a href="https://x.com/jeremytwei/status/2015886793955229705">Jeremy Twei</a> coined the perfect term for this: <em>comprehension debt</em>. It&#8217;s certainly tempting to just move on when the LLM one-shotted something that seems to work. This is the insidious part. The agent doesn&#8217;t get tired. It will sprint through implementation after implementation with unwavering confidence. The code looks plausible. The tests pass (or seem to). You&#8217;re under pressure to ship. You move on.</p><p><strong>Over time, you may understand less of your own codebase.</strong></p><p>I caught myself doing this last week. Claude implemented a feature I&#8217;d been putting off for days. The tests passed. I skimmed it, nodded, merged. Three days later I couldn&#8217;t explain how it worked.</p><p>Yoko Li <a href="https://x.com/stuffyokodraws/status/2013373307291340870">captured</a> the addiction loop perfectly: </p><blockquote><p><strong>&#8220;The agent implements an amazing feature and got maybe 10% of the thing wrong, and you&#8217;re like &#8216;hey I can fix this if I just prompt it for 5 more mins.&#8217; And that was 5 hrs ago.&#8221;</strong></p></blockquote><p>You&#8217;re always <em>almost</em> there. The final 10% feels tantalizingly close. Just one more prompt. Just one more iteration. The psychological hook is real.</p><p>Someone <a href="https://news.ycombinator.com/user?id=vibeprofessor">else</a> put it differently: </p><blockquote><p>&#8220;I spend most of my time babysitting agents. The AGI vibes are real, but so is the micromanagement tax. You&#8217;re not coding anymore, you&#8217;re supervising. Watching. Redirecting. It&#8217;s a different kind of exhausting.&#8221;</p></blockquote><p><strong>The dangerous part: it&#8217;s trivially easy to review code you can no longer write from scratch.</strong> If your ability to &#8220;read&#8221; doesn&#8217;t scale with the agent&#8217;s ability to &#8220;output,&#8221; you&#8217;re not engineering anymore. You&#8217;re hoping.</p><h2>The productivity paradox: More code, same throughput</h2><p><strong>Individual output surged 98% in high-adoption teams, but PR review time increased anywhere as high as 91%. </strong></p><p>The data from <a href="https://www.faros.ai/blog/key-takeaways-from-the-dora-report-2025">Faros AI</a> and Google&#8217;s <a href="https://dora.dev/research/2025/dora-report/">DORA report</a> are interesting:</p><ul><li><p>Teams with high AI adoption merged 98% more PRs</p></li><li><p>Those same teams saw review times balloon 91%</p></li><li><p>PR size increased 154% on average</p></li><li><p>Code review became the new bottleneck</p></li></ul><p>Atlassian&#8217;s 2025 survey found the paradox in stark terms: 99% of AI-using developers reported saving 10+ hours per week, yet most reported <em>no decrease in overall workload</em>. The time saved writing code was consumed by organizational friction - more context switching, more coordination overhead, managing the higher volume of changes.</p><p><strong>We got faster cars, but the roads got more congested.</strong></p><p>We're producing more code but spending more time reviewing it. The bottleneck just moved. When you make a resource cheaper (in this case, code generation), consumption increases faster than efficiency improves, and total resource use goes up. </p><p>We&#8217;re not writing less code. We&#8217;re writing <em>vastly</em> more code, and someone still has to understand much of it. There are of course groups of developers who feel this should no longer be the case if AI can do that.</p><h2>Where the 80/20 split actually works</h2><p><strong>The 80% threshold is most accessible in greenfield contexts where you control the entire stack and comprehension debt stays manageable through small team size.</strong></p><p>This actually works in a few contexts. </p><ul><li><p>Personal projects where you control everything</p></li><li><p>MVPs where &#8220;good enough&#8221; is actually good enough</p></li><li><p>Startups in greenfield territory without legacy constraints</p></li><li><p>Teams small enough that comprehension debt stays manageable</p></li></ul><p>In these environments, the agent&#8217;s weaknesses matter less. You can scaffold rapidly, refactor aggressively, throw away code without political friction. The pace of iteration outweighs occasional misdirection.</p><p>In mature codebases with complex invariants, the calculus inverts. The agent doesn&#8217;t know what it doesn&#8217;t know. It can&#8217;t intuit the unwritten rules. Its confidence scales inversely with context understanding.</p><p>Someone pointed out the obvious thing I was tiptoeing around: the first 90% might be easy, but the last 10% can take a long time. 90% accuracy is fine for non-mission-critical stuff. For the parts that actually matter, it's nowhere close. Self-driving cars work great until they don't, and that's why L2 is everywhere but L4 is still mostly vaporware.</p><p>For non-engineers, the wall is lower but still real. Tools like AI Studio, v0 and Bolt can turn sketches into working prototypes instantly. But hardening that prototype for production - handling real user data at scale, ensuring security and compliance - still requires engineering fundamentals. AI gets you 80% to an MVP; the last 20% requires patience, learning deeply or hiring engineers.</p><h2>Two different populations</h2><p><strong>We&#8217;re not seeing a smooth curve of adoption - we&#8217;re seeing a split between those who&#8217;ve crossed the threshold and everyone else. The gap between early adopters and the rest is widening, not closing.</strong></p><p>Armin&#8217;s poll revealed what raw adoption numbers obscure: 44% of developers still write over 90% of their code manually. We have a bimodal distribution, not a bell curve. On one side: people like Karpathy and the Claude Code team, shipping dozens of PRs daily with 100% AI-written code, iterating faster than ever before. On the other: the vast majority, incrementally adopting copilot-style tools but not fundamentally changing their workflow.</p><p>The age split may be visible in discourse too. Younger developers seem more willing to adapt workflow radically. Older developers are more skeptical - not because they can't use the tools, but because they've seen enough cycles to know the difference between a temporary productivity boost and a sustainable practice. Both might be right.</p><p>Stack Overflow&#8217;s 2025 survey showed only 16% reported &#8220;great&#8221; productivity improvements. Half saw modest gains. The top frustrations: &#8220;AI solutions that are almost right, but not quite&#8221; (66%) and &#8220;debugging AI code takes longer than writing it myself&#8221; (45%).</p><p>The engineers who <em>appear</em> to be thriving in 2026 aren&#8217;t just using better tools. They&#8217;ve reconceptualized their role from <em>implementer</em> to <em>orchestrator</em>. They&#8217;ve learned to think declaratively rather than imperatively. They&#8217;ve accepted that their job is now architectural oversight and quality control, not line-by-line coding.</p><p>Those struggling are trying to use AI as a faster typewriter. They haven&#8217;t adapted their workflow. They&#8217;re fighting the agent&#8217;s approach instead of redirecting its goals. They haven&#8217;t invested in learning to prompt effectively which is now as critical as writing good documentation or design specs ever was.</p><p>There's an uncomfortable truth here: <strong>orchestrating agents feels a lot like <a href="https://addyosmani.com/blog/coding-agents-manager/">management</a></strong>. Delegating tasks. Reviewing output. Redirecting when things go sideways. If you became an engineer because you didn't want to be a manager, this shift might feel like a betrayal. The role changed underneath you.</p><p><strong>The gap seems to be widening. The people who&#8217;ve figured out how to work with these tools are shipping stuff I can barely keep up with. Everyone else is... still figuring it out.</strong></p><p>This split may make some uncomfortable. I&#8217;ve always said I&#8217;m a builder, but I also enjoyed programming. The idea that these are now diverging paths - that you have to pick one - feels reductive. Like we&#8217;re forcing a binary on something more complicated. Someone in the comments said it perfectly: both viewpoints are valid, just different wiring. Neither is wrong.</p><h2>From imperative to declarative: The real leverage</h2><p><strong>Don&#8217;t tell the AI what to do - give it success criteria and watch it loop. The magic isn&#8217;t in the agent writing code, it&#8217;s in the agent iterating until it satisfies conditions you specify.</strong></p><p>Karpathy&#8217;s observation about leverage cuts to the core: </p><blockquote><p><strong>&#8220;LLMs are exceptionally good at looping until they meet specific goals and this is where most of the &#8216;feel the AGI&#8217; magic is to be found.&#8221;</strong></p></blockquote><p>The shift from imperative to declarative development:</p><p><strong>Old model (imperative)</strong>: &#8220;Write a function that takes X and returns Y. Use this library. Handle these edge cases. Make sure to...&#8221;</p><p><strong>New model (declarative)</strong>: &#8220;Here are the requirements. Here are the tests that must pass. Here&#8217;s the success criteria. Figure out how.&#8221;</p><p>This works because agents never get demoralized. They&#8217;ll try approaches you wouldn&#8217;t have patience for. They iterate relentlessly. If you specify the destination clearly, they&#8217;ll navigate there - even if it takes 30 failed attempts.</p><p>The patterns that work:</p><ul><li><p>Write tests first, let the agent iterate until they pass</p></li><li><p>Hook it up to a browser via MCP, let it verify behavior visually</p></li><li><p>Implement the naive correct version, then optimize while preserving correctness</p></li><li><p>Define the API contract, let it implement to spec</p></li></ul><p>But this only works if your success criteria are actually correct. Garbage in, garbage out scales with capability.</p><p>The developers succeeding with this approach spend 70% of their time on problem definition and verification strategy, 30% on execution. The ratios inverted from traditional development, but the total time decreased dramatically.</p><h2>The slopacolypse question</h2><p><strong>When anyone can generate thousands of lines of code in minutes, the ability to say &#8216;we don&#8217;t need this&#8217; becomes more valuable.</strong></p><p>Karpathy warned: </p><blockquote><p>&#8220;<strong>I am bracing for 2026 as the year of the slopacolypse across all of github, substack, arxiv, X/instagram, and generally all digital media.&#8221;</strong></p></blockquote><p>The concern is straightforward: when anyone can generate arbitrarily large volumes of plausible-looking code, content, papers, or posts, how do we maintain signal-to-noise ratio?</p><p>Boris Cherny offers a counterpoint: &#8220;My bet is that there will be no slopcopolypse because the model will become better at writing less sloppy code and at fixing existing code issues. In the meantime, what helps is having the model code review its code using a fresh context window.&#8221;</p><p>Both can be true simultaneously. The capability for slop exists at unprecedented scale. The tooling to prevent it is emerging. The question is which scales faster.</p><p><strong>The slopacolypse will be driven by people who mistake velocity for productivity.</strong> Agents are marathon runners with no sense of direction unless you give it to them. They will sprint ten miles into a brick wall if you don&#8217;t audit the &#8220;code actions&#8221; where necessary.</p><p>The teams I&#8217;ve seen handle this well tend to do a few things:</p><ul><li><p>Fresh-context code reviews help, though it feels weird asking the same model to critique its own code. It works, though - give it a clean slate and it catches its own mistakes.</p></li><li><p>Automated verification at every step (CI/CD, linters, type checkers, tests as guardrails)</p></li><li><p>Deliberate constraints on agent autonomy (bounded tasks, clear success criteria)</p></li><li><p>High emphasis on human-in-the-loop at architectural decision points</p></li></ul><p>The code quality problems Karpathy describes - overcomplication, abstraction bloat, dead code - these improve as models improve. But they won&#8217;t disappear. They&#8217;re emergent from how these systems approach problems.</p><h2>What actually works: practical patterns</h2><p><strong>The future belongs to those who can maintain a coherent mental model of the macro while agents handle tactical drudgery of the micro.</strong></p><p>After watching teams adapt over the past year, effective patterns have crystallized:</p><p><strong>1. Agent-first drafts with tight iteration loops</strong> </p><p>Don&#8217;t use AI for one-off suggestions. Generate entire first drafts, then refine. The Claude Code team practice: have the model review its own code with a fresh context window. This catches issues before human review.</p><p><strong>2. Declarative communication</strong> </p><p>Spend 70% of effort on problem definition, 30% on execution. Write comprehensive specs, define success criteria, provide test cases up front. Guide the agent&#8217;s goals, not its methods.</p><p><strong>3. Automated verification</strong> </p><p>If you repeatedly fix the same class of mistake, write a test or lint rule preemptively. Make the agent explain its code and flag potential problems before you review.</p><p><strong>4. Deliberate learning vs. just focusing so much on production</strong> </p><p>Use AI as a learning tool, not a crutch (you&#8217;ve heard this a few times now). When the agent writes something you don&#8217;t understand, that&#8217;s a signal to dig deeper. Treat AI-generated code like code from a mentor - review it to learn, not just to ship.</p><p><strong>5. Architectural hygiene</strong> </p><p>More modularization, clearer API boundaries. Well-documented style guides fed into prompts. High-level architecture descriptions provided before coding begins. The planning phase expanded; the coding phase compressed; the review phase focused on design rather than syntax.</p><p><strong>The developers who thrive won&#8217;t be those who generate the most code. They&#8217;ll be those who know which code to generate, when to question the output, and how to maintain comprehension even as their hands leave the keyboard.</strong></p><h2>The uncomfortable truth about skill development</h2><p><strong>If your ability to &#8220;read&#8221; doesn&#8217;t scale at the same rate as the agent&#8217;s ability to &#8220;output,&#8221; you aren&#8217;t engineering anymore. You&#8217;re rubber stamping.</strong></p><blockquote><p>&#8220;It&#8217;s been like the boiling frog for me. Started by copy-pasting more into ChatGPT. Then more in-IDE prompting. Then agent tools. Suddenly I barely hand code anymore. The transition was so gradual I didn&#8217;t notice until I was already there&#8221; [<a href="https://news.ycombinator.com/user?id=shawabawa3">HN</a>]</p></blockquote><p>There&#8217;s early evidence of skill atrophy in heavy AI users. Junior developers who rely on AI for everything report feeling less confident in problem-solving abilities over time. It&#8217;s the Google effect applied to coding - when you outsource constantly, your brain stops retaining.</p><p>I don&#8217;t know what the solution is, but I&#8217;ve been trying a few things:</p><ul><li><p>Use TDD: write tests (or think through test cases) before letting AI implement</p></li><li><p>Pair with seniors: discuss AI suggestions in real-time to learn the decision-making process</p></li><li><p>Ask for explanations: have the AI justify its approach, not just generate solutions</p></li><li><p>Alternate: write some features manually to maintain muscle memory</p></li></ul><p><strong>The risk is real: it&#8217;s dangerously easy to review code you can no longer write from scratch.</strong> When that happens, you&#8217;ve become dependent on the tool in a way that limits your growth.</p><p>The engineers who will thrive long-term are those who use AI to accelerate gaining experience, not to bypass it entirely. They maintain their fundamentals while leveraging AI to explore more territory faster.</p><h2>Where this leaves us</h2><p><strong>The shift from 70% to 80% isn&#8217;t about percentages - it&#8217;s about the gap between prototype and production-ready software. That gap is narrowing, but it hasn&#8217;t closed.</strong></p><p>Karpathy asks the right questions: </p><blockquote><p><strong>&#8220;What happens to the &#8216;10X engineer&#8217; - the ratio of productivity between the mean and the max engineer? It&#8217;s quite possible that this grows a lot. Armed with LLMs, do generalists increasingly outperform specialists?&#8221;</strong></p></blockquote><p>These questions will define the next few years.</p><p>One thing is certain: AI wrote 80% of code for early adopters in late 2025. Even if your percentage is much lower, it&#8217;s likely higher than a year ago. This places disproportionate emphasis on the human&#8217;s role: owning outcomes, maintaining quality bars, ensuring tests actually validate behavior.</p><p><strong>The danger isn&#8217;t that the agent fails. I think it&#8217;s that it succeeds so confidently in the wrong direction that you stop checking the compass.</strong></p><p>DORA&#8217;s 2025 report crystallized the reality: AI is an amplifier of your development practices. Good processes get better (high-performing teams saw 55-70% faster delivery). Bad processes get worse (accumulating debt at unprecedented speed). There is no silver bullet.</p><p>Karpathy&#8217;s final observation resonates most: </p><blockquote><p><strong>&#8220;I didn&#8217;t anticipate that with agents programming feels </strong><em><strong>more</strong></em><strong> fun because a lot of the fill in the blanks drudgery is removed and what remains is the creative part. I also feel less blocked/stuck and I experience a lot more courage because there&#8217;s almost always a way to work hand in hand with it to make some positive progress.&#8221;</strong></p></blockquote><p>He also notes: &#8220;LLM coding will split up engineers based on those who primarily liked coding and those who primarily liked building.&#8221;</p><p><strong>That&#8217;s probably the most insightful prediction about where this is headed.</strong></p><p>If you liked the act of writing code itself - the craft of it, the meditation of it - this transition might feel like loss. If you liked building things and code was the necessary means, this feels like liberation.</p><p>Neither response is wrong. But the tooling is optimizing for the latter.</p><h2>For the skeptics (you&#8217;re right to be skeptical)</h2><p>The productivity claims are often overhyped. AI still makes mistakes a competent junior wouldn&#8217;t. Comprehension debt is real and poorly understood. The slopacolypse risk is genuine.</p><p>But the shift is real. When Karpathy admits he barely writes code directly anymore, when the Claude Code team ships 20+ PRs daily with 100% AI-written code, we&#8217;re past the point of dismissing this as hype.</p><p><strong>As software engineers, our identity was never &#8220;the person who can write code&#8221; - it was &#8220;the person who can solve problems with software.&#8221;</strong></p><p>AI isn&#8217;t replacing engineers. It&#8217;s amplifying them - for better and for worse.</p><p>My advice: embrace the tools, but own the outcome. Use AI to accelerate learning, not skip it. Focus on fundamentals that matter more than ever: robust architecture, clean code, thorough tests, thoughtful UX. These remain as important as ever - maybe more so, since implementation is no longer the bottleneck.</p><p>I don&#8217;t know where this goes. Karpathy&#8217;s probably right that it&#8217;ll split people between those who liked coding and those who liked building. </p><p>We&#8217;re all figuring this out in public, one PR at a time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!lmAD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lmAD!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png 424w, /__u/substackcdn.com/image/fetch/$s_!lmAD!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png 848w, /__u/substackcdn.com/image/fetch/$s_!lmAD!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lmAD!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lmAD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9189021-cd66-44d9-8683-520663047835_2400x1350.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;:2876019,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/185933546?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!lmAD!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png 424w, /__u/substackcdn.com/image/fetch/$s_!lmAD!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png 848w, /__u/substackcdn.com/image/fetch/$s_!lmAD!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lmAD!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9189021-cd66-44d9-8683-520663047835_2400x1350.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>]]></content:encoded></item><item><title><![CDATA[How to write a good spec for AI agents]]></title><description><![CDATA[How to structure, plan, and iterate for high-performance coding agents]]></description><link>https://addyo.substack.com/p/how-to-write-a-good-spec-for-ai-agents</link><guid isPermaLink="false">https://addyo.substack.com/p/how-to-write-a-good-spec-for-ai-agents</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Mon, 19 Jan 2026 15:31:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qALe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>TL;DR: Aim for a clear spec covering just enough nuance (this may include structure, style, testing, boundaries) to guide the AI without overwhelming it. Break large tasks into smaller ones vs. keeping everything in one large prompt. Plan first in read-only mode, then execute and iterate continuously.</strong></p><blockquote><p><em>&#8220;I&#8217;ve heard a lot about writing good specs for AI agents, but haven&#8217;t found a solid framework yet. I could write a spec that rivals an RFC, but at some point the context is too large and the model breaks down.&#8221;</em></p></blockquote><p>Many developers share this frustration. Simply throwing a massive spec at an AI agent doesn&#8217;t work - context window limits and the model&#8217;s &#8220;attention budget&#8221; get in the way. The key is to write smart specs: documents that guide the agent clearly, stay within practical context sizes, and evolve with the project. This guide distills best practices from my use of coding agents including Claude Code and Gemini CLI into a framework for spec-writing that keeps your AI agents focused and productive.</p><p>We&#8217;ll cover five principles for great AI agent specs, each starting with a bolded takeaway.</p><h2><strong>1. Start with a high-level vision and let the AI draft the details</strong></h2><p><strong>Kick off your project with a concise high-level spec, then have the AI expand it into a detailed plan.</strong></p><p>Instead of over-engineering upfront, begin with a clear goal statement and a few core requirements. Treat this as a &#8220;product brief&#8221; and let the agent generate a more elaborate spec from it. This leverages the AI&#8217;s strength in elaboration while you maintain control of the direction. This works well unless you already feel you have very specific technical requirements that must be met from the start.</p><p><strong>Why this works:</strong> LLM-based agents excel at fleshing out details when given a solid high-level directive, but they need a clear mission to avoid drifting off course. By providing a short outline or objective description and asking the AI to produce a full specification (e.g. a spec.md), you create a persistent reference for the agent. Planning in advance matters even more with an agent - you can iterate on the plan first, then hand it off to the agent to write the code. The spec becomes the first artifact you and the AI build together.</p><p><strong>Practical approach:</strong> Start a new coding session by prompting:</p><blockquote><p>&#8220;You are an AI software engineer. Draft a detailed specification for [project X] covering objectives, features, constraints, and a step-by-step plan.&#8221; </p><p>Keep your initial prompt high-level - e.g. &#8220;Build a web app where users can track tasks (to-do list), with user accounts, a database, and a simple UI&#8221;. </p></blockquote><p>The agent might respond with a structured draft spec: an overview, feature list, tech stack suggestions, data model, and so on. This spec then becomes the &#8220;source of truth&#8221; that both you and the agent can refer back to. GitHub&#8217;s AI team promotes <a href="https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/">spec-driven development</a> where &#8220;specs become the shared source of truth&#8230; living, executable artifacts that evolve with the project&#8221;. Before writing any code, review and refine the AI&#8217;s spec. Make sure it aligns with your vision and correct any hallucinations or off-target details.</p><p><strong>Use Plan Mode to enforce planning-first:</strong> Tools like Claude Code offer a <a href="https://code.claude.com/docs/en/common-workflows">Plan Mode</a> that restricts the agent to read-only operations - it can analyze your codebase and create detailed plans but won&#8217;t write any code until you&#8217;re ready. This is ideal for the planning phase: start in Plan Mode (Shift+Tab in Claude Code), describe what you want to build, and let the agent draft a spec while exploring your existing code. Ask it to clarify ambiguities by questioning you about the plan. Have it review the plan for architecture, best practices, security risks, and testing strategy. The goal is to refine the plan until there&#8217;s no room for misinterpretation. Only then do you exit Plan Mode and let the agent execute. This workflow prevents the common trap of jumping straight into code generation before the spec is solid.</p><p><strong>Use the spec as context:</strong> Once approved, save this spec (e.g. as SPEC.md) and feed relevant sections into the agent as needed. Many developers using a strong model do exactly this - the spec file persists between sessions, anchoring the AI whenever work resumes on the project. This mitigates the forgetfulness that can happen when the conversation history gets too long or when you have to restart an agent. It&#8217;s akin to how one would use a Product Requirements Document (PRD) in a team: a reference that everyone (human or AI) can consult to stay on track. Experienced folks often &#8220;<a href="https://simonwillison.net/2025/Oct/7/vibe-engineering/">write good documentation first</a> and the model may be able to build the matching implementation from that input alone&#8221; as one engineer observed. The spec is that documentation.</p><p><strong>Keep it goal-oriented:</strong> A high-level spec for an AI agent should focus on what and why, more than the nitty-gritty how (at least initially). Think of it like the user story and acceptance criteria: Who is the user? What do they need? What does success look like? (e.g. &#8220;User can add, edit, complete tasks; data is saved persistently; the app is responsive and secure&#8221;). This keeps the AI&#8217;s detailed spec grounded in user needs and outcome, not just technical to-dos. As the <a href="https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/">GitHub Spec Kit docs</a> put it, provide a high-level description of what you&#8217;re building and why, and let the coding agent generate a detailed specification focusing on user experience and success criteria. Starting with this big-picture vision prevents the agent from losing sight of the forest for the trees when it later gets into coding.</p><h2><strong>2. Structure the spec like a professional PRD (or SRS)</strong></h2><p><strong>Treat your AI spec as a structured document (PRD) with clear sections, not a loose pile of notes.</strong></p><p>Many developers treat specs for agents much like traditional Product Requirement Documents (PRDs) or System Design docs - comprehensive, well-organized, and easy for a &#8220;literal-minded&#8221; AI to parse. This formal approach gives the agent a blueprint to follow and reduces ambiguity.</p><p><strong>The six core areas:</strong> GitHub&#8217;s analysis of <a href="https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/">over 2,500 agent configuration files</a> revealed a clear pattern: the most effective specs cover six areas. Use this as a checklist for completeness:</p><p><strong>1. Commands:</strong> Put executable commands early - not just tool names, but full commands with flags: <code>npm test</code>, <code>pytest -v</code>, <code>npm run build</code>. The agent will reference these constantly.</p><p><strong>2. Testing:</strong> How to run tests, what framework you use, where test files live, and what coverage expectations exist.</p><p><strong>3. Project structure:</strong> Where source code lives, where tests go, where docs belong. Be explicit: &#8220;<code>src/</code> for application code, <code>tests/</code> for unit tests, <code>docs/</code> for documentation.&#8221;</p><p><strong>4. Code style:</strong> One real code snippet showing your style beats three paragraphs describing it. Include naming conventions, formatting rules, and examples of good output.</p><p><strong>5. Git workflow:</strong> Branch naming, commit message format, PR requirements. The agent can follow these if you spell them out.</p><p><strong>6. Boundaries:</strong> What the agent should never touch - secrets, vendor directories, production configs, specific folders. &#8220;Never commit secrets&#8221; was the single most common helpful constraint in the GitHub study.</p><p><strong>Be specific about your stack:</strong> Say &#8220;React 18 with TypeScript, Vite, and Tailwind CSS&#8221; not &#8220;React project.&#8221; Include versions and key dependencies. Vague specs produce vague code.</p><p><strong>Use a consistent format:</strong> Clarity is king. Many devs use Markdown headings or even XML-like tags in the spec to delineate sections, because AI models handle well-structured text better than free-form prose. For example, you might structure the spec as:</p><pre><code><code># Project Spec: My team's tasks app

## Objective
- Build a web app for small teams to manage tasks...

## Tech Stack
- React 18+, TypeScript, Vite, Tailwind CSS
- Node.js/Express backend, PostgreSQL, Prisma ORM

## Commands
- Build: `npm run build` (compiles TypeScript, outputs to dist/)
- Test: `npm test` (runs Jest, must pass before commits)
- Lint: `npm run lint --fix` (auto-fixes ESLint errors)

## Project Structure
- `src/` &#8211; Application source code
- `tests/` &#8211; Unit and integration tests
- `docs/` &#8211; Documentation

## Boundaries
- &#9989; Always: Run tests before commits, follow naming conventions
- &#9888;&#65039; Ask first: Database schema changes, adding dependencies
- &#128683; Never: Commit secrets, edit node_modules/, modify CI config
</code></code></pre><p>This level of organization not only helps you think clearly, it helps the AI find information. Anthropic engineers recommend <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">organizing prompts into distinct sections</a> (like &lt;background&gt;, &lt;instructions&gt;, &lt;tools&gt;, &lt;output_format&gt; etc.) for exactly this reason - it gives the model strong cues about which info is which. And remember, &#8220;minimal does not necessarily mean short&#8221; - don&#8217;t shy away from detail in the spec if it matters, but keep it focused.</p><p><strong>Integrate specs into your toolchain:</strong> Treat specs as &#8220;executable artifacts&#8221; tied to version control and CI/CD. The <a href="https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/">GitHub Spec Kit</a> uses a four-phase, gated workflow that makes your specification the center of your engineering process. Instead of writing a spec and setting it aside, the spec drives the implementation, checklists, and task breakdowns. Your primary role is to steer; the coding agent does the bulk of the writing. Each phase has a specific job, and you don&#8217;t move to the next one until the current task is fully validated:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Z2M7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Z2M7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Z2M7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Z2M7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Z2M7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Z2M7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg" width="1456" height="803" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:803,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Spec Driven Development Workflow&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Spec Driven Development Workflow" title="Spec Driven Development Workflow" srcset="/__u/substackcdn.com/image/fetch/$s_!Z2M7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!Z2M7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!Z2M7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!Z2M7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49888e6f-2aaf-4689-aeab-22957a766bf9_2784x1536.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong>1. Specify:</strong> You provide a high-level description of what you&#8217;re building and why, and the coding agent generates a detailed specification. This isn&#8217;t about technical stacks or app design - it&#8217;s about user journeys, experiences, and what success looks like. Who will use this? What problem does it solve? How will they interact with it? Think of it as mapping the user experience you want to create, and letting the coding agent flesh out the details. This becomes a living artifact that evolves as you learn more.</p><p><strong>2. Plan:</strong> Now you get technical. You provide your desired stack, architecture, and constraints, and the coding agent generates a comprehensive technical plan. If your company standardizes on certain technologies, this is where you say so. If you&#8217;re integrating with legacy systems or have compliance requirements, all of that goes here. You can ask for multiple plan variations to compare approaches. If you make internal docs available, the agent can integrate your architectural patterns directly into the plan.</p><p><strong>3. Tasks:</strong> The coding agent takes the spec and plan and breaks them into actual work - small, reviewable chunks that each solve a specific piece of the puzzle. Each task should be something you can implement and test in isolation, almost like test-driven development for your AI agent. Instead of &#8220;build authentication,&#8221; you get concrete tasks like &#8220;create a user registration endpoint that validates email format.&#8221;</p><p><strong>4. Implement:</strong> Your coding agent tackles tasks one by one (or in parallel). Instead of reviewing thousand-line code dumps, you review focused changes that solve specific problems. The agent knows what to build (specification), how to build it (plan), and what to work on (task). Crucially, your role is to verify at each phase: Does the spec capture what you want? Does the plan account for constraints? Are there edge cases the AI missed? The process builds in checkpoints for you to critique, spot gaps, and course-correct before moving forward.</p><p>This gated workflow prevents what Willison calls &#8220;house of cards code&#8221; - fragile AI outputs that collapse under scrutiny. Anthropic&#8217;s Skills system offers a similar pattern, letting you define reusable Markdown-based behaviors that agents invoke. By embedding your spec in these workflows, you ensure the agent can&#8217;t proceed until the spec is validated, and changes propagate automatically to task breakdowns and tests.</p><p><strong>Consider agents.md for specialized personas:</strong> For tools like GitHub Copilot, you can create <a href="https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/">agents.md files</a> that define specialized agent personas - a @docs-agent for technical writing, a @test-agent for QA, a @security-agent for code review. Each file acts as a focused spec for that persona&#8217;s behavior, commands, and boundaries. This is particularly useful when you want different agents for different tasks rather than one general-purpose assistant.</p><p><strong>Design for Agent Experience (AX):</strong> Just as we design APIs for developer experience (DX), consider designing specs for &#8220;Agent Experience.&#8221; This means clean, parseable formats: OpenAPI schemas for any APIs the agent will consume, llms.txt files that summarize documentation for LLM consumption, and explicit type definitions. The Agentic AI Foundation (AAIF) is standardizing protocols like MCP (Model Context Protocol) for tool integration - specs that follow these patterns are easier for agents to consume and act on reliably.</p><p><strong>PRD vs SRS mindset:</strong> It helps to borrow from established documentation practices. For AI agent specs, you&#8217;ll often blend these into one document (as illustrated above), but covering both angles serves you well. Writing it like a PRD ensures you include user-centric context (&#8220;the why behind each feature&#8221;) so the AI doesn&#8217;t optimize for the wrong thing. Expanding it like an SRS ensures you nail down the specifics the AI will need to actually generate correct code (like what database or API to use). Developers have found that this extra upfront effort pays off by drastically reducing miscommunications with the agent later.</p><p><strong>Make the spec a &#8220;living document&#8221;:</strong> Don&#8217;t write it and forget it. Update the spec as you and the agent make decisions or discover new info. If the AI had to change the data model or you decided to cut a feature, reflect that in the spec so it remains the ground truth. Think of it as version-controlled documentation. In <a href="https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/">spec-driven workflows</a>, the spec drives implementation, tests, and task breakdowns, and you don&#8217;t move to coding until the spec is validated. This habit keeps the project coherent, especially if you or the agent step away and come back later. Remember, the spec isn&#8217;t just for the AI - it helps you as the developer maintain oversight and ensure the AI&#8217;s work meets the real requirements.</p><h2><strong>3. Break tasks into modular prompts and context, not one big prompt</strong></h2><p><strong>Divide and conquer: give the AI one focused task at a time rather than a monolithic prompt with everything at once.</strong></p><p>Experienced AI engineers have learned that trying to stuff the entire project (all requirements, all code, all instructions) into a single prompt or agent message is a recipe for confusion. Not only do you risk hitting token limits, you also risk the model losing focus due to the &#8220;<a href="https://maxpool.dev/research-papers/curse_of_instructions_report.html">curse of instructions</a>&#8221; - too many directives causing it to follow none of them well. The solution is to design your spec and workflow in a modular way, tackling one piece at a time and pulling in only the context needed for that piece.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BNjq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BNjq!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!BNjq!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!BNjq!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!BNjq!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BNjq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg" width="1456" height="803" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:803,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Modular AI Specs&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Modular AI Specs" title="Modular AI Specs" srcset="/__u/substackcdn.com/image/fetch/$s_!BNjq!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!BNjq!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!BNjq!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!BNjq!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f49a9b2-c2fd-4e49-9452-73c9d3f88901_2784x1536.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong>The curse of too much context/instructions:</strong> Research has confirmed what many devs anecdotally saw: as you pile on more instructions or data into the prompt, the model&#8217;s performance in adhering to each one <a href="https://openreview.net/pdf/848f1332e941771aa491f036f6350af2effe0513.pdf">drops significantly</a>. One study dubbed this the &#8220;curse of instructions&#8221;, showing that even GPT-4 and Claude struggle when asked to satisfy many requirements simultaneously. In practical terms, if you present 10 bullet points of detailed rules, the AI might obey the first few and start overlooking others. The better strategy is iterative focus. <a href="https://maxpool.dev/research-papers/curse_of_instructions_report.html">Guidelines from industry</a> suggest decomposing complex requirements into sequential, simple instructions as a best practice. Focus the AI on one sub-problem at a time, get that done, then move on. This keeps the quality high and errors manageable.</p><p><strong>Divide the spec into phases or components:</strong> If your spec document is very long or covers a lot of ground, consider splitting it into parts (either physically separate files or clearly separate sections). For example, you might have a section for &#8220;Backend API Spec&#8221; and another for &#8220;Frontend UI Spec.&#8221; You don&#8217;t need to always feed the frontend spec to the AI when it&#8217;s working on the backend, and vice versa. Many devs using multi-agent setups even create separate agents or sub-processes for each part - e.g. one agent works on database/schema, another on API logic, another on frontend - each with the relevant slice of the spec. Even if you use a single agent, you can emulate this by copying only the relevant spec section into the prompt for that task. Avoid context overload: Don&#8217;t mix authentication tasks with database schema changes in one go, as the <a href="https://docs.digitalocean.com/products/gradient-ai-platform/concepts/context-management/">DigitalOcean AI guide</a> warns. Keep each prompt tightly scoped to the current goal.</p><p><strong>Extended TOC / Summaries for large specs:</strong> One clever technique is to have the agent build an extended Table of Contents with summaries for the spec. This is essentially a &#8220;spec summary&#8221; that condenses each section into a few key points or keywords, and references where details can be found. For example, if your full spec has a section on &#8220;Security Requirements&#8221; spanning 500 words, you might have the agent summarize it to: &#8220;Security: use HTTPS, protect API keys, implement input validation (see full spec &#167;4.2)&#8221;. By creating a hierarchical summary in the planning phase, you get a bird&#8217;s-eye view that can stay in the prompt, while the fine details remain offloaded unless needed. This extended TOC acts as an index: the agent can consult it and say &#8220;aha, there&#8217;s a security section I should look at&#8221;, and you can then provide that section on demand. It&#8217;s similar to how a human developer skims an outline and then flips to the relevant page of a spec document when working on a specific part.</p><p>To implement this, you can prompt the agent after writing the spec: &#8220;Summarize the spec above into a very concise outline with each section&#8217;s key points and a reference tag.&#8221; The result might be a list of sections with one or two sentence summaries. That summary can be kept in the system or assistant message to guide the agent&#8217;s focus without eating up too many tokens. This <a href="/__u/addyo.substack.com/p/context-engineering-bringing-engineering">hierarchical summarization approach</a> is known to help LLMs maintain long-term context by focusing on the high-level structure. The agent carries a &#8220;mental map&#8221; of the spec.</p><p><strong>Utilize sub-agents or &#8220;skills&#8221; for different spec parts:</strong> Another advanced approach is using multiple specialized agents (what Anthropic calls subagents or what you might call &#8220;skills&#8221;). Each subagent is configured for a specific area of expertise and given the portion of the spec relevant to that area. For instance, you might have a Database Designer subagent that only knows about the data model section of the spec, and an API Coder subagent that knows the API endpoints spec. The main agent (or an orchestrator) can route tasks to the appropriate subagent automatically. The benefit is each agent has a smaller context window to deal with and a more focused role, which can <a href="https://10xdevelopers.dev/structured/claude-code-with-subagents/">boost accuracy and allow parallel work</a> on independent tasks. Anthropic&#8217;s Claude Code supports this by letting you define subagents with their own system prompts and tools. &#8220;Each subagent has a specific purpose and expertise area, uses its own context window separate from the main conversation, and has a custom system prompt guiding its behavior,&#8221; as their docs describe. When a task comes up that matches a subagent&#8217;s domain, Claude can delegate that task to it, with the subagent returning results independently.</p><p><strong>Parallel agents for throughput:</strong> Running multiple agents simultaneously is emerging as &#8220;the next big thing&#8221; for developer productivity. Rather than waiting for one agent to finish before starting another task, you can spin up parallel agents for non-overlapping work. Willison describes this as &#8220;<a href="https://simonwillison.net/2025/Oct/7/vibe-engineering/">embracing parallel coding agents</a>&#8221; and notes it&#8217;s &#8220;surprisingly effective, if mentally exhausting&#8221;. The key is scoping tasks so agents don&#8217;t step on each other - one agent codes a feature while another writes tests, or separate components get built concurrently. Orchestration frameworks like LangGraph or OpenAI Swarm can help coordinate these agents, and shared memory via vector databases (like Chroma) lets them access common context without redundant prompting.</p><p><strong>Single vs. multi-agent: when to use each</strong></p><p><strong>AspectSingle AgentParallel/Multi-AgentStrengths</strong>Simpler setup; lower overhead; easier to debug and followHigher throughput; handles complex interdependencies; specialists per domain<strong>Challenges</strong>Context overload on big projects; slower iteration; single point of failureCoordination overhead; potential conflicts; needs shared memory (e.g., vector DBs)<strong>Best For</strong>Isolated modules; small-to-medium projects; early prototypingLarge codebases; one codes + one tests + one reviews; independent features<strong>Tips</strong>Use spec summaries; refresh context per task; start fresh sessions oftenLimit to 2-3 agents initially; use MCP for tool sharing; define clear boundaries</p><p>In practice, using subagents or skill-specific prompts might look like: you maintain multiple spec files (or prompt templates) - e.g. SPEC_backend.md, SPEC_frontend.md - and you tell the AI, &#8220;For backend tasks, refer to SPEC_backend; for frontend tasks refer to SPEC_frontend.&#8221; Or in a tool like Cursor/Claude, you actually spin up a subagent for each. This is certainly more complex to set up than a single-agent loop, but it mimics what human developers do - we mentally compartmentalize a large spec into relevant chunks (you don&#8217;t keep the whole 50-page spec in your head at once; you recall the part you need for the task at hand, and have a general sense of the overall architecture). The challenge, as noted, is managing interdependencies: the subagents must still coordinate (the frontend needs to know the API contract from the backend spec, etc.). A central overview (or an &#8220;architect&#8221; agent) can help by referencing the sub-specs and ensuring consistency.</p><p><strong>Focus each prompt on one task/section:</strong> Even without fancy multi-agent setups, you can manually enforce modularity. For example, after the spec is written, your next move might be: &#8220;Step 1: Implement the database schema.&#8221; You feed the agent the Database section of the spec only, plus any global constraints from the spec (like tech stack). The agent works on that. Then for Step 2, &#8220;Now implement the authentication feature&#8221;, you provide the Auth section of the spec and maybe the relevant parts of the schema if needed. By refreshing the context for each major task, you ensure the model isn&#8217;t carrying a lot of stale or irrelevant information that could distract it. As one guide suggests: &#8220;<a href="https://docs.digitalocean.com/products/gradient-ai-platform/concepts/context-management/">Start fresh: begin new sessions</a> to clear context when switching between major features&#8221;. You can always remind the agent of critical global rules (from the spec&#8217;s Constraints section) each time, but don&#8217;t shove the entire spec in if it&#8217;s not all needed.</p><p><strong>Use in-line directives and code TODOs:</strong> Another modularity trick is to use your code or spec as an active part of the conversation. For instance, scaffold your code with // TODO comments that describe what needs to be done, and have the agent fill them one by one. Each TODO essentially acts as a mini-spec for a small task. This keeps the AI laser-focused (&#8220;implement this specific function according to this spec snippet&#8221;) and you can iterate in a tight loop. It&#8217;s similar to giving the AI a checklist item to complete rather than the whole checklist at once.</p><p>The bottom line: small, focused context beats one giant prompt. This improves quality and keeps the AI from getting &#8220;overwhelmed&#8221; by too much at once. As one set of best practices sums up, provide &#8220;One Task Focus&#8221; and &#8220;Relevant info only&#8221; to the model, and avoid dumping everything everywhere. By structuring the work into modules - and using strategies like spec summaries or sub-spec agents - you&#8217;ll navigate around context size limits and the AI&#8217;s short-term memory cap. Remember, a well-fed AI is like a well-fed function: give it only the <a href="/__u/addyo.substack.com/p/context-engineering-bringing-engineering">inputs it needs for the job at hand</a>.</p><h2><strong>4. Build in self-checks, constraints, and human expertise</strong></h2><p><strong>Make your spec not just a to-do list for the agent, but also a guide for quality control - and don&#8217;t be afraid to inject your own expertise.</strong></p><p>A good spec for an AI agent anticipates where the AI might go wrong and sets up guardrails. It also takes advantage of what you know (domain knowledge, edge cases, &#8220;gotchas&#8221;) so the AI doesn&#8217;t operate in a vacuum. Think of the spec as both coach and referee for the AI: it should encourage the right approach and call out fouls.</p><p><strong>Use three-tier boundaries:</strong> The <a href="https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/">GitHub analysis of 2,500+ agent files</a> found that the most effective specs use a three-tier boundary system rather than a simple list of don&#8217;ts. This gives the agent clearer guidance on when to proceed, when to pause, and when to stop:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7iHk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7iHk!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!7iHk!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!7iHk!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!7iHk!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7iHk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg" width="1456" height="803" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:803,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Three tier boundaries for AI agent specs&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Three tier boundaries for AI agent specs" title="Three tier boundaries for AI agent specs" srcset="/__u/substackcdn.com/image/fetch/$s_!7iHk!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!7iHk!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!7iHk!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!7iHk!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789bc70-7a7d-498b-b2c8-8e003e43682a_2784x1536.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong>&#9989; Always do:</strong> Actions the agent should take without asking. &#8220;Always run tests before commits.&#8221; &#8220;Always follow the naming conventions in the style guide.&#8221; &#8220;Always log errors to the monitoring service.&#8221;</p><p><strong>&#9888;&#65039; Ask first:</strong> Actions that require human approval. &#8220;Ask before modifying database schemas.&#8221; &#8220;Ask before adding new dependencies.&#8221; &#8220;Ask before changing CI/CD configuration.&#8221; This tier catches high-impact changes that might be fine but warrant a human check.</p><p><strong>&#128683; Never do:</strong> Hard stops. &#8220;Never commit secrets or API keys.&#8221; &#8220;Never edit node_modules/ or vendor/.&#8221; &#8220;Never remove a failing test without explicit approval.&#8221; &#8220;Never commit secrets&#8221; was the single most common helpful constraint in the study.</p><p>This three-tier approach is more nuanced than a flat list of rules. It acknowledges that some actions are always safe, some need oversight, and some are categorically off-limits. The agent can proceed confidently on &#8220;Always&#8221; items, flag &#8220;Ask first&#8221; items for review, and hard-stop on &#8220;Never&#8221; items.</p><p><strong>Encourage self-verification:</strong> One powerful pattern is to have the agent verify its work against the spec automatically. If your tooling allows, you can integrate checks like unit tests or linting that the AI can run after generating code. But even at the spec/prompt level, you can instruct the AI to double-check: e.g. &#8220;After implementing, compare the result with the spec and confirm all requirements are met. List any spec items that are not addressed.&#8221; This pushes the LLM to reflect on its output relative to the spec, catching omissions. It&#8217;s a form of self-audit built into the process.</p><p>For instance, you might append to a prompt: &#8220;(After writing the function, review the above requirements list and ensure each is satisfied, marking any missing ones).&#8221; The model will then (ideally) output the code followed by a short checklist indicating if it met each requirement. This reduces the chance it forgets something before you even run tests. It&#8217;s not foolproof, but it helps.</p><p><strong>LLM-as-a-Judge for subjective checks:</strong> For criteria that are hard to test automatically - code style, readability, adherence to architectural patterns - consider using &#8220;LLM-as-a-Judge.&#8221; This means having a second agent (or a separate prompt) review the first agent&#8217;s output against your spec&#8217;s quality guidelines. Anthropic and others have found this effective for subjective evaluation. You might prompt: &#8220;Review this code for adherence to our style guide. Flag any violations.&#8221; The judge agent returns feedback that either gets incorporated or triggers a revision. This adds a layer of semantic evaluation beyond syntax checks.</p><p><strong>Conformance testing:</strong> Willison advocates building conformance suites - language-independent tests (often YAML-based) that any implementation must pass. These act as a contract: if you&#8217;re building an API, the conformance suite specifies expected inputs/outputs, and the agent&#8217;s code must satisfy all cases. This is more rigorous than ad-hoc unit tests because it&#8217;s derived directly from the spec and can be reused across implementations. Include conformance criteria in your spec&#8217;s Success section (e.g., &#8220;Must pass all cases in conformance/api-tests.yaml&#8221;).</p><p><strong>Leverage testing in the spec:</strong> If possible, incorporate a test plan or even actual tests in your spec and prompt flow. In traditional development, we use TDD or write test cases to clarify requirements - you can do the same with AI. For example, in the spec&#8217;s Success Criteria, you might say &#8220;These sample inputs should produce these outputs&#8230;&#8221; or &#8220;the following unit tests should pass.&#8221; The agent can be prompted to run through those cases in its head or actually execute them if it has that capability. Simon Willison noted that having a <a href="https://simonwillison.net/2025/Oct/7/vibe-engineering/">robust test suite</a> is like giving the agents superpowers - they can validate and iterate quickly when tests fail. In an AI coding context, writing a bit of pseudocode for tests or expected outcomes in the spec can guide the agent&#8217;s implementation. Additionally, you can use a dedicated &#8220;<a href="https://10xdevelopers.dev/structured/claude-code-with-subagents/">test agent</a>&#8221; in a subagent setup that takes the spec&#8217;s criteria and continuously verifies the &#8220;code agent&#8217;s&#8221; output.</p><p><strong>Bring your domain knowledge:</strong> Your spec should reflect insights that only an experienced developer or someone with context would know. For example, if you&#8217;re building an e-commerce agent and you know that &#8220;products&#8221; and &#8220;categories&#8221; have a many-to-many relationship, state that clearly (don&#8217;t assume the AI will infer it - it might not). If a certain library is notoriously tricky, mention pitfalls to avoid. Essentially, pour your mentorship into the spec. The spec can contain advice like &#8220;If using library X, watch out for memory leak issue in version Y (apply workaround Z).&#8221; This level of detail is what turns an average AI output into a truly robust solution, because you&#8217;ve steered the AI away from common traps.</p><p>Also, if you have preferences or style guidelines (say, &#8220;use functional components over class components in React&#8221;), encode that in the spec. The AI will then emulate your style. Many engineers even include small examples in the spec, e.g., &#8220;All API responses should be JSON. E.g. {&#8220;error&#8221;: &#8220;message&#8221;} for errors.&#8221; By giving a quick example, you anchor the AI to the exact format you want.</p><p><strong>Minimalism for simple tasks:</strong> While we advocate thorough specs, part of expertise is knowing when to keep it simple. For relatively simple, isolated tasks, an overbearing spec can actually confuse more than help. If you&#8217;re asking the agent to do something straightforward (like &#8220;center a div on the page&#8221;), you might just say, &#8220;Make sure to keep the solution concise and do not add extraneous markup or styles.&#8221; No need for a full PRD there. Conversely, for complex tasks (like &#8220;implement an OAuth flow with token refresh and error handling&#8221;), that&#8217;s when you break out the detailed spec. A good rule of thumb: adjust spec detail to task complexity. Don&#8217;t under-spec a hard problem (the agent will flail or go off-track), but don&#8217;t over-spec a trivial one (the agent might get tangled or use up context on unnecessary instructions).</p><p><strong>Maintain the AI&#8217;s &#8220;persona&#8221; if needed:</strong> Sometimes, part of your spec is defining how the agent should behave or respond, especially if the agent interacts with users. For example, if building a customer support agent, your spec might include guidelines like &#8220;Use a friendly and professional tone,&#8221; &#8220;If you don&#8217;t know the answer, ask for clarification or offer to follow up, rather than guessing.&#8221; These kind of rules (often included in system prompts) help keep the AI&#8217;s outputs aligned with expectations. They are essentially spec items for AI behavior. Keep them consistent and remind the model of them if needed in long sessions (LLMs can &#8220;drift&#8221; in style over time if not kept on a leash).</p><p><strong>You remain the exec in the loop:</strong> The spec empowers the agent, but you remain the ultimate quality filter. If the agent produces something that technically meets the spec but doesn&#8217;t feel right, trust your judgement. Either refine the spec or directly adjust the output. The great thing about AI agents is they don&#8217;t get offended - if they deliver a design that&#8217;s off, you can say, &#8220;Actually, that&#8217;s not what I intended, let&#8217;s clarify the spec and redo it.&#8221; The spec is a living artifact in collaboration with the AI, not a one-time contract you can&#8217;t change.</p><p>Simon Willison humorously likened working with AI agents to &#8220;a very weird form of management&#8221; and even &#8220;getting good results out of a coding agent feels <a href="https://simonwillison.net/2025/Oct/7/vibe-engineering/">uncomfortably close to managing a human intern</a>&#8221;. You need to provide clear instructions (the spec), ensure they have the necessary context (the spec and relevant data), and give actionable feedback. The spec sets the stage, but monitoring and feedback during execution are key. If an AI was a &#8220;weird digital intern who will absolutely cheat if you give them a chance&#8221;, the spec and constraints you write are how you prevent that cheating and keep them on task.</p><p>Here&#8217;s the payoff: a good spec doesn&#8217;t just tell the AI what to build, it also helps it self-correct and stay within safe boundaries. By baking in verification steps, constraints, and your hard-earned knowledge, you drastically increase the odds that the agent&#8217;s output is correct on the first try (or at least much closer to correct). This reduces iterations and those &#8220;why on Earth did it do that?&#8221; moments.</p><h2><strong>5. Test, iterate, and evolve the spec (and use the right tools)</strong></h2><p><strong>Think of spec-writing and agent-building as an iterative loop: test early, gather feedback, refine the spec, and leverage tools to automate checks.</strong></p><p>The initial spec is not the end - it&#8217;s the beginning of a cycle. The best outcomes come when you continually verify the agent&#8217;s work against the spec and adjust accordingly. Also, modern AI devs use various tools to support this process (from CI pipelines to context management utilities).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!nsmd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!nsmd!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!nsmd!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!nsmd!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!nsmd!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!nsmd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg" width="1024" height="459" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:459,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Spec iteration loop: Test, Feedback, Refine, Tools&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Spec iteration loop: Test, Feedback, Refine, Tools" title="Spec iteration loop: Test, Feedback, Refine, Tools" srcset="/__u/substackcdn.com/image/fetch/$s_!nsmd!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!nsmd!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!nsmd!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!nsmd!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2a7534e-6004-4a41-b28e-c3e437c692af_1024x459.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong>Continuous testing:</strong> Don&#8217;t wait until the end to see if the agent met the spec. After each major milestone or even each function, run tests or at least do quick manual checks. If something fails, update the spec or prompt before proceeding. For example, if the spec said &#8220;passwords must be hashed with bcrypt&#8221; and you see the agent&#8217;s code storing plain text - stop and correct it (and remind the spec or prompt about the rule). Automated tests shine here: if you provided tests (or write them as you go), let the agent run them. In many coding agent setups, you can have an agent run npm test or similar after finishing a task. The results (failures) can then feed back into the next prompt, effectively telling the agent &#8220;your output didn&#8217;t meet spec on X, Y, Z - fix it.&#8221; This kind of agentic loop (code -&gt; test -&gt; fix -&gt; repeat) is extremely powerful and is how tools like Claude Code or Copilot Labs are evolving to handle larger tasks. Always define what &#8220;done&#8221; means (via tests or criteria) and check for it.</p><p><strong>Iterate on the spec itself:</strong> If you discover that the spec was incomplete or unclear (maybe the agent misunderstood something or you realized you missed a requirement), update the spec document. Then explicitly re-sync the agent with the new spec: &#8220;I have updated the spec as follows&#8230; Given the updated spec, adjust the plan or refactor the code accordingly.&#8221; This way the spec remains the single source of truth. It&#8217;s similar to how we handle changing requirements in normal dev - but in this case you&#8217;re also the product manager for your AI agent. Keep version history if possible (even just via commit messages or notes), so you know what changed and why.</p><p><strong>Utilize context-management and memory tools:</strong> There&#8217;s a growing ecosystem of tools to help manage AI agent context and knowledge. For instance, retrieval-augmented generation (RAG) is a pattern where the agent can pull in relevant chunks of data from a knowledge base (like a vector database) on the fly. If your spec is huge, you could embed sections of it and let the agent retrieve the most relevant parts when needed, instead of always providing the whole thing. There are also frameworks implementing the Model Context Protocol (MCP), which automates feeding the right context to the model based on the current task. One example is <a href="https://docs.digitalocean.com/products/gradient-ai-platform/concepts/context-management/">Context7</a> (context7.com), which can auto-fetch relevant context snippets from docs based on what you&#8217;re working on. In practice, this might mean the agent notices you&#8217;re working on &#8220;payment processing&#8221; and it pulls the &#8220;Payments&#8221; section of your spec or documentation into the prompt. Consider leveraging such tools or setting up a rudimentary version (even a simple search in your spec document).</p><p><strong>Parallelize carefully:</strong> Some developers run multiple agent instances in parallel on different tasks (as mentioned earlier with subagents). This can speed up development - e.g., one agent generates code while another simultaneously writes tests, or two features are built concurrently. If you go this route, ensure the tasks are truly independent or clearly separated to avoid conflicts (the spec should note any dependencies). For example, don&#8217;t have two agents writing to the same file at once. One workflow is to have an agent generate code and another review it in parallel, or to have separate components built that integrate later. This is advanced usage and can be mentally taxing to manage (as Willison admitted, running multiple agents is <a href="https://simonwillison.net/2025/Oct/7/vibe-engineering/">surprisingly effective, if mentally exhausting</a>!). Start with at most 2-3 agents to keep things manageable.</p><p><strong>Version control and spec locks:</strong> Use Git or your version control of choice to track what the agent does. <a href="https://simonwillison.net/2025/Oct/7/vibe-engineering/">Good version control habits</a> matter even more with AI assistance. Commit the spec file itself to the repo. This not only preserves history, but the agent can even use git diff or blame to understand changes (LLMs are quite capable of reading diffs). Some advanced agent setups let the agent query the VCS history to see when something was introduced - surprisingly, models can be &#8220;fiercely competent at Git&#8221;. By keeping your spec in the repo, you allow both you and the AI to track evolution. There are tools (like GitHub Spec Kit mentioned earlier) that integrate spec-driven development into the git workflow - for instance, gating merges on updated specs or generating checklists from spec items. While you don&#8217;t need those tools to succeed, the takeaway is to treat the spec like code - maintain it diligently.</p><p><strong>Cost and speed considerations:</strong> Working with large models and long contexts can be slow and expensive. A practical tip is to use model selection and batching smartly. Perhaps use a cheaper/faster model for initial drafts or repetitions, and reserve the most capable (and expensive) model for final outputs or complex reasoning. Some developers use GPT-4 or Claude for planning and critical steps, but offload simpler expansions or refactors to a local model or a smaller API model. If using multiple agents, maybe not all need to be top-tier; a test-running agent or a linter agent could be a smaller model. Also consider throttling context size: don&#8217;t feed 20k tokens if 5k will do. As we discussed, <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">more tokens can mean diminishing returns</a>.</p><p><strong>Monitor and log everything:</strong> In complex agent workflows, logging the agent&#8217;s actions and outputs is essential. Check the logs to see if the agent is deviating or encountering errors. Many frameworks provide trace logs or allow printing the agent&#8217;s chain-of-thought (especially if you prompt it to think step-by-step). Reviewing these logs can highlight where the spec or instructions might have been misinterpreted. It&#8217;s not unlike debugging a program - except the &#8220;program&#8221; is the conversation/prompt chain. If something weird happens, go back to the spec/instructions to see if there was ambiguity.</p><p><strong>Learn and improve:</strong> Finally, treat each project as a learning opportunity to refine your spec-writing skill. Maybe you&#8217;ll discover that a certain phrasing consistently confuses the AI, or that organizing spec sections in a certain way yields better adherence. Incorporate those lessons into the next spec. The field of AI agents is rapidly evolving, so new best practices (and tools) emerge constantly. Stay updated via blogs (like the ones by Simon Willison, Andrej Karpathy, etc.), and don&#8217;t hesitate to experiment.</p><p>A spec for an AI agent isn&#8217;t &#8220;write once, done.&#8221; It&#8217;s part of a continuous cycle of instructing, verifying, and refining. The payoff for this diligence is substantial: by catching issues early and keeping the agent aligned, you avoid costly rewrites or failures later. As one AI engineer quipped, using these practices can feel like having &#8220;an army of interns&#8221; working for you, but you have to manage them well. A good spec, continuously maintained, is your management tool.</p><h2><strong>Avoid common pitfalls</strong></h2><p>Before wrapping up, it&#8217;s worth calling out anti-patterns that can derail even well-intentioned spec-driven workflows. The <a href="https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/">GitHub study of 2,500+ agent files</a> revealed a stark divide: &#8220;Most agent files fail because they&#8217;re too vague.&#8221; Here are the mistakes to avoid:</p><p><strong>Vague prompts:</strong> &#8220;Build me something cool&#8221; or &#8220;Make it work better&#8221; gives the agent nothing to anchor on. As Baptiste Studer puts it: &#8220;Vague prompts mean wrong results.&#8221; Be specific about inputs, outputs, and constraints. &#8220;You are a helpful coding assistant&#8221; doesn&#8217;t work. &#8220;You are a test engineer who writes tests for React components, follows these examples, and never modifies source code&#8221; does.</p><p><strong>Overlong contexts without summarization:</strong> Dumping 50 pages of documentation into a prompt and hoping the model figures it out rarely works. Use hierarchical summaries (as discussed in Principle 3) or RAG to surface only what&#8217;s relevant. Context length is not a substitute for context quality.</p><p><strong>Skipping human review:</strong> Willison has a personal rule: &#8220;I won&#8217;t commit code I couldn&#8217;t explain to someone else.&#8221; Just because the agent produced something that passes tests doesn&#8217;t mean it&#8217;s correct, secure, or maintainable. Always review critical code paths. The &#8220;house of cards&#8221; metaphor applies: AI-generated code can look solid but collapse under edge cases you didn&#8217;t test.</p><p><strong>Conflating vibe coding with production engineering:</strong> Rapid prototyping with AI (&#8220;vibe coding&#8221;) is great for exploration and throwaway projects. But shipping that code to production without rigorous specs, tests, and review is asking for trouble. I distinguish &#8220;vibe coding&#8221; from &#8220;AI-assisted engineering&#8221; - the latter requires the discipline this guide describes. Know which mode you&#8217;re in.</p><p><strong>Ignoring the &#8220;lethal trifecta&#8221;:</strong> Willison warns of three properties that make AI agents dangerous: speed (they work faster than you can review), non-determinism (same input, different outputs), and cost (encouraging corner-cutting on verification). Your spec and review process must account for all three. Don&#8217;t let speed outpace your ability to verify.</p><p><strong>Missing the six core areas:</strong> If your spec doesn&#8217;t cover commands, testing, project structure, code style, git workflow, and boundaries, you&#8217;re likely missing something the agent needs. Use the six-area checklist from Section 2 as a sanity check before handing off to the agent.</p><h2><strong>Conclusion</strong></h2><p>Writing an effective spec for AI coding agents requires solid software engineering principles combined with adaptation to LLM quirks. Start with clarity of purpose and let the AI help expand the plan. Structure the spec like a serious design document - covering the six core areas and integrating it into your toolchain so it becomes an executable artifact, not just prose. Keep the agent&#8217;s focus tight by feeding it one piece of the puzzle at a time (and consider clever tactics like summary TOCs, subagents, or parallel orchestration to handle big specs). Anticipate pitfalls by including three-tier boundaries (Always/Ask first/Never), self-checks, and conformance tests - essentially, teach the AI how to not fail. And treat the whole process as iterative: use tests and feedback to refine both the spec and the code continuously.</p><p>Follow these guidelines and your AI agent will be far less likely to &#8220;break down&#8221; under large contexts or wander off into nonsense.</p><p>Happy spec-writing!</p><div><hr></div><p><em>I&#8217;m excited to share I&#8217;ve released a new <a href="https://beyond.addy.ie/">AI-assisted engineering book</a> with O&#8217;Reilly. There are a number of free tips on the book site in case interested.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!qALe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!qALe!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png 424w, /__u/substackcdn.com/image/fetch/$s_!qALe!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png 848w, /__u/substackcdn.com/image/fetch/$s_!qALe!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qALe!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!qALe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.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;:545033,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/184990361?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!qALe!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png 424w, /__u/substackcdn.com/image/fetch/$s_!qALe!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png 848w, /__u/substackcdn.com/image/fetch/$s_!qALe!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qALe!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f80e0c9-a1ae-468a-a20b-7bfdd64d1cab_2400x1350.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p>]]></content:encoded></item><item><title><![CDATA[Code Review in the Age of AI]]></title><description><![CDATA[AI writes faster. Humans still have to prove it works.]]></description><link>https://addyo.substack.com/p/code-review-in-the-age-of-ai</link><guid isPermaLink="false">https://addyo.substack.com/p/code-review-in-the-age-of-ai</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Mon, 05 Jan 2026 15:30:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ggv3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>AI did not kill code review. It made the burden of proof explicit. Ship changes with evidence like manual verification and automated tests, then use review for risk, intent, and accountability. Solo developers lean on automation to keep up with AI speed, while teams use review to build shared context and ownership.</strong></p><p>If your pull request doesn&#8217;t contain evidence that it works, you&#8217;re not shipping faster - you&#8217;re just moving work downstream.</p><p>By early 2026,<a href="https://www.infoworld.com/article/4049949/senior-developers-let-ai-do-more-of-the-coding-survey.html"> over 30% of senior developers</a> report shipping mostly AI-generated code. The challenge? AI excels at drafting features but falters on logic, security, and edge cases - <a href="https://www.coderabbit.ai/blog/state-of-ai-vs-human-code-generation-report">making errors 75% more common in logic alone</a>. This splits workflows: solos &#8220;vibe&#8221; at inference speed with test suites as backstops, while teams demand human eyes for context and compliance. Done right, both treat AI as an accelerator, but verification - who, what, and when - defines the difference.</p><p>As I&#8217;ve said before: if you haven&#8217;t seen the code do the right thing yourself, it doesn&#8217;t work. AI amplifies this rule, not excuses it.</p><h2><strong>How developers use AI for review</strong></h2><ul><li><p><strong>Ad-hoc LLM checks</strong>: Paste diffs into Claude, Gemini or GPT for quick bug/style scans before committing.</p></li><li><p><strong>IDE integrations</strong>: Tools like Cursor, Claude Code, or Gemini CLI for inline suggestions and refactors during coding.</p></li><li><p><strong>PR bots and scanners</strong>: GitHub Copilot or custom agents to flag issues in PRs; pair with static/dynamic analysis like Snyk for security.</p></li><li><p><strong>Automated testing loops</strong>: Use AI to generate and run tests, enforcing coverage &gt;70% as a gate.</p></li><li><p><strong>Multi-model reviews</strong>: Run code through different LLMs (e.g., Claude for generation, a security-focused model for audit) to catch biases.</p></li></ul><p>The workflow and mindset differ dramatically depending on whether you&#8217;re solo or working in a team where others maintain your code.</p><h2><strong>Solo vs. Team: A quick comparison</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!NNHx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!NNHx!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png 424w, /__u/substackcdn.com/image/fetch/$s_!NNHx!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png 848w, /__u/substackcdn.com/image/fetch/$s_!NNHx!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NNHx!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!NNHx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png" width="1456" height="516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:516,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247807,&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://addyo.substack.com/i/183169342?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!NNHx!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png 424w, /__u/substackcdn.com/image/fetch/$s_!NNHx!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png 848w, /__u/substackcdn.com/image/fetch/$s_!NNHx!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NNHx!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d29555-37cb-44ed-b012-3fb4d5d73fb6_2528x896.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"><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"><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"><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"><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><h2><strong>Solo Devs: Shipping at &#8220;inference speed&#8221;</strong></h2><p><strong>Solo developers increasingly &#8220;trust the vibe&#8221; of AI-generated code - shipping features rapidly by reviewing only the key parts and relying on tests to catch issues.</strong></p><p>This workflow treats coding agents as powerful interns that can handle massive refactors largely on their own. As<a href="https://blog.kilo.ai/p/senior-engineers-use-ai-now"> Peter Steinberger admits</a>: <em>&#8220;I don&#8217;t read much code anymore. I watch the stream and sometimes look at key parts, but most code I don&#8217;t read.&#8221;</em> The bottleneck becomes<a href="https://steipete.me/posts/2025/shipping-at-inference-speed"> inference time</a> - waiting for the AI to generate output - not typing.</p><p><strong>There&#8217;s a catch: perceived speed gains vanish without strong testing practices.</strong> Build those first. If you skip review, you don&#8217;t eliminate work - you defer it. The developers who succeed with AI at high velocity aren&#8217;t the ones who blindly trust it; they&#8217;re the ones who&#8217;ve built verification systems that catch issues before they reach production.</p><p>That isn&#8217;t to say solos throw caution to the wind. The responsible ones employ <strong>extensive automated testing as a safety net</strong> - aiming for high coverage (often &gt;70%) and using AI to generate tests that catch bugs in real-time. Modern coding agents are surprisingly good at designing sophisticated end-to-end tests.</p><p><strong>For solos, the game-changer is language-independent, data-driven tests.</strong> If comprehensive, they let an agent build (or fix) implementations in any language, verifying as it goes. I start projects with a spec.md the AI drafts, approve it, then loop: write &#8594; test &#8594; fix.</p><p>Crucially, solo coders still do <strong>manual testing and critical reasoning</strong> on the final product. Run the application, click through the UI, use the feature yourself. When higher stakes are involved, read more code and add extra checks. And despite moving fast, fix ugly code when you see it rather than letting the mess accumulate.</p><p>Even in this bleeding-edge paradigm:<a href="https://simonwillison.net/2025/Dec/18/code-proven-to-work/"> </a><em><a href="https://simonwillison.net/2025/Dec/18/code-proven-to-work/">your job is to deliver code you have proven to work</a>.</em></p><h2><strong>Teams: AI shifts review bottlenecks</strong></h2><p><strong>In team settings, AI is a powerful assistant for code review, but </strong><em><strong>cannot replace</strong></em><strong> the human judgment needed for quality, security, and maintainability.</strong></p><p>When multiple engineers collaborate, the cost of mistakes and longevity of code are much higher concerns. Teams have started using AI-based review bots for an initial pass on PRs, but they still require a human to sign off. As<a href="https://devclass.com/2025/03/19/graphite-debuts-diamond-ai-code-reviewer-insists-ai-will-never-replace-human-code-review/"> Greg Foster of Graphite</a> puts it: <em>&#8220;I don&#8217;t ever see [AI agents] becoming a stand-in for an actual human engineer signing off on a pull request.&#8221;</em></p><p><strong>The biggest practical problem isn&#8217;t that AI reviewers miss style issues - it&#8217;s that AI increases volume and shifts the burden onto humans.</strong><a href="https://jellyfish.co/blog/ai-assisted-pull-requests-are-18-larger/"> PRs are getting larger</a> (~18% more additions as AI adoption increases),<a href="https://www.cortex.io/post/ai-is-making-engineering-faster-but-not-better-state-of-ai-benchmark-2026"> incidents per PR are up ~24%, and change failure rates up ~30%</a>. When output increases faster than verification capacity, review becomes the rate limiter. As Foster notes: <em>&#8220;If we&#8217;re shipping code that&#8217;s never actually read or understood by a fellow human, we&#8217;re running a huge risk.&#8221;</em></p><p>In teams, AI floods volume, so enforce incrementalism: break agent output into digestible commits. Human sign-off isn&#8217;t going away - it&#8217;s evolving to focus on what AI misses, like roadmap alignment and institutional context that AI can&#8217;t grasp.</p><h3><strong>Security: AI&#8217;s predictable weaknesses</strong></h3><p><strong>One area where human oversight is absolutely non-negotiable is security.</strong><a href="https://www.veracode.com/blog/ai-generated-code-security-risks/"> Approximately 45% of AI-generated code contains security flaws</a>.<a href="https://dl.acm.org/doi/10.1145/3716848"> Logic errors appear at 1.75&#215; the rate of human-written code, and XSS vulnerabilities occur at 2.74&#215; higher frequency</a>.</p><p>Beyond code issues,<a href="https://www.tomshardware.com/tech-industry/cyber-security/researchers-uncover-critical-ai-ide-flaws-exposing-developers-to-data-theft-and-rce"> agentic tooling and AI-integrated IDEs have created new attack paths</a> - prompt injection, data exfiltration, even RCE vulnerabilities. AI expands attack surfaces, so hybrid approaches win: AI flags, humans verify.</p><p><strong>Rule: If code touches auth, payments, secrets, or untrusted input, treat AI as a high-speed intern and require a human threat model review plus a security tool pass before merge.</strong></p><h3><strong>Review as knowledge transfer</strong></h3><p><strong>Code review is also how teams share system context. If AI writes the code and nobody can explain it, on-call becomes expensive.</strong></p><p>When a developer submits AI-generated code they don&#8217;t fully understand, they&#8217;re breaking the knowledge transfer mechanism that makes teams resilient. If the original author can&#8217;t explain why the code works, how will the on-call engineer debug it at 2 AM?</p><p><a href="https://devclass.com/2025/11/27/ocaml-maintainers-reject-massive-ai-generated-pull-request/">The OCaml maintainers&#8217; rejection of a 13,000-line AI-generated PR</a> crystallizes this issue. The code wasn&#8217;t necessarily bad, but no one had bandwidth to review such a huge change, and reviewing AI-generated code is <em>&#8220;more taxing&#8221;</em> than reviewing human code. The lesson: <strong>AI can flood you with code, but teams must manage volume to avoid a review bottleneck.</strong></p><h3><strong>Making AI review tools work</strong></h3><p>User experiences with AI review tools are decidedly mixed. On the positive side, teams report catching 95%+ of bugs in some cases - null pointer exceptions, missing test coverage, anti-patterns. On the negative side, some developers dismiss AI review comments as &#8220;text noise&#8221; - generic observations that add no value.</p><p><strong>The lesson: AI review tools require thoughtful configuration.</strong> Tune sensitivity levels, disable unhelpful comment types, and establish clear opt-in/opt-out policies. Properly configured,<a href="https://graphite.dev/guides/what-is-ai-code-review"> AI reviewers can catch 70-80% of low-hanging fruit</a>, freeing humans to focus on architecture and business logic.</p><p>Many teams encourage <strong>smaller, stackable pull requests</strong> even if AI could do a giant change all at once.<a href="https://medium.com/@addyosmani/my-llm-coding-workflow-going-into-2026-52fe1681325e"> Commit early and often</a> - treat each self-contained change as a separate commit/PR with clear messages.</p><p>Importantly, <strong>teams maintain a hard line of human accountability.</strong> No matter how much AI contributed, a human must take responsibility. As an old IBM training saying goes: <em>&#8220;A computer can never be held accountable. That&#8217;s your job as the human in the loop.&#8221;</em></p><h2><strong>The PR Contract: What authors owe reviewers</strong></h2><p><strong>Whether solo or in a team, the emerging best practice is to<a href="/__u/addyo.substack.com/p/treat-ai-generated-code-as-a-draft"> treat AI-generated code as a helpful draft</a> that </strong><em><strong>must</strong></em><strong> be verified.</strong></p><p>The most successful teams have converged on a simple framework:</p><h3><strong>PR Contract</strong></h3><ol><li><p><strong>What/why</strong>: Intent in 1-2 sentences.</p></li><li><p><strong>Proof it works</strong>: Tests passed, manual steps (screenshots/logs).</p></li><li><p><strong>Risk + AI role</strong>: Tier and which parts were AI-generated (e.g., high=payments).</p></li><li><p><strong>Review focus</strong>: 1-2 areas for human input (e.g., architecture).</p></li></ol><p>This isn&#8217;t bureaucracy - it&#8217;s respect for reviewer time and a forcing function for author accountability. If you can&#8217;t fill this out, you don&#8217;t understand your own change well enough to ask someone else to approve it.</p><h3><strong>Core Principles</strong></h3><p><strong>Insist on proof, not promises.</strong> Make &#8220;working code&#8221; the baseline. Prompt AI agents to execute code or run unit tests after generation. Demand evidence: logs, screenshots, results. <strong>No PR goes up without either new tests or a demo of the change working.</strong></p><p><strong>Use AI as first-pass reviewer, not final arbiter.</strong> Treat AI review output as advisory - a dialog where one AI writes code, another reviews it, and the human orchestrates fixes. Think of AI reviews as spellcheck, not an editor.</p><p><strong>Focus human review on what AI misses.</strong> Does the change introduce a security hole? Does it duplicate existing code (a common AI flaw)? Is the approach maintainable? <strong>AI triages the easy stuff; humans tackle the hard stuff.</strong></p><p><strong>Enforce incremental development.</strong> Break work into small pieces - easier for AI to produce and for humans to review. Small commits with clear messages serve as checkpoints. <strong>Never commit code you can&#8217;t explain.</strong></p><p><strong>Maintain high testing standards.</strong><a href="https://medium.com/@addyosmani/my-llm-coding-workflow-going-into-2026-52fe1681325e"> Those who get the most out of coding agents</a> have strong testing practices. Ask AI to draft tests - it&#8217;s good at generating edge-case tests you might not think of.</p><h2><strong>Looking Ahead: The bottleneck has moved</strong></h2><p><strong>AI is transforming code review from line-by-line gatekeeping into higher-level quality control - but human judgment remains the safety-critical component.</strong></p><p>What we&#8217;re seeing is workflow evolution, not elimination. Code reviews now involve reviewing a <em>conversation</em> or <em>plan</em> between AI and author as much as the code diff itself. The human reviewer&#8217;s role becomes more like an editor or architect: focusing on what&#8217;s important and trusting automation for mundane checks.</p><p>For solo developers, the path ahead is exhilarating - new tools will further streamline development. Even then, the wise developer will &#8220;trust but verify.&#8221;</p><p>In larger teams, expect growing emphasis on AI governance. Companies will formalize policies about AI contributions, requiring sign-offs that code was reviewed by an employee. Roles like &#8220;AI code auditor&#8221; will emerge. Enterprise platforms will evolve to offer better multi-repository context and custom policy enforcement.</p><p><strong>No matter the advances, the core principle remains</strong>: code review ensures software meets requirements, is secure, robust, and maintainable. AI doesn&#8217;t change those fundamentals - it just changes how we get there.</p><p>The bottleneck moved from writing code to proving it works. The best code reviewers in the age of AI will embrace this shift - letting AI accelerate the mechanical work while holding the line on accountability. They&#8217;ll let AI <strong>accelerate</strong> the process, never <strong>abdicate</strong> it. As engineers are learning, it&#8217;s about<a href="https://blog.kilo.ai/p/senior-engineers-use-ai-now"> </a><em><a href="https://blog.kilo.ai/p/senior-engineers-use-ai-now">&#8220;proof over vibes&#8221;</a></em> in coding.</p><p>Code review isn&#8217;t dead but it&#8217;s becoming more <strong>strategic</strong>. And whether you&#8217;re a solo hacker deploying at 2 AM or a team lead signing off a critical system change, one truth holds: the <em>human</em> is ultimately responsible for what the AI delivers.</p><p>Embrace the AI, but never forget to <strong>double-check the work.</strong></p><div><hr></div><p><em>I&#8217;m excited to share I&#8217;ve released a new<a href="https://beyond.addy.ie/"> AI-assisted engineering book</a> with O&#8217;Reilly. There are a number of free tips on the book site in case interested.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ggv3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ggv3!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png 424w, /__u/substackcdn.com/image/fetch/$s_!ggv3!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png 848w, /__u/substackcdn.com/image/fetch/$s_!ggv3!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ggv3!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ggv3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e894c835-4aef-4558-b047-83acb3be2053_7838x7838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:12838196,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/183169342?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ggv3!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png 424w, /__u/substackcdn.com/image/fetch/$s_!ggv3!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png 848w, /__u/substackcdn.com/image/fetch/$s_!ggv3!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ggv3!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe894c835-4aef-4558-b047-83acb3be2053_7838x7838.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p>]]></content:encoded></item><item><title><![CDATA[How Good Is AI at Coding React (Really)?]]></title><description><![CDATA[A data-driven look at what AI can and can&#8217;t do for React developers - and what you can do about it]]></description><link>https://addyo.substack.com/p/how-good-is-ai-at-coding-react-really</link><guid isPermaLink="false">https://addyo.substack.com/p/how-good-is-ai-at-coding-react-really</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Mon, 29 Dec 2025 15:31:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4Pug!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>tl;dr: AI coding benchmarks show models excel at isolated React tasks like scaffolding components or implementing explicit specs, achieving ~40% success in benchmarks, but drops to ~25% on multi-step integrations due to a &#8220;complexity cliff&#8221; in state management and design taste. The gap between &#8220;AI helped me ship&#8221; and &#8220;AI gave me a mess&#8221; is context engineering and explicit constraints. Deep React and domain knowledge enable you to spot when AI goes off the rails and understand </strong><em><strong>why</strong></em><strong> it repeats mistakes. Guide it without blindly accepting the output.</strong></p><p>This article is based on my closing keynote at React Summit by <a href="https://gitnation.com/contents/how-good-is-ai-at-coding-react-really">GitNation</a> (video).</p><div id="youtube2-jgAqpk3ZI6E" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;jgAqpk3ZI6E&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/jgAqpk3ZI6E?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>The Question everyone&#8217;s asking (but nobody&#8217;s answering well)</strong></h2><p>Let me be direct: most conversations about AI and coding are stuck on vibes. Either AI is magic that will replace us all, or it&#8217;s garbage that can&#8217;t do anything useful, or it&#8217;s perpetually &#8220;one prompt away&#8221; from shipping production code. All three takes miss what&#8217;s actually interesting.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4Pug!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4Pug!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png 424w, /__u/substackcdn.com/image/fetch/$s_!4Pug!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png 848w, /__u/substackcdn.com/image/fetch/$s_!4Pug!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4Pug!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4Pug!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png" width="1456" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/daf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1438853,&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://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4Pug!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png 424w, /__u/substackcdn.com/image/fetch/$s_!4Pug!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png 848w, /__u/substackcdn.com/image/fetch/$s_!4Pug!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4Pug!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf33944-9ed1-4ea4-9531-0b9d47869b1c_1880x1046.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"><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"><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"><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"><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>After spending a year analyzing benchmarks, building with these tools at Google, and watching React developers struggle (and succeed) with AI assistants, here&#8217;s what I&#8217;ve learned: AI is <em>already</em> useful for React developers, but its usefulness is extremely uneven. The unevenness is predictable if you know what to look for.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!9LSy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!9LSy!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!9LSy!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!9LSy!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!9LSy!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!9LSy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:553092,&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;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!9LSy!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!9LSy!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!9LSy!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!9LSy!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33d19e66-2f44-4dfb-b88c-bec57fb63470_1886x1054.png 1456w" sizes="100vw"></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"><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"><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"><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"><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></p><p>More importantly - and this is the part most articles skip - you have far more control over outcomes than you think.</p><h2><strong>The Core Thesis: Two sides of the same coin</strong></h2><p>This article covers two critical angles:</p><p><strong>What the data tells us:</strong> Benchmarks like <a href="https://designarena.ai/">Design Arena</a>, <a href="https://lmarena.ai/leaderboard/webdev">Web Dev Arena</a>, <a href="https://openai.com/index/introducing-swe-bench-verified/">SWE-Bench</a>, and <a href="https://huggingface.co/spaces/bytedance-research/Web-Bench-Leaderboard">Web-Bench</a> reveal clear patterns about where AI excels (isolated components, scaffolding, implementing explicit requirements) and where it struggles (multi-step integration, design taste, complex state management). Understanding these patterns means you can predict what will work before you waste time.</p><p><strong>What you can control:</strong> The difference between &#8220;AI helped me ship&#8221; and &#8220;AI gave me a mess to untangle&#8221; almost never comes down to just model selection. It comes down to context engineering, prompt specificity, workflow structure, and guardrails. These are all in your power to fix.</p><p>Let&#8217;s start with the foundation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!mv8Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!mv8Y!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png 424w, /__u/substackcdn.com/image/fetch/$s_!mv8Y!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png 848w, /__u/substackcdn.com/image/fetch/$s_!mv8Y!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mv8Y!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!mv8Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png" width="1456" height="809" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:809,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:540281,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!mv8Y!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png 424w, /__u/substackcdn.com/image/fetch/$s_!mv8Y!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png 848w, /__u/substackcdn.com/image/fetch/$s_!mv8Y!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mv8Y!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f84c291-2bb3-448e-a0fe-09ca43f307a4_1878x1044.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>90% of developers use AI for coding in some way. In an AI-assisted world, <strong>the value of frameworks like React depends on how effectively AI can use them.</strong> If AI can&#8217;t handle a framework well, that means the <strong>quality of experiences </strong>you can build without a lot of manual work can be limited.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6tIw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6tIw!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!6tIw!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!6tIw!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6tIw!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6tIw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:605984,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!6tIw!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!6tIw!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!6tIw!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6tIw!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F231f9c94-674d-4c2e-a1b8-d5b8aeeaa4e5_1884x1052.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>A lot of AI code quality comes down to context. <strong>You want to squeeze the most value out of the token budget in your context window</strong>. But the model, the tools that sit on top of it all of these layers play an important role.</p><h2><strong>AI Changes what is easy, not what is true</strong></h2><p>AI is a force multiplier. It amplifies everything: good requirements, good architecture, good taste. It also amplifies the bad: vague specs, messy state, and the temptation to ship something you haven&#8217;t really understood. Give it a weak brief, and it will happily hand you a 10,000-line maze you&#8217;ll later delete.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!--eg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!--eg!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!--eg!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!--eg!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!--eg!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!--eg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1151719,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!--eg!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!--eg!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!--eg!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!--eg!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c5eb255-4302-4d6c-8c2b-6090cb07cc6d_1878x1050.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>I draw a hard line between <strong><a href="/__u/addyo.substack.com/p/vibe-coding-is-not-the-same-as-ai">AI-assisted vibe coding</a></strong><a href="/__u/addyo.substack.com/p/vibe-coding-is-not-the-same-as-ai"> and </a><strong><a href="/__u/addyo.substack.com/p/vibe-coding-is-not-the-same-as-ai">AI-assisted engineering</a></strong>. Vibe coding is trusting high-level prompts and prioritizing speed over review. AI-assisted engineering is integrating AI inside a structured process where the human stays in control and accountable for the output.</p><p>Why does this distinction matter for React?</p><p>Because React apps aren&#8217;t just code. They&#8217;re product behavior, user experience, reliability, security, performance, accessibility, and long-term maintenance. AI can help with all of that - but only if you treat it like a teammate you&#8217;re pairing with and have <strong>oversight over</strong>, not a vending machine dispensing code.</p><h2><strong>The Monoculture problem (and opportunity)</strong></h2><p>One of the most under-discussed parts of the AI coding story: &#8220;how well AI codes&#8221; is not a universal property. It depends on what the model has seen in training, what tools it has access to, and what the ecosystem has standardized on.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!d39I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!d39I!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!d39I!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!d39I!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!d39I!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!d39I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1100840,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!d39I!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!d39I!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!d39I!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!d39I!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae9dce94-8531-47b8-9cef-6171c199a55f_1878x1054.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Large language models effectively set the ceiling for how much leverage you get out of a framework in an AI-assisted workflow. If AI struggles with a framework, you feel that as friction and quality limits.</p><p>Most AI tools converge on a stack that looks like: React, TypeScript, Tailwind, shadcn/ui. That stack dominates training data and tool optimization, so models are competent there and noticeably shakier off the beaten path.</p><p><strong>This has two implications for practicing React developers:</strong></p><ol><li><p><strong>If you&#8217;re on the mainstream stack, your &#8220;AI assistance ceiling&#8221; is higher.</strong> You&#8217;ll get better scaffolds, better component generation, and fewer hallucinated APIs.</p></li><li><p><strong>If you&#8217;re not, you need to compensate</strong> with better context, doc retrieval, and stricter constraints - or you&#8217;ll watch the model confidently build an alternate universe version of your app.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Iedm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Iedm!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!Iedm!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!Iedm!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Iedm!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Iedm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1124916,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Iedm!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!Iedm!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!Iedm!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Iedm!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb87c6d29-4dea-4be6-923b-f10ab41afee5_1880x1054.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>There&#8217;s also a second-order effect: monoculture can slow innovation. React skills are likely to stay very relevant (comforting), but it also means newer frameworks or alternative patterns can face headwinds until models and tools catch up.</p><p>The good news? If a framework gains traction, AI makers will fine-tune models on it. Docs MCPs can bridge gaps in the interim. But short-term, React&#8217;s position is extremely strong because AI &#8220;knows&#8221; it best.</p><div><hr></div><h2><strong>The Big reality check: The complexity cliff</strong></h2><p>If you remember nothing else from this article, remember this: <strong>AI handles simple tasks well and then falls off a cliff as complexity rises.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OchZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OchZ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!OchZ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!OchZ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OchZ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OchZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png" width="1456" height="821" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:821,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:513018,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!OchZ!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!OchZ!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!OchZ!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OchZ!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c900599-9f98-4fed-836c-bdadea0d05e3_1872x1056.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>A form component, a utility function, a small isolated widget: great. Multi-step work across a real codebase: much less reliable.</p><p>I used a mix of <strong>objective</strong> and <strong>human-rated benchmarks</strong> to show this pattern. We need both, because pass/fail benchmarks tell you &#8220;can it solve the issue,&#8221; while human-rated arenas tell you something equally important for frontend work: &#8220;do humans actually want to use what it builds.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Gofe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Gofe!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!Gofe!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!Gofe!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Gofe!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Gofe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:841476,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Gofe!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!Gofe!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!Gofe!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Gofe!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fd3c45e-20ec-4b3f-abc4-3ba98b9941a5_1882x1056.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h3><strong>What The Numbers Show</strong></h3><p><strong>On objective benchmarks, the complexity cliff is visible:</strong></p><ul><li><p><strong>Next.js eval tasks:</strong> Best models around 42% success - roughly 21 of 50 tasks completed. Even on framework-specific challenges, failures are common.</p></li><li><p><strong>Web-Bench multi-step full-stack tasks:</strong> Around 25% tasks solved. Many failures as steps chain together.</p></li><li><p><strong>SWE-Bench Pro:</strong> Around 20-43% on the Pro public set, versus jumping to over 70% on SWE-Bench Verified. Increasing complexity collapses performance.</p></li></ul><p>The gap between benchmark performance and your real codebase is the important thing to calibrate to.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!31x7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!31x7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!31x7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!31x7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!31x7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!31x7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png" width="1456" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:358686,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!31x7!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!31x7!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!31x7!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!31x7!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1842ca46-0566-4117-9ae4-8dbd7e30071c_1888x1050.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!uI5j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!uI5j!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!uI5j!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!uI5j!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!uI5j!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!uI5j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:405164,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!uI5j!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!uI5j!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!uI5j!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!uI5j!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0098d15d-8b6a-43ea-a42c-87d6e25d8119_1880x1056.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong>My practical translation of the complexity cliff for React developers:</strong></p><ul><li><p>AI is <strong>great</strong> at first drafts</p></li><li><p>AI is <strong>mediocre</strong> at integration</p></li><li><p>AI is <strong>unreliable</strong> at long multi-step changes unless you give it strong tooling and context</p></li><li><p>AI gets you to &#8220;it works&#8221; faster than it gets you to &#8220;it&#8217;s a codebase I want to own&#8221;</p></li></ul><div><hr></div><h2><strong>Design Arena and Web Dev Arena: Where React developers should pay attention</strong></h2><p>React developers spend a lot of time in the space between &#8220;the code runs&#8221; and &#8220;this is good.&#8221; That space includes UI quality, hierarchy, spacing, accessibility, and whether the end result feels intentional.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dCGE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dCGE!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png 424w, /__u/substackcdn.com/image/fetch/$s_!dCGE!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png 848w, /__u/substackcdn.com/image/fetch/$s_!dCGE!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dCGE!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dCGE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png" width="1456" height="941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:337700,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dCGE!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png 424w, /__u/substackcdn.com/image/fetch/$s_!dCGE!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png 848w, /__u/substackcdn.com/image/fetch/$s_!dCGE!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dCGE!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfa85d9-93db-47ee-9ef5-cec9d0f1d6a9_2294x1482.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Design Arena is interesting because it&#8217;s explicitly human preference&#8211;driven. Here&#8217;s how it works:</p><ul><li><p>Users come to the platform to explore and use the best AI-powered tools, like website generation and game generation</p></li><li><p>Design Arena presents multiple versions of the same experience (a website, agent, or builder), and users can save their favorite</p></li><li><p>Rankings emerge from these aggregated choices across categories like website generation, agents, and builders, reflecting real usage preferences rather than curated rubrics</p></li><li><p>Elo-style scores are calculated using a Bradley&#8211;Terry model, with models below a minimum comparison threshold filtered out.</p></li><li><p>The leaderboard updates live (every three hours, per their methodology), powered by interactions from over 850,000 users across 145 countries.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!qEMX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!qEMX!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png 424w, /__u/substackcdn.com/image/fetch/$s_!qEMX!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png 848w, /__u/substackcdn.com/image/fetch/$s_!qEMX!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qEMX!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!qEMX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.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;:884780,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!qEMX!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png 424w, /__u/substackcdn.com/image/fetch/$s_!qEMX!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png 848w, /__u/substackcdn.com/image/fetch/$s_!qEMX!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qEMX!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d8de171-6e05-437b-b8ff-eedd03ea2b15_1882x1058.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p><p><em>By using a pairwise comparison system, DesignArena generates leaderboards that rank AI models based on human preferences, helping to measure and drive improvements in design quality, usability, and aesthetics.</em></p><p>Similarly, <a href="http://Design Arena">Web Dev Arena</a> is an open-source benchmarking platform from LMArena designed to evaluate LLMs based on their capability to build functional, interactive web applications. Users submit a prompt and compare anonymous AI models generating code side-by-side, contributing to a community-driven Elo leaderboard that ranks top models for complex web development tasks. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!oS8c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!oS8c!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png 424w, /__u/substackcdn.com/image/fetch/$s_!oS8c!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png 848w, /__u/substackcdn.com/image/fetch/$s_!oS8c!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oS8c!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!oS8c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png" width="1456" height="727" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:727,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:480229,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!oS8c!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png 424w, /__u/substackcdn.com/image/fetch/$s_!oS8c!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png 848w, /__u/substackcdn.com/image/fetch/$s_!oS8c!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oS8c!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bb5604d-1a65-4da2-8988-5739c3953e23_3012x1504.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>So what do React developers learn from such arenas?</p><h3><strong>The Core Finding: AI has mastered logic, but not taste</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SbhK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SbhK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!SbhK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!SbhK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!SbhK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SbhK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:611725,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!SbhK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!SbhK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!SbhK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!SbhK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db0f7bd-5c10-44f6-9b76-93bae9c1e1e1_1882x1056.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>This slide is the thesis of the whole talk. Models can solve hard reasoning problems and still produce UIs with basic design failures: off color choices, inconsistent spacing, weak hierarchy.</p><p>I call this the <strong>capability divide:</strong></p><ul><li><p>AI is <strong>strong</strong> at logic, data flow, and implementing explicit requirements</p></li><li><p>AI is <strong>weak</strong> at taste, usability awareness, and aesthetic judgment</p></li></ul><p><strong>If you&#8217;re a React developer, this should change how you delegate:</strong></p><ul><li><p>Delegate boilerplate and mechanical implementation</p></li><li><p>Keep design intent, API design, and architecture decisions human-led</p></li><li><p>Treat &#8220;pretty&#8221; as an explicit requirement, not a default outcome</p></li></ul><h3><strong>The Surprise: Tools and scaffolding matter more than you think</strong></h3><p>Design Arena also found something counterintuitive: <strong>general agents are more variable than specialists</strong>, and the scaffolding and workflow around the base model drives a lot of the performance spread.</p><p>Put differently: two products can wrap the same base model and feel wildly different because of tooling, retrieval, iteration loops, and guardrails.</p><p>This is great news, because it means <strong>you have leverage even when you don&#8217;t control the base model.</strong></p><div><hr></div><h2><strong>Arena by Arena: What React developers should steal from the data</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4uWz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4uWz!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png 424w, /__u/substackcdn.com/image/fetch/$s_!4uWz!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png 848w, /__u/substackcdn.com/image/fetch/$s_!4uWz!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4uWz!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4uWz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:358564,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4uWz!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png 424w, /__u/substackcdn.com/image/fetch/$s_!4uWz!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png 848w, /__u/substackcdn.com/image/fetch/$s_!4uWz!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4uWz!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc722a14-d454-4ea6-b7cb-44a71435f883_1874x1048.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Let me walk through five arenas and extract the practical lessons for each one.</p><h3><strong>1. Website Arena: Prompt to website (and why Purple keeps happening)</strong></h3><p>The Website Arena measures how well models generate complete single-page sites from a prompt, with instructions to add modern UI/UX practices, accessibility, and responsive design.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!oRLU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!oRLU!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png 424w, /__u/substackcdn.com/image/fetch/$s_!oRLU!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png 848w, /__u/substackcdn.com/image/fetch/$s_!oRLU!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oRLU!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!oRLU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png" width="1456" height="823" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:823,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:439242,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!oRLU!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png 424w, /__u/substackcdn.com/image/fetch/$s_!oRLU!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png 848w, /__u/substackcdn.com/image/fetch/$s_!oRLU!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oRLU!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7854a835-eee7-4830-ad6a-a4fa28576d26_1882x1064.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>The important nuance is how winners tend to win: it&#8217;s not always the flashiest layout, it&#8217;s often <strong>the most coherent and complete page.</strong></p><p>If your goal is something shippable, bias your prompts toward coherence and structure, not 'make it look cool.</p><h4><strong>Why is there so much purple?</strong></h4><p>I joked about this in the talk because once you see it, you can&#8217;t unsee it: models converge on safe, generic design patterns, and &#8220;purple gradient plus glassmorphism&#8221; is one of those defaults.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7cgp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7cgp!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png 424w, /__u/substackcdn.com/image/fetch/$s_!7cgp!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png 848w, /__u/substackcdn.com/image/fetch/$s_!7cgp!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7cgp!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7cgp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:340995,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!7cgp!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png 424w, /__u/substackcdn.com/image/fetch/$s_!7cgp!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png 848w, /__u/substackcdn.com/image/fetch/$s_!7cgp!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7cgp!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7036a6ef-4aa0-4f8e-a63d-9cd7e33f0cd2_1874x1046.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>That&#8217;s not just a meme. It&#8217;s <strong>distributional convergence</strong>: under uncertainty, models gravitate toward common patterns in the data.</p><h4><strong>How do you fix it?</strong></h4><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!vuc-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!vuc-!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png 424w, /__u/substackcdn.com/image/fetch/$s_!vuc-!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png 848w, /__u/substackcdn.com/image/fetch/$s_!vuc-!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vuc-!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!vuc-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:846531,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!vuc-!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png 424w, /__u/substackcdn.com/image/fetch/$s_!vuc-!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png 848w, /__u/substackcdn.com/image/fetch/$s_!vuc-!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vuc-!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69b8dcfd-e8a0-4293-afef-771b1a00755c_1886x1060.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>One approach is tooling rather than &#8220;better prompts forever.&#8221; Anthropic pushed some of this into Skills (markdown files that Claude reads on demand) instead of trying to brute force it through training. Their <a href="https://github.com/anthropics/claude-code/blob/main/plugins/frontend-design/skills/frontend-design/SKILL.md">frontend-design skill</a> is worth checking out.</p><p>Even if you never use Claude Skills specifically, the lesson is broader:</p><ul><li><p>Some failures are better solved by scaffolding and constraints than by model selection</p></li><li><p>You want repeatable, shareable &#8220;taste primitives&#8221; that don&#8217;t require rewriting your entire prompt every time</p></li></ul><h4><strong>My website generation checklist for React teams</strong></h4><p><strong>What I ask for up front:</strong></p><ul><li><p><strong>Anchor the layout first:</strong> Specify the page sections you want before code</p></li><li><p><strong>Specify stack and routing:</strong> Call out Next App Router, file names, and RSC vs client components so it doesn&#8217;t invent structure</p></li><li><p><strong>Describe content density:</strong> Minimal landing page vs long-form so spacing doesn&#8217;t default to sludge</p></li><li><p><strong>Ask for responsive constraints:</strong> Breakpoints and collapse behavior</p></li><li><p><strong>Bake in accessibility:</strong> Semantic landmarks, skip links, labels, safe contrast</p></li><li><p><strong>Convert HTML to real React files:</strong> Map sections to components and wire them up in page.tsx</p></li></ul><p><strong>What I do after generation, before trusting it:</strong></p><ul><li><p><strong>Strip inline scripts</strong> and move DOM logic into client components with hooks and typed props</p></li><li><p><strong>Normalize layout primitives</strong> and refactor div soup into your real Shell, Container, Stack components</p></li><li><p><strong>Run a11y and perf checks:</strong> Lint, Lighthouse, and add tests for critical flows</p></li><li><p><strong>Freeze the visual system:</strong> Snap palette, spacing, typography into Tailwind config or tokens</p></li><li><p><strong>Keep the model on a leash:</strong> Use it for slices and variants, not wholesale rewrites of a tuned page</p></li></ul><p><strong>Single sentence summary:</strong> Be radically explicit in your instructions, and enforce your design system and coding standards so the model can&#8217;t drift.</p><p><strong>Poor prompt:</strong></p><pre><code><code>Make a landing page for a SaaS product</code></code></pre><p><strong>Strong prompt:</strong></p><pre><code><code>Create a Next.js App Router landing page (app/page.tsx) for a developer tools SaaS:

Layout sections:
1. Hero with headline, subheadline, CTA
2. Features (3 columns, icon + title + description each)
3. Social proof (logos grid)
4. CTA

Stack: Next.js 15, TypeScript, Tailwind
Density: Spacious landing page (not cramped)
Colors: Avoid purple/pink gradients - use neutral gray with blue accent
Responsive: Stack features vertically below 768px

Accessibility:
- Semantic HTML (header, main, section)
- Alt text for all images
- Sufficient color contrast (WCAG AA)</code></code></pre><div><hr></div><h3><strong>2. Agent Arena: Most failures are context failures now</strong></h3><p>The Agent Arena is a step up: multi-step tasks like writing code, fixing bugs, running tests, running browsers, debugging. This is where &#8220;agent loops&#8221; show up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-pUd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-pUd!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!-pUd!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!-pUd!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-pUd!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-pUd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png" width="1456" height="815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:374430,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-pUd!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!-pUd!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!-pUd!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-pUd!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87110bdc-9ffa-4bba-aa17-4dd41f10d7ee_1884x1054.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Here&#8217;s the biggest trap: when agents fail, it often looks like &#8220;the model is dumb.&#8221; Increasingly, that&#8217;s not true.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!a_vj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!a_vj!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!a_vj!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!a_vj!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!a_vj!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!a_vj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:372295,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!a_vj!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!a_vj!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!a_vj!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!a_vj!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3b6d65-19dc-4171-a84d-e27daa2bfcfd_1872x1050.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong>Most agent failures are context failures.</strong> If the agent doesn&#8217;t see the right logs, tests, or constraints, it makes confident but wrong changes. Fixing context is often higher leverage than switching models.</p><p>I also called out something that will resonate if you&#8217;ve ever spent time tweaking prompts: <strong>prompt engineering failures often come from context mismanagement</strong>, not &#8220;the wrong magic words.&#8221;</p><h4><strong>How I run agents like a React team lead</strong></h4><p><strong>Treat agents like a junior hire:</strong></p><ul><li><p>Give a written task brief, acceptance criteria, and constraints</p></li><li><p>Declare the sandbox: disposable branch, test DB, temporary env vars</p></li><li><p>Ask for a plan first: files it will touch, tools it will call, risks it sees</p></li><li><p>Cap blast radius: constrain write access to app, src, config</p></li><li><p>Require tests as part of fixes: reproduce bug first, then patch</p></li><li><p>Force small PRs: reviewable commits, not a mega diff</p></li></ul><p><strong>Then add operational guardrails:</strong></p><ul><li><p>Point them at logs and monitors: build logs, Sentry traces, Playwright failures</p></li><li><p>Snap to house style: ESLint config, prettier rules, naming conventions</p></li><li><p>Disable auto-merge and require human approval for agent changes</p></li></ul><p>That&#8217;s the difference between &#8220;agentic coding&#8221; and &#8220;outsourcing your codebase to a stochastic parrot.&#8221;</p><p><strong>Poor prompt:</strong></p><pre><code><code>Fix the bug in the checkout flow</code></code></pre><p><strong>Strong prompt:</strong></p><pre><code><code>Task: Fix abandoned cart bug in checkout

Context:
- File: app/checkout/page.tsx
- Error: Cart resets on page refresh
- Expected: Cart persists via localStorage
- Test: Run `npm test checkout.test.tsx` to verify

Plan required before implementation:
1. Identify where cart state is managed
2. Add localStorage persistence
3. Add hydration logic
4. Update tests
5. Verify in Playwright

Constraints:
- Only modify app/checkout/* and lib/cart.ts
- Maintain existing TypeScript types
- Follow our ESLint rules</code></code></pre><div><hr></div><h3><strong>3. Context Engineering: The highest leverage skill for agentic React</strong></h3><p>If context is the bottleneck, then <strong>context engineering</strong> is the discipline.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!GJFk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!GJFk!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!GJFk!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!GJFk!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!GJFk!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!GJFk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:450343,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!GJFk!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!GJFk!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!GJFk!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!GJFk!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3af5800-ea23-4d90-8117-3d88e3f6142c_1886x1054.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>In the talk I described context engineering as the art and science of filling the context window with just the right information to guide the agent&#8217;s performance. It&#8217;s more than clever prompting.</p><p><strong>Two specific tips I want most React developers to internalize:</strong></p><ol><li><p><strong>Visual context is powerful.</strong> Screenshots can enable one-shot solutions for UI bugs or design tasks.</p></li><li><p><strong>Structure beats volume.</strong> Unstructured dumps confuse the model, competing information distracts it, and overload overwhelms it.</p></li></ol><p>Under the hood, this ties back to a core principle: <strong>&#8220;Find the smallest possible set of high-signal tokens that maximize the likelihood of your desired outcome.&#8221;</strong></p><p>Every token you waste is context you cannot spend on:</p><ul><li><p>The actual API surface you need</p></li><li><p>The architectural constraints you care about</p></li><li><p>The failing test output that would prevent a bad patch</p></li></ul><div><hr></div><h3><strong>4. Tooling: If you can&#8217;t control the base model, control the layer around It</strong></h3><p>As I said in the &#8220;mastering the tools&#8221; section: you probably don&#8217;t control the base model, but you can absolutely steer the tooling around it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jWTi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jWTi!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png 424w, /__u/substackcdn.com/image/fetch/$s_!jWTi!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png 848w, /__u/substackcdn.com/image/fetch/$s_!jWTi!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jWTi!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jWTi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png" width="1456" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:807,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:365503,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!jWTi!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png 424w, /__u/substackcdn.com/image/fetch/$s_!jWTi!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png 848w, /__u/substackcdn.com/image/fetch/$s_!jWTi!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jWTi!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed042fe-f7de-4dee-b591-b75ef2509300_1872x1038.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>A concrete example is doc and state retrieval. Let me show you two tools that demonstrate this pattern:</p><h4><strong>Context7 MCP</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FkZp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FkZp!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!FkZp!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!FkZp!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FkZp!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FkZp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:304211,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FkZp!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!FkZp!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!FkZp!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FkZp!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8dc6d9b-6818-4e43-946c-3ecdf64773ad_1886x1054.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong><a href="https://context7.com/">Context7</a></strong> pulls fresh, version-specific docs and examples from source sites and injects them into the model&#8217;s working set, reducing guessing and stale snippets. You can nudge it toward topics like routing or hooks and cap how much to bring in.</p><h4><strong>Next.js DevTools MCP</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!hEVK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!hEVK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png 424w, /__u/substackcdn.com/image/fetch/$s_!hEVK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png 848w, /__u/substackcdn.com/image/fetch/$s_!hEVK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hEVK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!hEVK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.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;:298030,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!hEVK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png 424w, /__u/substackcdn.com/image/fetch/$s_!hEVK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png 848w, /__u/substackcdn.com/image/fetch/$s_!hEVK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hEVK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d50070d-ffb6-4bf8-838b-dd65d93c4f16_1882x1058.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>The modern Next dev server exposes a built-in MCP endpoint. The <strong><a href="https://nextjs.org/docs/app/guides/mcp">Next.js DevTools MCP server</a></strong> connects to it so an agent can ask for real data about your running app:</p><ul><li><p>Current build or runtime errors</p></li><li><p>Routes and layouts</p></li><li><p>Component metadata</p></li><li><p>Server actions and dev logs</p></li><li><p>Playwright paths for simple browser checks</p></li></ul><p>It also ships with a Next-specific knowledge base and helpers for common tasks like upgrades.</p><h4><strong>Chrome DevTools MCP</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!hkSK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!hkSK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!hkSK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!hkSK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hkSK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!hkSK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png" width="1456" height="812" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:457097,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!hkSK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!hkSK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!hkSK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hkSK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f4afb67-0ecf-4177-9330-664d2be8a881_1882x1050.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p><p><strong><a href="https://github.com/ChromeDevTools/chrome-devtools-mcp">Chrome DevTools MCP</a></strong> gives the agent eyes and hands in a real browser. It can open pages, click through flows, read console and network logs, take screenshots, and record performance traces to investigate things like high LCP or blocking time. Under the hood it rides on Chrome DevTools and Puppeteer, so you get reliable automation instead of brittle scripts. Because it can see page content, you still want sensible flags and isolation from personal browsing, but treated as scoped tooling it is very powerful.</p><h4><strong>How MCPs fit together</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!r5oN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!r5oN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!r5oN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!r5oN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!r5oN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!r5oN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png" width="1456" height="824" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:824,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:330312,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!r5oN!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!r5oN!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!r5oN!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!r5oN!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf2b9db-998e-41c8-9803-c7445bdade06_1860x1052.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Context7 gives your assistant the right external knowledge. Next DevTools MCP gives it your app&#8217;s truth. Chrome DevTools MCP proves the result in a real browser. Used together, you turn a guessing assistant into a closed&#8209;loop coder and debugger that cites sources, places changes correctly, and verifies outcomes before you hit commit.</p><p>This is the pattern I expect more React teams to adopt: rather than hoping the model remembers today&#8217;s Next.js behavior, wire it to an always-correct source of truth.</p><div><hr></div><h3><strong>5. Builder Arena: Vibe Coding tools used responsibly</strong></h3><p>Builder tools are designed for rapid prompt-driven product creation, not just &#8220;write me a component.&#8221; They optimize for cohesion and perceived completeness.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BEzj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BEzj!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png 424w, /__u/substackcdn.com/image/fetch/$s_!BEzj!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png 848w, /__u/substackcdn.com/image/fetch/$s_!BEzj!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BEzj!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BEzj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png" width="1456" height="809" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:809,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:369968,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!BEzj!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png 424w, /__u/substackcdn.com/image/fetch/$s_!BEzj!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png 848w, /__u/substackcdn.com/image/fetch/$s_!BEzj!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BEzj!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9ec6cea-d6ff-411a-9102-de485745452e_1882x1046.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Design Arena&#8217;s builder results were surprising precisely because builders are not just base models. They&#8217;re base models plus scaffolding plus UX and post-processing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!khIi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!khIi!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!khIi!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!khIi!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!khIi!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!khIi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:406806,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!khIi!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!khIi!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!khIi!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!khIi!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d42ef91-5ccb-4fbe-9f54-0b1c963cdb42_1878x1050.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><strong>My guidance for React developers:</strong></p><ul><li><p><strong>Use builders as idea generators.</strong> Harvest layout, copy, micro-interactions, then rebuild cleanly in your codebase</p></li><li><p><strong>Normalize APIs.</strong> Refactor generated fetch calls, hooks, stores to your patterns</p></li><li><p><strong>Consolidate CSS.</strong> Pull scattered styles into tokens and your component library to avoid spawning a second design system</p></li><li><p><strong>Archive failure cases.</strong> Save screenshots and diffs to refine prompts and tool settings over time</p></li></ul><p><strong>And if you want the &#8220;before you even start&#8221; checklist:</strong></p><ul><li><p>Start with a written product spec: features, user types, flows</p></li><li><p>Lock your design system: your existing shadcn, Radix, or in-house primitives</p></li><li><p>Describe the vibe in concrete terms: reference sites, adjectives, motion levels</p></li><li><p>Limit surface area: use builders for a single flow rather than your entire shell</p></li></ul><p>If you treat builder output as production code by default, you&#8217;ll end up maintaining a foreign codebase you never chose.</p><div><hr></div><h3><strong>6. UI Components Arena: where React developers win</strong></h3><p>The UI Components Arena is the most directly applicable to most React teams: generate isolated reusable components. Scope is focused, success rate is high, and output can be close to production-ready.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!kUQw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!kUQw!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png 424w, /__u/substackcdn.com/image/fetch/$s_!kUQw!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png 848w, /__u/substackcdn.com/image/fetch/$s_!kUQw!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kUQw!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!kUQw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:472086,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!kUQw!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png 424w, /__u/substackcdn.com/image/fetch/$s_!kUQw!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png 848w, /__u/substackcdn.com/image/fetch/$s_!kUQw!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kUQw!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcda54739-ee8a-4dbc-b532-73d77639d270_1890x1060.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!nNLz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!nNLz!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!nNLz!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!nNLz!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nNLz!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!nNLz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png" width="1456" height="811" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:811,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:679071,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!nNLz!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!nNLz!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!nNLz!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nNLz!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd207b9b-7778-4047-befc-ee4a91ed9617_1888x1052.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>It&#8217;s also where the &#8220;logic not taste&#8221; lesson shows up cleanly: models can wire up props and state and still make ugly, inconsistent decisions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6zux!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6zux!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!6zux!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!6zux!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6zux!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6zux!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png" width="1456" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:557841,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!6zux!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!6zux!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!6zux!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6zux!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32f037f5-be58-4556-86c3-a0d2c1dbe3ac_1888x1050.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>So I use AI here heavily, but with a specific protocol.</p><h4><strong>Start by forcing a Component contract</strong></h4><p>These are the things I want in the prompt before the model writes JSX:</p><ul><li><p>Define prop names, types, variants, and states</p></li><li><p>Provide examples and edge cases, including weird inputs</p></li><li><p>Demand accessibility by default: keyboard nav, ARIA, focus management, error messaging</p></li><li><p>Avoid anonymous div wrappers; use semantic structure where it matters</p></li><li><p>Separate styling concerns: Tailwind classes or your utility system, not inline styles</p></li><li><p>Request story files: Storybook or MDX usage examples</p></li></ul><h4><strong>Then do the React integration work AI is usually bad at</strong></h4><p>Once you have a plausible component, integrate it like a senior engineer:</p><ul><li><p><strong>Convert state to idiomatic React:</strong> Replace query selectors and global variables with hooks and props</p></li><li><p><strong>Make behavior composable:</strong> Refactor complex pieces into hooks you own</p></li><li><p><strong>Test the contract, not the implementation:</strong> Focus tests on props and events so internals can evolve</p></li><li><p><strong>Snap components into your design system</strong> before exposing them broadly</p></li></ul><p>This is the pattern I recommend to teams: let AI get you 70% of the way on structure, then deliberately take ownership of API shape, composition, and design tokens.</p><p><strong>Poor prompt:</strong></p><pre><code><code>Create a sign-up button component with different variants</code></code></pre><p><strong>Strong prompt:</strong></p><pre><code><code>Create a sign-up Button component with:

Props:
- variant: 'primary' | 'secondary' | 'ghost'
- size: 'sm' | 'md' | 'lg'
- disabled: boolean
- loading: boolean

Requirements:
- Use Tailwind classes
- Show loading spinner when loading=true
- Disable pointer events when disabled
- Support keyboard navigation (Enter/Space)
- Include focus-visible ring
- ARIA: use aria-disabled, aria-busy

Example usage:
&lt;Button variant="primary" size="md" loading={isSubmitting}&gt;
  Submit
&lt;/Button&gt;</code></code></pre><p>Then show a side-by-side of what each produces - the poor one generates inconsistent spacing, misses accessibility, uses inline styles. The strong one hits all requirements.</p><div><hr></div><h3><strong>7. 3D and Data Viz: Let AI generate assets and data, not your entire integration</strong></h3><p>The 3D and Data Viz arenas stress more structured generation tasks, relevant for interactive dashboards, WebGL, and data-heavy apps.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!XKdS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!XKdS!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!XKdS!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!XKdS!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XKdS!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!XKdS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png" width="1456" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:438825,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!XKdS!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!XKdS!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!XKdS!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!XKdS!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ae074fe-d108-4a11-a586-158cec594707_1890x1052.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2dCT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2dCT!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!2dCT!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!2dCT!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2dCT!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2dCT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:471845,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!2dCT!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png 424w, /__u/substackcdn.com/image/fetch/$s_!2dCT!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png 848w, /__u/substackcdn.com/image/fetch/$s_!2dCT!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2dCT!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82714f0f-f3ac-4226-a70e-cbe700f5593c_1884x1056.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>The lesson from these arenas is not &#8220;AI writes your Three.js app.&#8221; It&#8217;s:</p><ul><li><p><strong>Decide what AI should generate:</strong> Ask for geometries, datasets, configuration, not full integration code</p></li><li><p><strong>Specify the target library:</strong> React Three Fiber, Drei, Recharts, Victory, Visx</p></li><li><p><strong>Request low poly first</strong> and iterate toward fidelity once performance is proven</p></li><li><p><strong>Keep performance under control:</strong> Lazy load heavy assets, guard frame rate, keep fallbacks</p></li></ul><p>In practice, this is how you avoid an &#8220;AI demo&#8221; becoming a performance incident.</p><div><hr></div><h2><strong>React-Specific tips I want more teams to operationalize</strong></h2><p>The talk includes a slide of &#8220;React AI coding tips&#8221; that I keep coming back to because it captures what actually works in practice.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0aF5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0aF5!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!0aF5!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!0aF5!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0aF5!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0aF5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png" width="1456" height="811" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:811,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:629248,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0aF5!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!0aF5!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!0aF5!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0aF5!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0eda09af-dbe7-40a3-91d9-243c1ecbd735_1884x1050.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>Here are the ones I see paying off immediately on real teams:</p><ul><li><p><strong>Start prompts with the component API:</strong> Declare props, variants, states, and then tell the model to implement exactly that</p></li><li><p><strong>Name interactive states explicitly:</strong> hover, focus, loading, disabled</p></li><li><p><strong>Ask for a plan, then generate in steps:</strong> Small increments beat one big shot, and help avoid the complexity cliff</p></li><li><p><strong>Codify taste so AI can follow it:</strong> Lock spacing, colors, components in Tailwind config and your design system</p></li><li><p><strong>Be explicit about routes, layouts, server actions, loading and error boundaries</strong></p></li><li><p><strong>Bake conventions into the repo:</strong> Document App Router defaults, Server Components, Suspense so assistants align automatically</p></li><li><p><strong>Run checks only on what changed:</strong> Husky with lint-staged to run typecheck, lint, tests on staged files</p></li><li><p><strong>Control cache behavior explicitly:</strong> Fetch cache options and revalidation windows as part of the prompt, so the model doesn&#8217;t guess your policy</p></li></ul><p><strong>The meta-message is the same:</strong> The difference between &#8220;AI helped me ship&#8221; and &#8220;AI gave me a mess&#8221; is almost always the level of specificity and the strength of your guardrails.</p><div><hr></div><h2><strong>How I debug AI coding failures: it&#8217;s a pipeline, not a model</strong></h2><p>Once you accept the complexity cliff, the question becomes: how do you consistently get good outcomes?</p><p>I use a mental model I showed near the end of the talk: <strong>when AI code works or fails, it&#8217;s rarely &#8220;just the model.&#8221; It&#8217;s the whole pipeline.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!na-W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!na-W!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!na-W!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!na-W!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!na-W!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!na-W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.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;:332597,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!na-W!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!na-W!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!na-W!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!na-W!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b51dd38-b014-4122-bc97-32ece34d1cb1_1870x1052.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>The pipeline:</p><ol><li><p>Base model</p></li><li><p>System prompt and instructions</p></li><li><p>Your user prompt</p></li><li><p>Fine-tuning and code training</p></li><li><p>Tools and retrieval (RAG)</p></li><li><p>Agent loops (iteration)</p></li><li><p>Post-processing</p></li></ol><p>If you&#8217;re disappointed, you can almost always point to a weak link: wrong model for task, vague prompt, missing context, no iteration.</p><p>When things work, it&#8217;s usually because multiple layers aligned well: strong model, good prompt, necessary context, and iteration to iron out kinks.</p><p><strong>This is actionable, because most of those layers are under your control as a user</strong>, even if you don&#8217;t own the base model.</p><div><hr></div><h2><strong>The workflow I recommend for agentic React coding</strong></h2><p>I summarized it in the deck as the <strong>&#8220;new flow state&#8221;:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!uQ4k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!uQ4k!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png 424w, /__u/substackcdn.com/image/fetch/$s_!uQ4k!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png 848w, /__u/substackcdn.com/image/fetch/$s_!uQ4k!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png 1272w, /__u/substackcdn.com/image/fetch/$s_!uQ4k!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!uQ4k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.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;:576421,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180999655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!uQ4k!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png 424w, /__u/substackcdn.com/image/fetch/$s_!uQ4k!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png 848w, /__u/substackcdn.com/image/fetch/$s_!uQ4k!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png 1272w, /__u/substackcdn.com/image/fetch/$s_!uQ4k!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd674a8c-c225-46c6-b653-77a4ee119ea3_1864x1048.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><ol><li><p>Define clear requirements (maybe write tests)</p></li><li><p>Prompt with context (stack, docs, examples)</p></li><li><p>Ask for plan, review</p></li><li><p>Generate code in small steps</p></li><li><p>Run, test, refine</p></li><li><p>Iterate until production-ready</p></li></ol><p>This sounds like &#8220;normal engineering,&#8221; and <strong>that&#8217;s the point.</strong> The best teams I see using AI are not doing anything mystical. They&#8217;re turning implicit engineering discipline into explicit instructions and then using AI to accelerate the boring parts.</p><p><strong>If you want one sentence:</strong> You&#8217;re not just typing code anymore, you&#8217;re orchestrating code creation.</p><div><hr></div><h2><strong>So, how good is AI at coding React, really?</strong></h2><p>Where I land after looking at these benchmarks and using these tools day to day:</p><p>&#9989; <strong>AI is genuinely strong at:</strong></p><ul><li><p>Isolated React components</p></li><li><p>Scaffolding</p></li><li><p>Converting clearly specified requirements into working code</p></li></ul><p>&#9888;&#65039; <strong>AI is still unreliable at:</strong></p><ul><li><p>Multi-step integration tasks without strong tooling, strong context, and iteration loops</p></li></ul><p>&#10060; <strong>AI is consistently weaker at:</strong></p><ul><li><p>Taste, hierarchy, and nuanced UX decisions than it is at &#8220;code that runs&#8221;</p></li><li><p>The aesthetic gap is real</p></li></ul><p>&#128161; <strong>The highest leverage strategy is not &#8220;pick the best model.&#8221;</strong> It&#8217;s:</p><ul><li><p>Reduce context failures</p></li><li><p>Codify your conventions</p></li><li><p>Force stepwise work</p></li></ul><p><strong>And the part I find most exciting:</strong> The opportunity keeps expanding. Models and tools change fast, but the underlying skills that make you effective don&#8217;t. <strong>You are still the architect.</strong></p><div><hr></div><h2><strong>Learn More</strong></h2><p>If you want to keep exploring this space:</p><ul><li><p><strong>Talk video:</strong> <a href="https://gitnation.com/contents/how-good-is-ai-at-coding-react-really">https://gitnation.com/contents/how-good-is-ai-at-coding-react-really</a></p></li><li><p><strong>Design Arena leaderboard:</strong> <a href="https://www.designarena.ai/leaderboard">https://www.designarena.ai/leaderboard</a></p></li><li><p><strong>Design Arena methodology:</strong> <a href="https://notes.designarena.ai/in-pursuit-of-a-benchmark-for-human-taste/">https://notes.designarena.ai/in-pursuit-of-a-benchmark-for-human-taste/</a></p></li></ul><p><em>And if you want to dive deeper into related topics, I&#8217;ve written two books on the topic: &#8220;<a href="https://beyond.addy.ie">Beyond Vibe Coding</a>&#8221; and &#8220;<a href="https://largeapps.dev/">Building large-scale web apps with React</a>&#8221;</em></p><p></p><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[My LLM coding workflow going into 2026]]></title><description><![CDATA[Best practices for staying in control while coding with AI]]></description><link>https://addyo.substack.com/p/my-llm-coding-workflow-going-into</link><guid isPermaLink="false">https://addyo.substack.com/p/my-llm-coding-workflow-going-into</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Thu, 18 Dec 2025 15:30:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ukkU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>AI coding assistants became game-changers this year, but harnessing them effectively takes skill and structure.</strong> These tools dramatically increased what LLMs can do for real-world coding, and many developers (myself included) embraced them.</p><p>At Anthropic, for example, engineers adopted Claude Code so heavily that <strong><a href="https://newsletter.pragmaticengineer.com/p/software-engineering-with-llms-in-2025#:~:text=,%E2%80%9D">today</a> ~90% of the code for Claude Code is written by Claude Code itself</strong>. Yet, using LLMs for programming is <em>not</em> a push-button magic experience - it&#8217;s &#8220;difficult and unintuitive&#8221; and getting great results requires learning new patterns. <a href="/__u/addyo.substack.com/p/critical-thinking-during-the-age">Critical thinking</a> remains key. Over a year of projects, I&#8217;ve converged on a workflow similar to what many experienced devs are discovering: treat the LLM as a powerful pair programmer that <strong>requires clear direction, context and oversight</strong> rather than autonomous judgment.</p><p>In this article, I&#8217;ll share how I plan, code, and collaborate with AI going into 2026, distilling tips and best practices from my experience and the community&#8217;s collective learning. It&#8217;s a more disciplined <strong>&#8220;AI-assisted engineering&#8221;</strong> approach - leveraging AI aggressively while <strong>staying proudly accountable for the software produced</strong>.</p><div id="youtube2-FoXHScf1mjA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;FoXHScf1mjA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/FoXHScf1mjA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>If you&#8217;re interested in more on my workflow, see &#8220;The AI-Native Software Engineer&#8221;, otherwise let&#8217;s dive straight into some of the lessons I learned.</p><h2>Start with a clear plan (specs before code)</h2><p><strong>Don&#8217;t just throw wishes at the LLM - begin by defining the problem and planning a solution.</strong> </p><p>One common mistake is diving straight into code generation with a vague prompt. In my workflow, and in many others&#8217;, the first step is <strong>brainstorming a detailed specification</strong> <em>with</em> the AI, then outlining a step-by-step plan, <em>before</em> writing any actual code. For a new project, I&#8217;ll describe the idea and ask the LLM to <strong>iteratively ask me questions</strong> until we&#8217;ve fleshed out requirements and edge cases. By the end, we compile this into a comprehensive <strong>spec.md</strong> - containing requirements, architecture decisions, data models, and even a testing strategy. This spec forms the foundation for development.</p><p>Next, I feed the spec into a reasoning-capable model and prompt it to <strong>generate a project plan</strong>: break the implementation into logical, bite-sized tasks or milestones. The AI essentially helps me do a mini &#8220;design doc&#8221; or project plan. I often iterate on this plan - editing and asking the AI to critique or refine it - until it&#8217;s coherent and complete. <em>Only then</em> do I proceed to coding. This upfront investment might feel slow, but it pays off enormously. As Les Orchard <a href="https://blog.lmorchard.com/2025/06/07/semi-automatic-coding/#:~:text=Accidental%20waterfall%20">put it</a>, it&#8217;s like doing a <strong>&#8220;waterfall in 15 minutes&#8221;</strong> - a rapid structured planning phase that makes the subsequent coding much smoother. </p><p>Having a clear spec and plan means when we unleash the codegen, both the human and the LLM know exactly what we&#8217;re building and why. In short, <strong>planning first</strong> forces you and the AI onto the same page and prevents wasted cycles. It&#8217;s a step many people are tempted to skip, but experienced LLM developers now treat a robust spec/plan as the cornerstone of the workflow.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xGPR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xGPR!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!xGPR!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!xGPR!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xGPR!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xGPR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png" width="1456" height="809" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:809,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1468306,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/181957927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!xGPR!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png 424w, /__u/substackcdn.com/image/fetch/$s_!xGPR!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png 848w, /__u/substackcdn.com/image/fetch/$s_!xGPR!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xGPR!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F279d764d-c05b-4b6e-848e-4b481a8c0eeb_1894x1052.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p><h2>Break work into small, iterative chunks</h2><p><strong>Scope management is everything - feed the LLM manageable tasks, not the whole codebase at once.</strong> </p><p>A crucial lesson I&#8217;ve learned is to avoid asking the AI for large, monolithic outputs. Instead, we <strong>break the project into iterative steps or tickets</strong> and tackle them <a href="https://blog.fsck.com/2025/10/05/how-im-using-coding-agents-in-september-2025/#:~:text=please%20write%20out%20this%20plan%2C,in%20full%20detail%2C%20into%20docs%2Fplans">one by one</a>. This mirrors good software engineering practice, but it&#8217;s even more important with AI in the loop. LLMs do best when given focused prompts: implement one function, fix one bug, add one feature at a time. For example, after planning, I will prompt the codegen model: <em>&#8220;Okay, let&#8217;s implement Step 1 from the plan&#8221;</em>. We code that, test it, then move to Step 2, and so on. Each chunk is small enough that the AI can handle it within context and you can understand the code it produces.</p><p>This approach guards against the model going off the rails. If you ask for too much in one go, it&#8217;s likely to get confused or produce a <strong>&#8220;jumbled mess&#8221;</strong> that&#8217;s hard to untangle. Developers <a href="https://albertofortin.com/writing/coding-with-ai#:~:text=No%20consistency%2C%20no%20overarching%20plan,the%20other%209%20were%20doing">report</a> that when they tried to have an LLM generate huge swaths of an app, they ended up with inconsistency and duplication - &#8220;like 10 devs worked on it without talking to each other,&#8221; one said. I&#8217;ve felt that pain; the fix is to <strong>stop, back up, and split the problem into smaller pieces</strong>. Each iteration, we carry forward the context of what&#8217;s been built and incrementally add to it. This also fits nicely with a <strong>test-driven development (TDD)</strong> approach - we can write or generate tests for each piece as we go (more on testing soon).</p><p>Several coding-agent tools now explicitly support this chunked workflow. For instance, I often generate a structured <strong>&#8220;prompt plan&#8221;</strong> file that contains a sequence of prompts for each task, so that tools like Cursor can execute them one by one. The key point is to <strong>avoid huge leaps</strong>. By iterating in small loops, we greatly reduce the chance of catastrophic errors and we can course-correct quickly. LLMs excel at quick, contained tasks - use that to your advantage.</p><h2>Provide extensive context and guidance</h2><p><strong>LLMs are only as good as the context you provide - </strong><em><strong>show them</strong></em><strong> the relevant code, docs, and constraints.</strong> </p><p>When working on a codebase, I make sure to <strong>feed the AI all the information it needs</strong> to perform well. That includes the code it should modify or refer to, the project&#8217;s technical constraints, and any known pitfalls or preferred approaches. Modern tools help with this: for example, Anthropic&#8217;s Claude can import an entire GitHub repo into its context in &#8220;Projects&#8221; mode, and IDE assistants like Cursor or Copilot auto-include open files in the prompt. But I often go further - I will either use an MCP like <a href="https://context7.com/">Context7</a> or manually copy important pieces of the codebase or API docs into the conversation if I suspect the model doesn&#8217;t have them.</p><p>Expert LLM users emphasize this &#8220;context packing&#8221; step. For example, doing a <strong>&#8220;brain dump&#8221;</strong> of everything the model should know before coding, including: high-level goals and invariants, examples of good solutions, and warnings about approaches to avoid. If I&#8217;m asking an AI to implement a tricky solution, I might tell it which naive solutions are too slow, or provide a reference implementation from elsewhere. If I&#8217;m using a niche library or a brand-new API, I&#8217;ll paste in the official docs or README so the AI isn&#8217;t flying blind. All of this upfront context dramatically improves the quality of its output, because the model isn&#8217;t guessing - it has the facts and constraints in front of it.</p><p>There are now utilities to automate context packaging. I&#8217;ve experimented with tools like <strong><a href="https://gitingest.com/">gitingest</a></strong> or <strong><a href="https://github.com/abinthomasonline/repo2txt">repo2txt</a></strong>, which essentially <strong>&#8220;dump&#8221; the relevant parts of your codebase into a text file for the LLM to read</strong>. These can be a lifesaver when dealing with a large project - you generate an output.txt bundle of key source files and let the model ingest that. The principle is: <strong>don&#8217;t make the AI operate on partial information</strong>. If a bug fix requires understanding four different modules, show it those four modules. Yes, we must watch token limits, but current frontier models have pretty huge context windows (tens of thousands of tokens). Use them wisely. I often selectively include just the portions of code relevant to the task at hand, and explicitly tell the AI what <em>not</em> to focus on if something is out of scope (to save tokens).</p><p>I think <strong><a href="https://github.com/anthropics/skills">Claude Skills</a></strong> have potential because they turn what used to be fragile repeated prompting into something <strong>durable and reusable</strong> by packaging instructions, scripts, and domain specific expertise into modular capabilities that tools can automatically apply when a request matches the Skill. This means you get more reliable and context aware results than a generic prompt ever could and you move away from one off interactions toward workflows that encode repeatable procedures and team knowledge for tasks in a consistent way. A number of community-curated <a href="https://www.x-cmd.com/skill/">Skills collections</a> exist, but one of my favorite examples is the <a href="https://x.com/trq212/status/1989061937590837678">frontend-design</a> skill which can &#8220;end&#8221; the purple design aesthetic prevalent in LLM generated UIs. Until more tools support Skills officially, <a href="https://github.com/intellectronica/skillz">workarounds</a> exist.</p><p>Finally, <strong>guide the AI with comments and rules inside the prompt</strong>. I might precede a code snippet with: &#8220;Here is the current implementation of X. We need to extend it to do Y, but be careful not to break Z.&#8221; These little hints go a long way. LLMs are <strong>literalists</strong> - they&#8217;ll follow instructions, so give them detailed, contextual instructions. By proactively providing context and guidance, we minimize hallucinations and off-base suggestions and get code that fits our project&#8217;s needs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!gnQO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!gnQO!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!gnQO!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!gnQO!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gnQO!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!gnQO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png" width="1456" height="811" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:811,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:752827,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/181957927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!gnQO!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!gnQO!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!gnQO!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!gnQO!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff92ab8a8-fa3b-49cb-ad4c-7e3059a8e2de_1884x1050.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2>Choose the right model (and use multiple when needed)</h2><p><strong>Not all coding LLMs are equal - pick your tool with intention, and don&#8217;t be afraid to swap models mid-stream.</strong> </p><p>In 2025 we&#8217;ve been spoiled with a variety of capable code-focused LLMs. Part of my workflow is <strong>choosing the model or service best suited to each task</strong>. Sometimes it can be valuable to even try two or more LLMs in parallel to cross-check how they might approach the same problem differently.</p><p>Each model has its own &#8220;personality&#8221;. The key is: <strong>if one model gets stuck or gives mediocre outputs, try another.</strong> I&#8217;ve literally copied the same prompt from one chat into another service to see if it can handle it better. This &#8220;<a href="https://blog.lmorchard.com/2025/06/07/semi-automatic-coding/#:~:text=I%20bounced%20between%20Claude%20Sonnet,Each%20had%20its%20own%20personality">model musical chairs</a>&#8221; can rescue you when you hit a model&#8217;s blind spot.</p><p>Also, make sure you&#8217;re using <em>the best version</em> available. If you can, use the newest &#8220;pro&#8221; tier models - because quality matters. And yes, it often means paying for access, but the productivity gains can justify it. Ultimately, pick the AI pair programmer whose <strong>&#8220;vibe&#8221; meshes with you</strong>. I know folks who prefer one model simply because they like how its responses <em>feel</em>. That&#8217;s valid - when you&#8217;re essentially in a constant dialogue with an AI, the UX and tone make a difference. </p><p>Personally I gravitate towards Gemini for a lot of coding work these days because the interaction feels more natural and it often understands my requests on the first try. But I will not hesitate to switch to another model if needed; sometimes a second opinion helps the solution emerge. In summary: <strong>use the best tool for the job, and remember you have an arsenal of AIs at your disposal.</strong></p><h2>Leverage AI coding across the lifecycle</h2><p><strong>Supercharge your workflow with coding-specific AI help across the SDLC.</strong> </p><p>On the command-line, new AI agents emerged. <strong>Claude Code, OpenAI&#8217;s Codex CLI</strong> and <strong>Google&#8217;s Gemini CLI</strong> are CLI tools where you can chat with them directly in your project directory - they can read files, run tests, and even multi-step fix issues. I&#8217;ve used Google&#8217;s <strong>Jules </strong>and GitHub&#8217;s <strong>Copilot Agent</strong> as well - these are <strong>asynchronous coding agents</strong> that actually clone your repo into a cloud VM and work on tasks in the background (writing tests, fixing bugs, then opening a PR for you). It&#8217;s a bit eerie to witness: you issue a command like &#8220;refactor the payment module for X&#8221; and a little while later you get a pull request with code changes and passing tests. We are truly living in the future. You can read more about this in <a href="/__u/addyo.substack.com/p/conductors-to-orchestrators-the-future">conductors to orchestrators</a>.</p><p>That said, <strong>these tools are not infallible, and you must understand their limits</strong>. They accelerate the mechanical parts of coding - generating boilerplate, applying repetitive changes, running tests automatically - but they still benefit greatly from your guidance. For instance, when I use an agent like Claude or Copilot to implement something, I often supply it with the plan or to-do list from earlier steps so it knows the exact sequence of tasks. If the agent supports it, I&#8217;ll load up my spec.md or plan.md in the context before telling it to execute. This keeps it on track.</p><p><strong>We&#8217;re not at the stage of letting an AI agent code an entire feature unattended</strong> and expecting perfect results. Instead, I use these tools in a supervised way: I&#8217;ll let them generate and even run code, but I keep an eye on each step, ready to step in when something looks off. There are also orchestration tools like <strong>Conductor</strong> that let you run multiple agents in parallel on different tasks (essentially a way to scale up AI help) - some engineers are experimenting with running 3-4 agents at once on separate features. I&#8217;ve dabbled in this &#8220;massively parallel&#8221; approach; it&#8217;s surprisingly effective at getting a lot done quickly, but it&#8217;s also mentally taxing to monitor multiple AI threads! For most cases, I stick to one main agent at a time and maybe a secondary one for reviews (discussed below).</p><p>Just remember these are power tools - you still control the trigger and guide the outcome.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!F31O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!F31O!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!F31O!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!F31O!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!F31O!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!F31O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:388469,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/181957927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!F31O!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!F31O!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!F31O!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!F31O!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8398cc-f2c9-4c04-b3a1-37437dd3d82a_1888x1054.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><em>A full overview of where AI can improve the developer experience. This spans design, inner, submit, and outer loops - highlighting every point where AI can meaningfully reduce toil.</em></p><h2>Keep a human in the loop - verify, test, and review everything</h2><p><strong>AI will happily produce plausible-looking code, but </strong><em><strong>you</strong></em><strong> are responsible for quality - always review and test thoroughly.</strong> One of my cardinal rules is never to blindly trust an LLM&#8217;s output. As Simon Willison aptly <a href="https://simonwillison.net/2025/Mar/11/using-llms-for-code/#:~:text=Instead%2C%20use%20them%20to%20augment,on%20tedious%20tasks%20without%20complaint">says</a>, think of an LLM pair programmer as <strong>&#8220;over-confident and prone to mistakes&#8221;</strong>. It writes code with complete conviction - including bugs or nonsense - and won&#8217;t tell you something is wrong unless you catch it. So I treat every AI-generated snippet as if it came from a junior developer: I read through the code, run it, and test it as needed. <strong>You absolutely have to test what it writes</strong> - run those unit tests, or manually exercise the feature, to ensure it does what it claims. Read more about this in <a href="/__u/addyo.substack.com/p/vibe-coding-is-not-an-excuse-for">vibe coding is not an excuse for low-quality work</a>.</p><p>In fact, I weave testing into the workflow itself. My earlier planning stage often includes generating a list of tests or a testing plan for each step. If I&#8217;m using a tool like Claude Code, I&#8217;ll instruct it to run the test suite after implementing a task, and have it debug failures if any occur. This kind of tight feedback loop (write code &#8594; run tests &#8594; fix) is something AI excels at <em>as long as the tests exist</em>. It&#8217;s no surprise that those who get the most out of coding agents tend to be those with strong testing practices. An agent like Claude can &#8220;fly&#8221; through a project with a good test suite as safety net. Without tests, the agent might blithely assume everything is fine (&#8220;sure, all good!&#8221;) when in reality it&#8217;s broken several things. So, <strong>invest in tests</strong> - it amplifies the AI&#8217;s usefulness and confidence in the result.</p><p>Even beyond automated tests, <strong>do code reviews - both manual and AI-assisted</strong>. I routinely pause and review the code that&#8217;s been generated so far, line by line. Sometimes I&#8217;ll spawn a second AI session (or a different model) and ask <em>it</em> to critique or review code produced by the first. For example, I might have Claude write the code and then ask Gemini, &#8220;Can you review this function for any errors or improvements?&#8221; This can catch subtle issues. The key is to <em>not</em> skip the review just because an AI wrote the code. If anything, AI-written code needs <strong>extra scrutiny</strong>, because it can sometimes be superficially convincing while hiding flaws that a human might not immediately notice.</p><p>I also use <a href="https://github.com/chromeDevTools/chrome-devtools-mcp/">Chrome DevTools MCP</a>, built with my last team, for my <strong>debugging and quality loop</strong> to bridge the gap between static code analysis and live browser execution. It &#8220;gives your agent eyes&#8221;. It lets me grant my AI tools direct access to see what the browser can, inspect the DOM, get rich performance traces, console logs or network traces. This integration eliminates the friction of manual context switching, allowing for automated UI testing directly through the LLM. It means bugs can be diagnosed and fixed with high precision based on actual runtime data. </p><p>The dire consequences of skipping human oversight have been documented. One developer who leaned heavily on AI generation for a rush project <a href="https://albertofortin.com/writing/coding-with-ai#:~:text=No%20consistency%2C%20no%20overarching%20plan,the%20other%209%20were%20doing">described</a> the result as an inconsistent mess - duplicate logic, mismatched method names, no coherent architecture. He realized he&#8217;d been &#8220;building, building, building&#8221; without stepping back to really see what the AI had woven together. The fix was a painful refactor and a vow to never let things get that far out of hand again. I&#8217;ve taken that to heart. <strong>No matter how much AI I use, I remain the accountable engineer</strong>.</p><p>In practical terms, that means I only merge or ship code after I&#8217;ve understood it. If the AI generates something convoluted, I&#8217;ll ask it to add comments explaining it, or I&#8217;ll rewrite it in simpler terms. If something doesn&#8217;t feel right, I dig in - just as I would if a human colleague contributed code that raised red flags.</p><p>It&#8217;s all about mindset: <strong>the LLM is an assistant, not an autonomously reliable coder</strong>. I am the senior dev; the LLM is there to accelerate me, not replace my judgment. Maintaining this stance not only results in better code, it also protects your own growth as a developer. (I&#8217;ve heard some express concern that relying too much on AI might dull their skills - I think as long as you stay in the loop, actively reviewing and understanding everything, you&#8217;re still sharpening your instincts, just at a higher velocity.) In short: <strong>stay alert, test often, review always.</strong> It&#8217;s still your codebase at the end of the day.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-yfn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-yfn!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png 424w, /__u/substackcdn.com/image/fetch/$s_!-yfn!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png 848w, /__u/substackcdn.com/image/fetch/$s_!-yfn!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-yfn!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-yfn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png" width="1456" height="763" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:763,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:259438,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/181957927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-yfn!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png 424w, /__u/substackcdn.com/image/fetch/$s_!-yfn!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png 848w, /__u/substackcdn.com/image/fetch/$s_!-yfn!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-yfn!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd35bc06-47df-4660-9f2f-d0beaa489165_1858x974.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2>Commit often and use version control as a safety net. Never commit code you can&#8217;t explain.</h2><p><strong>Frequent commits are your save points - they let you undo AI missteps and understand changes.</strong> </p><p>When working with an AI that can generate a lot of code quickly, it&#8217;s easy for things to veer off course. I mitigate this by adopting ultra-granular version control habits. I commit early and often, even more than I would in normal hand-coding. After each small task or each successful automated edit, I&#8217;ll make a git commit with a clear message. This way, if the AI&#8217;s next suggestion introduces a bug or a messy change, I have a recent checkpoint to revert to (or cherry-pick from) without losing hours of work. One practitioner likened it to treating commits as <strong>&#8220;save points in a game&#8221;</strong> - if an LLM session goes sideways, you can always roll back to the last stable commit. I&#8217;ve found that advice incredibly useful. It&#8217;s much less stressful to experiment with a bold AI refactor when you know you can undo it with a git reset if needed.</p><p>Proper version control also helps when collaborating with the AI. Since I can&#8217;t rely on the AI to remember everything it&#8217;s done (context window limitations, etc.), the git history becomes a valuable log. I often scan my recent commits to brief the AI (or myself) on what changed. In fact, LLMs themselves can leverage your commit history if you provide it - I&#8217;ve pasted git diffs or commit logs into the prompt so the AI knows what code is new or what the previous state was. Amusingly, LLMs are <em>really</em> good at parsing diffs and using tools like git bisect to find where a bug was introduced. They have infinite patience to traverse commit histories, which can augment your debugging. But this only works if you have a tidy commit history to begin with.</p><p>Another benefit: small commits with good messages essentially document the development process, which helps when doing code review (AI or human). If an AI agent made five changes in one go and something broke, having those changes in separate commits makes it easier to pinpoint which commit caused the issue. If everything is in one giant commit titled &#8220;AI changes&#8221;, good luck! So I discipline myself: <em>finish task, run tests, commit.</em> This also meshes well with the earlier tip about breaking work into small chunks - each chunk ends up as its own commit or PR.</p><p>Finally, don&#8217;t be afraid to <strong>use branches or worktrees</strong> to isolate AI experiments. One advanced workflow I&#8217;ve adopted (inspired by folks like Jesse Vincent) is to spin up a fresh git worktree for a new feature or sub-project. This lets me run multiple AI coding sessions in parallel on the same repo without them interfering, and I can later merge the changes. It&#8217;s a bit like having each AI task in its own sandbox branch. If one experiment fails, I throw away that worktree and nothing is lost in main. If it succeeds, I merge it in. This approach has been crucial when I&#8217;m, say, letting an AI implement Feature A while I (or another AI) work on Feature B simultaneously. Version control is what makes this coordination possible. In short: <strong>commit often, organize your work with branches, and embrace git</strong> as the control mechanism to keep AI-generated changes manageable and reversible.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!OfO1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!OfO1!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png 424w, /__u/substackcdn.com/image/fetch/$s_!OfO1!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png 848w, /__u/substackcdn.com/image/fetch/$s_!OfO1!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OfO1!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!OfO1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png" width="1456" height="804" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:804,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1039878,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/181957927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!OfO1!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png 424w, /__u/substackcdn.com/image/fetch/$s_!OfO1!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png 848w, /__u/substackcdn.com/image/fetch/$s_!OfO1!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png 1272w, /__u/substackcdn.com/image/fetch/$s_!OfO1!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2702481a-ef4d-4dc7-9247-0b331eb70568_1886x1042.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2>Customize the AI&#8217;s behavior with rules and examples</h2><p><strong>Steer your AI assistant by providing style guides, examples, and even &#8220;rules files&#8221; - a little upfront tuning yields much better outputs.</strong></p><p>One thing I learned is that you don&#8217;t have to accept the AI&#8217;s default style or approach - you can influence it heavily by giving it guidelines. For instance, I have a <strong>CLAUDE.md</strong> file that I update periodically, which contains process rules and preferences for Claude (Anthropic&#8217;s model) to follow (and similarly a GEMINI.md when using Gemini CLI). This includes things like &#8220;write code in our project&#8217;s style, follow our lint rules, don&#8217;t use certain functions, prefer functional style over OOP,&#8221; etc. When I start a session, I feed this file to Claude to align it with our conventions. It&#8217;s surprising how well this works to keep the model &#8220;on track&#8221; as Jesse Vincent <a href="https://blog.fsck.com/2025/10/05/how-im-using-coding-agents-in-september-2025/#:~:text=I%27m%20still%20primarily%20using%20Claude,Code">noted</a> - it reduces the tendency of the AI to go off-script or introduce patterns we don&#8217;t want.</p><p>Even without a fancy rules file, you can <strong>set the tone with custom instructions or system prompts</strong>. GitHub Copilot and Cursor both introduced features to let you configure the AI&#8217;s behavior <a href="https://benjamincongdon.me/blog/2025/02/02/How-I-Use-AI-Early-2025/#:~:text=stuck,my%20company%E2%80%99s%20%2F%20team%E2%80%99s%20codebase">globally</a> for your project. I&#8217;ve taken advantage of that by writing a short paragraph about our coding style, e.g. &#8220;Use 4 spaces indent, avoid arrow functions in React, prefer descriptive variable names, code should pass ESLint.&#8221; With those instructions in place, the AI&#8217;s suggestions adhere much more closely to what a human teammate might write. Ben Congdon <a href="https://benjamincongdon.me/blog/2025/02/02/How-I-Use-AI-Early-2025/#:~:text=roughly%20on%20par,get%20past%20a%20logical%20impasse">mentioned</a> how shocked he was that few people use <strong>Copilot&#8217;s custom instructions</strong>, given how effective they are - he could guide the AI to output code matching his team&#8217;s idioms by providing some examples and preferences upfront. I echo that: take the time to teach the AI your expectations.</p><p>Another powerful technique is providing <strong>in-line examples</strong> of the output format or approach you want. If I want the AI to write a function in a very specific way, I might first show it a similar function already in the codebase: &#8220;Here&#8217;s how we implemented X, use a similar approach for Y.&#8221; If I want a certain commenting style, I might write a comment myself and ask the AI to continue in that style. Essentially, <em>prime</em> the model with the pattern to follow. LLMs are great at mimicry - show them one or two examples and they&#8217;ll continue in that vein.</p><p>The community has also come up with creative &#8220;rulesets&#8221; to tame LLM behavior. You might have heard of the <a href="https://harper.blog/2025/04/17/an-llm-codegen-heros-journey/#:~:text=repository,it%20in%20a%20few%20steps">&#8220;Big Daddy&#8221; rule</a> or adding a &#8220;no hallucination/no deception&#8221; clause to prompts. These are basically tricks to remind the AI to be truthful and not overly fabricate code that doesn&#8217;t exist. For example, I sometimes prepend a prompt with: &#8220;If you are unsure about something or the codebase context is missing, ask for clarification rather than making up an answer.&#8221; This reduces hallucinations. Another rule I use is: &#8220;Always explain your reasoning briefly in comments when fixing a bug.&#8221; This way, when the AI generates a fix, it will also leave a comment like &#8220;// Fixed: Changed X to Y to prevent Z (as per spec).&#8221; That&#8217;s super useful for later review.</p><p>In summary, <strong>don&#8217;t treat the AI as a black box - tune it</strong>. By configuring system instructions, sharing project docs, or writing down explicit rules, you turn the AI into a more specialized developer on your team. It&#8217;s akin to onboarding a new hire: you&#8217;d give them the style guide and some starter tips, right? Do the same for your AI pair programmer. The return on investment is huge: you get outputs that need less tweaking and integrate more smoothly with your codebase.</p><h2>Embrace testing and automation as force multipliers</h2><p><strong>Use your CI/CD, linters, and code review bots - AI will work best in an environment that catches mistakes automatically.</strong> </p><p>This is a corollary to staying in the loop and providing context: a well-oiled development pipeline enhances AI productivity. I ensure that any repository where I use heavy AI coding has a robust <strong>continuous integration setup</strong>. That means automated tests run on every commit or PR, code style checks (like ESLint, Prettier, etc.) are enforced, and ideally a staging deployment is available for any new branch. Why? Because I can let the AI trigger these and evaluate the results. For instance, if the AI opens a pull request via a tool like Jules or GitHub Copilot Agent, our CI will run tests and report failures. I can feed those failure logs back to the AI: &#8220;The integration tests failed with XYZ, let&#8217;s debug this.&#8221; It turns bug-fixing into a collaborative loop with quick feedback, which AIs handle quite well (they&#8217;ll suggest a fix, we run CI again, and iterate).</p><p>Automated code quality checks (linters, type checkers) also guide the AI. I actually include linter output in the prompt sometimes. If the AI writes code that doesn&#8217;t pass our linter, I&#8217;ll copy the linter errors into the chat and say &#8220;please address these issues.&#8221; The model then knows exactly what to do. It&#8217;s like having a strict teacher looking over the AI&#8217;s shoulder. In my experience, once the AI is aware of a tool&#8217;s output (like a failing test or a lint warning), it will try very hard to correct it - after all, it &#8220;wants&#8221; to produce the right answer. This ties back to providing context: give the AI the results of its actions in the environment (test failures, etc.) and it will learn from them.</p><p>AI coding agents themselves are increasingly incorporating automation hooks. Some agents will refuse to say a code task is &#8220;done&#8221; until all tests pass, which is exactly the diligence you want. Code review bots (AI or otherwise) act as another filter - I treat their feedback as additional prompts for improvement. For example, if CodeRabbit or another reviewer comments &#8220;This function is doing X which is not ideal&#8221; I will ask the AI, &#8220;Can you refactor based on this feedback?&#8221;</p><p>By combining AI with automation, you start to get a virtuous cycle. The AI writes code, the automated tools catch issues, the AI fixes them, and so forth, with you overseeing the high-level direction. It feels like having an extremely fast junior dev whose work is instantly checked by a tireless QA engineer. But remember, <em>you</em> set up that environment. If your project lacks tests or any automated checks, the AI&#8217;s work may slip through with subtle bugs or poor quality until much later. </p><p>So as we head into 2026, one of my goals is to bolster the quality gates around AI code contribution: more tests, more monitoring, perhaps even AI-on-AI code reviews. It might sound paradoxical (AIs reviewing AIs), but I&#8217;ve seen it catch things one model missed. Bottom line: <strong>an AI-friendly workflow is one with strong automation - use those tools to keep the AI honest</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!T25F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!T25F!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png 424w, /__u/substackcdn.com/image/fetch/$s_!T25F!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png 848w, /__u/substackcdn.com/image/fetch/$s_!T25F!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png 1272w, /__u/substackcdn.com/image/fetch/$s_!T25F!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!T25F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png" width="1456" height="811" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:811,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2234413,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/181957927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!T25F!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png 424w, /__u/substackcdn.com/image/fetch/$s_!T25F!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png 848w, /__u/substackcdn.com/image/fetch/$s_!T25F!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png 1272w, /__u/substackcdn.com/image/fetch/$s_!T25F!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a7a816-646f-4723-a44e-7177e2dbc2ae_1882x1048.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2>Continuously learn and adapt (AI amplifies your skills)</h2><p><strong>Treat every AI coding session as a learning opportunity - the more you know, the more the AI can help you, creating a virtuous cycle.</strong></p><p>One of the most exciting aspects of using LLMs in development is how much <em>I</em> have learned in the process. Rather than replacing my need to know things, AIs have actually exposed me to new languages, frameworks, and techniques I might not have tried on my own.</p><p>This pattern holds generally: if you come to the table with solid software engineering fundamentals, the AI will <strong>amplify</strong> your productivity multifold. If you lack that foundation, the AI might just amplify confusion. Seasoned devs have observed that LLMs &#8220;reward existing best practices&#8221; - things like writing clear specs, having good tests, doing code reviews, etc., all become even more powerful when an AI is involved. In my experience, the AI lets me operate at a higher level of abstraction (focusing on design, interface, architecture) while it churns out the boilerplate, but I need to <em>have</em> those high-level skills first. As Simon Willison notes, almost everything that makes someone a <strong>senior engineer</strong> (designing systems, managing complexity, knowing what to automate vs hand-code) is what now yields the best outcomes with AI. So using AIs has actually pushed me to <strong>up my engineering game</strong> - I&#8217;m more rigorous about planning and more conscious of architecture, because I&#8217;m effectively &#8220;managing&#8221; a very fast but somewhat na&#239;ve coder (the AI).</p><p>For those worried that using AI might degrade their abilities: I&#8217;d argue the opposite, if done right. By reviewing AI code, I&#8217;ve been exposed to new idioms and solutions. By debugging AI mistakes, I&#8217;ve deepened my understanding of the language and problem domain. I often ask the AI to explain its code or the rationale behind a fix - kind of like constantly interviewing a candidate about their code - and I pick up insights from its answers. I also use AI as a research assistant: if I&#8217;m not sure about a library or approach, I&#8217;ll ask it to enumerate options or compare trade-offs. It&#8217;s like having an encyclopedic mentor on call. All of this has made me a more knowledgeable programmer.</p><p>The big picture is that <strong>AI tools amplify your expertise</strong>. Going into 2026, I&#8217;m not afraid of them &#8220;taking my job&#8221; - I&#8217;m excited that they free me from drudgery and allow me to spend more time on creative and complex aspects of software engineering. But I&#8217;m also aware that for those without a solid base, AI can lead to Dunning-Kruger on steroids (it may <em>seem</em> like you built something great, until it falls apart). So my advice: continue honing your craft, and use the AI to accelerate that process. Be intentional about periodically coding without AI too, to keep your raw skills sharp. In the end, the developer + AI duo is far more powerful than either alone, and the <em>developer</em> half of that duo has to hold up their end.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1K_1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1K_1!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!1K_1!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!1K_1!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1K_1!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1K_1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:427794,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/181957927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!1K_1!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png 424w, /__u/substackcdn.com/image/fetch/$s_!1K_1!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png 848w, /__u/substackcdn.com/image/fetch/$s_!1K_1!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1K_1!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6831a588-c75e-4992-9813-84dee28de46d_1876x1054.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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><h2>Conclusion</h2><p>As we enter 2026, I&#8217;ve fully embraced AI in my development workflow - but in a considered, expert-driven way. My approach is essentially <strong>&#8220;AI-augmented software engineering&#8221;</strong> rather than AI-automated software engineering.</p><p>I&#8217;ve learned: <strong>the best results come when you apply classic software engineering discipline to your AI collaborations</strong>. It turns out all our hard-earned practices - design before coding, write tests, use version control, maintain standards - not only still apply, but are even more important when an AI is writing half your code.</p><p>I&#8217;m excited for what&#8217;s next. The tools keep improving and my workflow will surely evolve alongside them. Perhaps fully autonomous &#8220;AI dev interns&#8221; will tackle more grunt work while we focus on higher-level tasks. Perhaps new paradigms of debugging and code exploration will emerge. No matter what, I plan to stay <em>in the loop</em> - guiding the AIs, learning from them, and amplifying my productivity responsibly.</p><p>The bottom line for me: <strong>AI coding assistants are incredible force multipliers, but the human engineer remains the director of the show.</strong></p><p>With that&#8230;happy building in 2026! &#128640;</p><p><em>I&#8217;m excited to share I&#8217;ve released a new <a href="https://beyond.addy.ie/">AI-assisted engineering book</a> with O&#8217;Reilly. There are a number of free tips on the book site in case interested.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ukkU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ukkU!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png 424w, /__u/substackcdn.com/image/fetch/$s_!ukkU!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png 848w, /__u/substackcdn.com/image/fetch/$s_!ukkU!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ukkU!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ukkU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2203490,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/181957927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ukkU!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png 424w, /__u/substackcdn.com/image/fetch/$s_!ukkU!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png 848w, /__u/substackcdn.com/image/fetch/$s_!ukkU!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ukkU!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc5ca0ef-614c-42e0-85f3-3663e9871580_7838x7838.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p><p></p>]]></content:encoded></item><item><title><![CDATA[21 Lessons from 14 Years at Google]]></title><description><![CDATA[On code, careers, and the human side of engineering]]></description><link>https://addyo.substack.com/p/21-lessons-from-14-years-at-google</link><guid isPermaLink="false">https://addyo.substack.com/p/21-lessons-from-14-years-at-google</guid><dc:creator><![CDATA[Addy Osmani]]></dc:creator><pubDate>Thu, 04 Dec 2025 15:30:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-kh4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I joined Google ~14 years ago, I thought the job was about writing great code. I was partly right. But the longer I&#8217;ve stayed, the more I&#8217;ve realized that the engineers who thrive aren&#8217;t necessarily the best programmers - they&#8217;re the ones who&#8217;ve figured out how to navigate everything around the code: the people, the politics, the alignment, the ambiguity.</p><p>These lessons are what I wish I&#8217;d known earlier. Some would have saved me months of frustration. Others took years to fully understand. None of them are about specific technologies - those change too fast to matter. They&#8217;re about the patterns that keep showing up, project after project, team after team.</p><p>I&#8217;m sharing them because I&#8217;ve benefited enormously from engineers who did the same for me. Consider this my attempt to pay it forward.</p><h2>1. The best engineers are obsessed with solving user problems.</h2><p>It&#8217;s seductive to fall in love with a technology and go looking for places to apply it. I&#8217;ve done it. Everyone has. But the engineers who create the most value work backwards: they become obsessed with understanding user problems deeply, and let solutions emerge from that understanding.</p><p>User obsession means spending time in support tickets, talking to users, watching users struggle, asking &#8220;why&#8221; until you hit bedrock. The engineer who truly understands the problem often finds that the elegant solution is simpler than anyone expected.</p><p>The engineer who starts with a solution tends to build complexity in search of a justification.</p><h2>2. Being right is cheap. Getting to right together is the real work.</h2><p>You can win every technical argument and lose the project. I&#8217;ve watched brilliant engineers accrue silent resentment by always being the smartest person in the room. The cost shows up later as &#8220;mysterious execution issues&#8221; and &#8220;strange resistance.&#8221;</p><p>The skill isn&#8217;t being right. It&#8217;s entering discussions to align on the problem, creating space for others, and remaining skeptical of your own certainty.</p><p>Strong opinions, weakly held - not because you lack conviction, but because decisions made under uncertainty shouldn&#8217;t be welded to identity.</p><h2>3. Bias towards action. Ship. You can edit a bad page, but you can&#8217;t edit a blank one.</h2><p>The quest for perfection is paralyzing. I&#8217;ve watched engineers spend weeks debating the ideal architecture for something they&#8217;ve never built. The perfect solution rarely emerges from thought alone - it emerges from contact with reality. AI can in many ways help here.</p><p>First do it, then do it right, then do it better. Get the ugly prototype in front of users. Write the messy first draft of the design doc. Ship the MVP that embarrasses you slightly. You&#8217;ll learn more from one week of real feedback than a month of theoretical debate.</p><p>Momentum creates clarity. Analysis paralysis creates nothing.</p><h2>4. Clarity is seniority. Cleverness is overhead.</h2><p>The instinct to write clever code is almost universal among engineers. It feels like proof of competence. </p><p>But software engineering is what happens when you add time and other programmers. In that environment, clarity isn&#8217;t a style preference - it&#8217;s operational risk reduction.</p><p>Your code is a strategy memo to strangers who will maintain it at 2am during an outage. Optimize for their comprehension, not your elegance. The senior engineers I respect most have learned to trade cleverness for clarity, every time.</p><h2>5. Novelty is a loan you repay in outages, hiring, and cognitive overhead.</h2><p>Treat your technology choices like an organization with a small &#8220;innovation token&#8221; budget. Spend one each time you adopt something materially non-standard. You can&#8217;t afford many.</p><p>The punchline isn&#8217;t &#8220;never innovate.&#8221; It&#8217;s &#8220;innovate only where you&#8217;re uniquely paid to innovate.&#8221; Everything else should default to boring, because boring has known failure modes. </p><p>The &#8220;best tool for the job&#8221; is often the &#8220;least-worst tool across many jobs&#8221;-because operating a zoo becomes the real tax.</p><div><hr></div><h2>6. Your code doesn&#8217;t advocate for you. People do.</h2><p>Early in my career, I believed great work would speak for itself. I was wrong. Code sits silently in a repository. Your manager mentions you in a meeting, or they don&#8217;t. A peer recommends you for a project, or someone else.</p><p>In large organizations, decisions get made in meetings you&#8217;re not invited to, using summaries you didn&#8217;t write, by people who have five minutes and twelve priorities. If no one can articulate your impact when you&#8217;re not in the room, your impact is effectively optional.</p><p>This isn&#8217;t strictly about self-promotion. It&#8217;s about making the value chain legible to everyone- including yourself.</p><h2>7. The best code is the code you never had to write.</h2><p>We celebrate creation in engineering culture. Nobody gets promoted for deleting code, even though deletion often improves a system more than addition. Every line of code you don&#8217;t write is a line you never have to debug, maintain, or explain.</p><p>Before you build, exhaust the question: &#8220;What would happen if we just&#8230; didn&#8217;t?&#8221; Sometimes the answer is &#8220;nothing bad,&#8221; and that&#8217;s your solution. </p><p>The problem isn&#8217;t that engineers can&#8217;t write code or use AI to do so. It&#8217;s that we&#8217;re so good at writing it that we forget to ask whether we should.</p><div><hr></div><h2>8. At scale, even your bugs have users.</h2><p>With enough users, every observable behavior becomes a dependency - regardless of what you promised. Someone is scraping your API, automating your quirks, caching your bugs.</p><p>This creates a career-level insight: you can&#8217;t treat compatibility work as &#8220;maintenance&#8221; and new features as &#8220;real work.&#8221; Compatibility is product. </p><p>Design your deprecations as migrations with time, tooling, and empathy. Most &#8220;API design&#8221; is actually &#8220;API retirement.&#8221;</p><h2>9. Most &#8220;slow&#8221; teams are actually misaligned teams.</h2><p>When a project drags, the instinct is to blame execution: people aren&#8217;t working hard enough, the technology is wrong, there aren&#8217;t enough engineers. Usually none of that is the real problem.</p><p>In large companies, teams are your unit of concurrency, but coordination costs grow geometrically as teams multiply. Most slowness is actually alignment failure - people building the wrong things, or the right things in incompatible ways. </p><p>Senior engineers spend more time clarifying direction, interfaces, and priorities than &#8220;writing code faster&#8221; because that&#8217;s where the actual bottleneck lives.</p><h2>10. Focus on what you can control. Ignore what you can&#8217;t.</h2><p>In a large company, countless variables are outside your control - organizational changes, management decisions, market shifts, product pivots. Dwelling on these creates anxiety without agency.</p><p>The engineers who stay sane and effective zero in on their sphere of influence. You can&#8217;t control whether a reorg happens. You can control the quality of your work, how you respond, and what you learn. When faced with uncertainty, break problems into pieces and identify the specific actions available to you. </p><p>This isn&#8217;t passive acceptance but it is strategic focus. Energy spent on what you can&#8217;t change is energy stolen from what you can.</p><h2>11. Abstractions don&#8217;t remove complexity. They move it to the day you&#8217;re on call.</h2><p>Every abstraction is a bet that you won&#8217;t need to understand what&#8217;s underneath. Sometimes you win that bet. But something always leaks, and when it does, you need to know what you&#8217;re standing on.</p><p>Senior engineers keep learning &#8220;lower level&#8221; things even as stacks get higher. Not out of nostalgia, but out of respect for the moment when the abstraction fails and you&#8217;re alone with the system at 3am. Use your stack. </p><p>But keep a working model of its underlying failure modes.</p><h2>12. Writing forces clarity. The fastest way to learn something better is to try teaching it.</h2><p>Writing forces clarity. When I explain a concept to others - in a doc, a talk, a code review comment, even just chatting with AI - I discover the gaps in my own understanding. The act of making something legible to someone else makes it more legible to me.</p><p>This doesn&#8217;t mean that you&#8217;re going to learn how to be a surgeon by teaching it, but the premise still holds largely true in the software engineering domain.</p><p>This isn&#8217;t just about being generous with knowledge. It&#8217;s a selfish learning hack. If you think you understand something, try to explain it simply. The places where you stumble are the places where your understanding is shallow. </p><p>Teaching is debugging your own mental models.</p><h2>13. The work that makes other work possible is priceless - and invisible.</h2><p>Glue work - documentation, onboarding, cross-team coordination, process improvement - is vital. But if you do it unconsciously, it can stall your technical trajectory and burn you out. The trap is doing it as &#8220;helpfulness&#8221; rather than treating it as deliberate, bounded, visible impact.</p><p>Timebox it. Rotate it. Turn it into artifacts: docs, templates, automation. And make it legible as impact, not as personality trait. </p><p>Priceless and invisible is a dangerous combination for your career.</p><h2>14. If you win every debate, you&#8217;re probably accumulating silent resistance.</h2><p>I&#8217;ve learned to be suspicious of my own certainty. When I &#8220;win&#8221; too easily, something is usually wrong. People stop fighting you not because you&#8217;ve convinced them, but because they&#8217;ve given up trying - and they&#8217;ll express that disagreement in execution, not meetings.</p><p>Real alignment takes longer. You have to actually understand other perspectives, incorporate feedback, and sometimes change your mind publicly. </p><p>The short-term feeling of being right is worth much less than the long-term reality of building things with willing collaborators.</p><h2>15. When a measure becomes a target, it stops measuring.</h2><p>Every metric you expose to management will eventually be gamed. Not through malice, but because humans optimize for what&#8217;s measured. </p><p>If you track lines of code, you&#8217;ll get more lines. If you track velocity, you&#8217;ll get inflated estimates.  </p><p>The senior move: respond to every metric request with a pair. One for speed. One for quality or risk. Then insist on interpreting trends, not worshiping thresholds. The goal is insight, not surveillance.</p><h2>16. Admitting what you don&#8217;t know creates more safety than pretending you do.</h2><p>Senior engineers who say &#8220;I don&#8217;t know&#8221; aren&#8217;t showing weakness - they&#8217;re creating permission. When a leader admits uncertainty, it signals that the room is safe for others to do the same. The alternative is a culture where everyone pretends to understand and problems stay hidden until they explode.</p><p>I&#8217;ve seen teams where the most senior person never admitted confusion, and I&#8217;ve seen the damage. Questions don&#8217;t get asked. Assumptions don&#8217;t get challenged. Junior engineers stay silent because they assume everyone else gets it. </p><p>Model curiosity, and you get a team that actually learns.</p><h2>17. Your network outlasts every job you&#8217;ll ever have.</h2><p>Early in my career, I focused on the work and neglected networking. In hindsight, this was a mistake. Colleagues who invested in relationships - inside and outside the company - reaped benefits for decades. </p><p>They heard about opportunities first, could build bridges faster, got recommended for roles, and co-founded ventures with people they&#8217;d built trust with over years.</p><p>Your job isn&#8217;t forever, but your network is. Approach it with curiosity and generosity, not transactional hustle. </p><p>When the time comes to move on, it&#8217;s often relationships that open the door.</p><h2>18. Most performance wins come from removing work, not adding cleverness.</h2><p>When systems get slow, the instinct is to add: caching layers, parallel processing, smarter algorithms. Sometimes that&#8217;s right. But I&#8217;ve seen more performance wins from asking &#8220;what are we computing that we don&#8217;t need?&#8221;</p><p>Deleting unnecessary work is almost always more impactful than doing necessary work faster. The fastest code is code that never runs. </p><p>Before you optimize, question whether the work should exist at all.</p><h2>19. Process exists to reduce uncertainty, not to create paper trails.</h2><p>The best process makes coordination easier and failures cheaper. The worst process is bureaucratic theater - it exists not to help but to assign blame when things go wrong.</p><p>If you can&#8217;t explain how a process reduces risk or increases clarity, it&#8217;s probably just overhead. </p><p>And if people are spending more time documenting their work than doing it, something has gone deeply wrong.</p><h2>20. Eventually, time becomes worth more than money. Act accordingly.</h2><p>Early in your career, you trade time for money - and that&#8217;s fine. But at some point, the calculus inverts. You start to realize that time is the non-renewable resource.</p><p>I&#8217;ve watched senior engineers burn out chasing the next promo level, optimizing for a few more percentage points of compensation. Some of them got it. Most of them wondered, afterward, if it was worth what they gave up.</p><p>The answer isn&#8217;t &#8220;don&#8217;t work hard.&#8221; It&#8217;s &#8220;know what you&#8217;re trading, and make the trade deliberately.&#8221;</p><h2>21. There are no shortcuts, but there is compounding.</h2><p>Expertise comes from deliberate practice - pushing slightly beyond your current skill, reflecting, repeating. For years. There&#8217;s no condensed version.</p><p>But here&#8217;s the hopeful part: learning compounds when it creates new options, not just new trivia. Write - not for engagement, but for clarity. Build reusable primitives. Collect scar tissue into playbooks.</p><p>The engineer who treats their career as compound interest, not lottery tickets, tends to end up much further ahead.</p><h2>A final thought</h2><p>Twenty-one lessons sounds like a lot, but they really come down to a few core ideas: stay curious, stay humble, and remember that the work is always about people - the users you&#8217;re building for and the teammates you&#8217;re building with.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-JAK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-JAK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!-JAK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!-JAK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!-JAK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-JAK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg" width="360" height="360.24725274725273" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1457,&quot;width&quot;:1456,&quot;resizeWidth&quot;:360,&quot;bytes&quot;:4066966,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180675155?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-JAK!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!-JAK!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!-JAK!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!-JAK!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff24d22-2b08-4900-b733-bb857e7e4459_2736x2737.jpeg 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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>A career in engineering is long enough to make plenty of mistakes and still come out ahead. The engineers I admire most aren&#8217;t the ones who got everything right - they&#8217;re the ones who learned from what went wrong, shared what they discovered, and kept showing up.</p><p>If you&#8217;re early in your journey, know that it gets richer with time. If you&#8217;re deep into it, I hope some of these resonate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-kh4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-kh4!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png 424w, /__u/substackcdn.com/image/fetch/$s_!-kh4!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png 848w, /__u/substackcdn.com/image/fetch/$s_!-kh4!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-kh4!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_webp, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-kh4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1216515,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://addyo.substack.com/i/180675155?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-kh4!, /__u/addyo.substack.com/w_424, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png 424w, /__u/substackcdn.com/image/fetch/$s_!-kh4!, /__u/addyo.substack.com/w_848, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png 848w, /__u/substackcdn.com/image/fetch/$s_!-kh4!, /__u/addyo.substack.com/w_1272, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-kh4!, /__u/addyo.substack.com/w_1456, /__u/addyo.substack.com/c_limit, /__u/addyo.substack.com/f_auto, /__u/addyo.substack.com/q_auto:good, /__u/addyo.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746cd1ff-8111-4f8f-b7f9-84db223f998f_7838x7838.png 1456w" sizes="100vw" loading="lazy"></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"><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"><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"><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"><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></p>]]></content:encoded></item></channel></rss>