<?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[Refactoring]]></title><description><![CDATA[Learn how to make your engineering team ship faster and better. Read weekly by 170,000+ engineers and managers]]></description><link>https://refactoring.fm</link><image><url>https://substackcdn.com/image/fetch/$s_!CR5A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png</url><title>Refactoring</title><link>https://refactoring.fm</link></image><generator>Substack</generator><lastBuildDate>Sat, 09 May 2026 02:27:40 GMT</lastBuildDate><atom:link href="https://refactoring.fm/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Refactoring ETS]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[refactoring@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[refactoring@substack.com]]></itunes:email><itunes:name><![CDATA[Luca Rossi]]></itunes:name></itunes:owner><itunes:author><![CDATA[Luca Rossi]]></itunes:author><googleplay:owner><![CDATA[refactoring@substack.com]]></googleplay:owner><googleplay:email><![CDATA[refactoring@substack.com]]></googleplay:email><googleplay:author><![CDATA[Luca Rossi]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How I Run the Tolaria Project]]></title><description><![CDATA[All the workflows I built to run a big open source project in 2026]]></description><link>https://refactoring.fm/p/how-i-run-the-tolaria-project</link><guid isPermaLink="false">https://refactoring.fm/p/how-i-run-the-tolaria-project</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 06 May 2026 07:02:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!l86n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c9266c-bec7-4d92-b70a-f28872bf620b_4578x2906.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, Luca here! As you probably know by now, two weeks ago I launched <a href="https://github.com/refactoringhq/tolaria">Tolaria</a>, a desktop app for Mac, Linux, and Windows, to manage markdown knowledge bases &#8212; for humans and AI.</p><p>I did that to solve my own problems and to get my hands dirty with AI coding. In other words, I wanted to <em>walk the talk</em>, and then write about it here on Refactoring.</p><p>Little did I know this would feel more like <em>speedrunning</em> the talk.</p><p>Tolaria has now several thousand daily users, <strong>10K stars on Github</strong>, and last week it was the 10th fastest growing repo&#8230; in the world, as measured by <a href="https://www.star-history.com/">Star History</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wpw7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wpw7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wpw7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg" width="312" height="442.16883116883116" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:873,&quot;width&quot;:616,&quot;resizeWidth&quot;:312,&quot;bytes&quot;:324594,&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://refactoring.fm/i/196524187?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wpw7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.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 role="img" 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><title></title><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">Last week&#8217;s chart on Star History</figcaption></figure></div><p>To put things in context, there are only about ~5K repos in the world with more than 10K stars, out of ~30M.</p><p>This is of course, incredibly flattering and energizing, but I also joked with friends that I have been glued to my chair non-stop for these two weeks, because all this interest also posed very real operational problems.</p><p>Users, in fact, who are mostly engineers, contributed <em>hard</em> &#8212; and I am glad they did! As of today, Tolaria has received:</p><ul><li><p>200+ issues on Github</p></li><li><p>150+ PRs</p></li><li><p>150+ feature requests on <a href="https://tolaria.canny.io/">Canny</a></p></li></ul><p>So I had to create workflows to help handle all of this: to ensure issues would be fixed fast and people would get feedback about ideas and contributions.</p><p>Fast forward to today, I am pretty happy with how it is going, and as I write this, we are down to:</p><ul><li><p>15 open issues</p></li><li><p>11 PRs</p></li><li><p>81 feature requests</p></li></ul><p>Today&#8217;s newsletter covers all these workflows and how I &#8220;survived&#8221; these two weeks, while only working part-time on Tolaria, and the rest of the time on Refactoring &#8212; in the meantime I also had to publish 4 newsletter editions and 2 podcast episodes.</p><p>So here is the agenda:</p><ul><li><p>&#128229; <strong>Inputs</strong> &#8212; mapping and normalizing sources and channels.</p></li><li><p>&#128451;&#65039; <strong>Backlog</strong> &#8212; turning everything into a single prioritized list from which agents can take work.</p></li><li><p>&#128269; <strong>Validation</strong> &#8212; is it the one true bottleneck, as everyone is fond of saying these days?</p></li><li><p>&#128640; <strong>Release</strong> &#8212; making work available to everyone and updating all the input sources.</p></li><li><p>&#128202; <strong>Analytics</strong> &#8212; tracing what happens in production.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><h2>&#128229; Inputs</h2><p>I have never maintained a sizable open source project before, so you&#8217;ll forgive me if some of what I am about to say will sound trivial to you.</p><p>At any given time, there are several types of inputs Tolaria receives, that can <em>spawn</em> work to be done:</p><ol><li><p>Bug reports from users</p></li><li><p>Feature requests from users</p></li><li><p>PRs from contributors</p></li><li><p>Crash reports from telemetry (Sentry)</p></li><li><p>My own ideas (hello &#128075;)</p></li></ol><p>These are all separate channels but, with some degree of simplification, they spawn two types of work: <em>bugs</em> and <em>features</em>.</p><p>More specifically:</p><ul><li><p>#1 and #4 spawn bugs</p></li><li><p>#2 and #5 spawn features.</p></li><li><p>#3 (PRs) can spawn either, but mostly features.</p></li></ul><p>#1, #2, and #3 originally all lived in Github Issues, but bugs and feature requests have different <em>needs</em> and deserve to live in separate places. In fact:</p><ul><li><p><strong>Bugs</strong> &#8212; only need to be replicated and squashed as soon as possible. I am a strong believer in a zero-bugs policy: catching bugs as soon as they are reported, and fixing them all ASAP. All in all, there is very little to decide about bugs.</p></li><li><p><strong>Feature requests</strong> &#8212; are another story. They benefit from being voted on (you want to see how many people want something), are generally <em>bigger,</em> so you may want to flag things as <em>planned</em> or <em>in progress</em> so users are notified, need to be <em>specced</em>, and, of course, you don&#8217;t want to build those that don&#8217;t match your vision. That&#8217;s a lot more to decide.</p></li></ul><p>From a workflow standpoint, bugs are easy, features are not &#8212; which is why today we are down to only 15 open bugs out of 200, but still 80+ open feature requests out of 150.</p><p>The way I manage this is by keeping bugs on <a href="https://github.com/refactoringhq/tolaria/issues">Github Issues</a>, and feature requests on a <a href="http://tolaria.canny.io/">separate product board</a> on Canny.</p><p>To make people understand this, I created a rich &#8220;contribute&#8221; panel inside Tolaria where you are <em>routed</em> to different places based on how you want to help:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zdac!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zdac!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 424w, https://substackcdn.com/image/fetch/$s_!zdac!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 848w, https://substackcdn.com/image/fetch/$s_!zdac!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 1272w, https://substackcdn.com/image/fetch/$s_!zdac!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zdac!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png" width="1456" height="1286" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1286,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1128079,&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://refactoring.fm/i/196524187?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zdac!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 424w, https://substackcdn.com/image/fetch/$s_!zdac!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 848w, https://substackcdn.com/image/fetch/$s_!zdac!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 1272w, https://substackcdn.com/image/fetch/$s_!zdac!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.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 role="img" 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><title></title><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>Still a lot of things go wrong all the time:</p>
      <p>
          <a href="https://refactoring.fm/p/how-i-run-the-tolaria-project">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Personal leverage, junior engineers, and weekly reading 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #206]]></description><link>https://refactoring.fm/p/personal-leverage-junior-engineers</link><guid isPermaLink="false">https://refactoring.fm/p/personal-leverage-junior-engineers</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 04 May 2026 07:01:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vgH8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>.</em></p><div><hr></div><blockquote><h2><a href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Stop babysitting your agents!</a> &#128581;&#8205;&#9794;&#65039;</h2><p><em>Today&#8217;s newsletter is brought to you by <a href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">our friends at Unblocked</a>!</em></p><p>Agents can generate code, we know it.</p><p>But getting it right for our system, conventions, and past decisions is still the hard part &#8212; we waste time and tokens in correction loops. Patching many MCPs together may give agents access to <em>information</em>, but not necessarily <em>understanding</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vgH8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vgH8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vgH8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png" width="686" height="343" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71ddf9af-32fa-4c71-8d56-70516bfbfb84_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;:686,&quot;bytes&quot;:256566,&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://refactoring.fm/i/196095778?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vgH8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.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 role="img" 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><title></title><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 why I am a fan of what <a href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Unblocked</a> is building with their <strong>context engine</strong> &#8212; giving agents exactly what they need to <em>understand</em> things and succeed. <a href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Join their webinar on May 6th (free)</a> to see:</p><ul><li><p>Where teams get stuck on the AI maturity curve</p></li><li><p>How a context engine solves for quality, efficiency, and cost</p></li><li><p>Live demo: the same coding task with and without a context engine</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary&quot;,&quot;text&quot;:&quot;Learn more and register!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary"><span>Learn more and register!</span></a></p></blockquote><div><hr></div><h1>&#128161; Personal leverage is now unlimited</h1><p>A couple of months ago I wrote about <a href="https://refactoring.fm/p/my-experience-with-openclaw">my experience with OpenClaw</a> &#8212; what I do with it, what procedures it runs automatically, and so on.</p><p>I also argued that the story of OpenClaw itself seems to point to the idea that a good solo engineer can now achieve&#8230; pretty much anything. Look at the progression of AI assistants and coding tools:</p><ol><li><p>At first, it was VS Code + Copilot. Created by Github/Microsoft, which is a big tech.</p></li><li><p>Copilot was surpassed by Cursor, created by a team around 1/100th its size.</p></li><li><p>Cursor was then surpassed by Claude Code, which has been created literally by 2 engineers inside Anthropic, and whose team to this day is ~20 engineers.</p></li><li><p>OpenClaw has been created by Peter Steinberger. That&#8217;s it.</p></li></ol><p>In my (very small, comparably) experience with <a href="https://github.com/refactoringhq/tolaria">Tolaria</a>, I am seeing this as well. If you are equipped with the right set of ingredients, it&#8217;s hard now to see the limits of what a single engineer can do. But what are these ingredients? To me it&#8217;s:</p><ol><li><p><strong>&#128295; Tech skills</strong> &#8212; you still need these! Especially to steer a sizable project. E.g. Peter is first and foremost a world-class engineer.</p></li><li><p>&#129489;&#8205;&#127859; <strong>Taste</strong> &#8212; your personal taste for what good looks like, your domain expertise, how knowledgeable you are about the problem you want to solve, your <em>product</em> senses &#8212; these are the things that AI is not going to replace anytime soon, if ever.</p></li><li><p>&#127939; <strong>Drive</strong> &#8212; above all, the drive and discipline needed to put something out there. I know an awful lot of people who have the first two ingredients, but kinda miss this one.</p></li></ol><p>My OpenClaw article is one of the most popular pieces I have ever written, you can catch up with it below &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:187528754,&quot;url&quot;:&quot;https://refactoring.fm/p/my-experience-with-openclaw&quot;,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;title&quot;:&quot;My experience with OpenClaw &#129438;&quot;,&quot;truncated_body_text&quot;:&quot;Hey, Luca here! This is a &#128274; weekly essay &#128274; from Refactoring! To access all our articles, library, and community, subscribe to the full version:&quot;,&quot;date&quot;:&quot;2026-02-11T08:00:09.106Z&quot;,&quot;like_count&quot;:53,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-06-04T06:23:53.965Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-11-15T17:35:42.775Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:247311,&quot;user_id&quot;:6835984,&quot;publication_id&quot;:64099,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:64099,&quot;name&quot;:&quot;Refactoring&quot;,&quot;subdomain&quot;:&quot;refactoring&quot;,&quot;custom_domain&quot;:&quot;refactoring.fm&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Learn how to make your engineering team ship faster and better. Read weekly by 170,000+ engineers and managers&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;author_id&quot;:6835984,&quot;primary_user_id&quot;:6835984,&quot;theme_var_background_pop&quot;:&quot;#2096ff&quot;,&quot;created_at&quot;:&quot;2020-07-06T14:20:40.525Z&quot;,&quot;email_from_name&quot;:&quot;&#127744; Refactoring&quot;,&quot;copyright&quot;:&quot;Refactoring ETS&quot;,&quot;founding_plan_name&quot;:&quot;&#127942; Community plan&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79ab7b78-71cf-42d2-a607-3aa18960cb64_2400x572.png&quot;}}],&quot;twitter_screen_name&quot;:&quot;lucaronin&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000,&quot;status&quot;:{&quot;bestsellerTier&quot;:1000,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:1000},&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/my-experience-with-openclaw?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CR5A!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" loading="lazy"><span class="embedded-post-publication-name">Refactoring</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">My experience with OpenClaw &#129438;</div></div><div class="embedded-post-body">Hey, Luca here! This is a &#128274; weekly essay &#128274; from Refactoring! To access all our articles, library, and community, subscribe to the full version&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; 53 likes &#183; Luca Rossi</div></a></div><div><hr></div><h1>&#127897;&#65039; Junior engineers will just be fine</h1><p>Last month I <a href="https://refactoring.fm/p/every-engineer-is-a-manager-now-with">interviewed the legendary Chris Lattner</a> on the podcast. Chris created LLVM, Swift, led Tesla autopilot, brought TPUs to the market at Google, and more! He is now the founder of Modular, where he creates portable infra to work with GPUs.</p><p>Chris told me that, despite the industry-wide narrative that AI favors senior engineers, Modular is actively <strong>hiring a ton of new college grads</strong> and interns. Chris&#8217; reasoning is based on two observations:</p><ul><li><p><strong>&#129504; AI-native thinking</strong> &#8212; junior engineers bring a completely different expertise. They are native to the tools and adapt faster than many experienced engineers.</p></li><li><p><strong>&#9878;&#65039; Team balance</strong> &#8212; good teams need people at multiple levels learning from each other. All-senior or all-junior teams both fail in different ways. (we wrote about this also <a href="https://refactoring.fm/p/in-praise-of-normal-engineers">here</a>!)</p></li></ul><p>You can find the full interview with Chris below:</p><div id="youtube2-PLQs_hHTzSk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;PLQs_hHTzSk&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/PLQs_hHTzSk?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>You can also find it on &#127911; <strong><a href="https://open.spotify.com/episode/7x5fP9l9veyl7VlGFBdoH3?si=ea44113412aa4fc9">Spotify</a></strong> and &#128236; <strong><a href="https://refactoring.fm/p/every-engineer-is-a-manager-now-with">Substack</a></strong></p><div><hr></div><h1>&#128218; Weekly Readings</h1><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://www.epicproduct.engineer/the-last-software-engineer">The Last Software Engineer</a></h4><h5>10 min &#8226; by Kent C. Dodds</h5><p>Fast forward to the moment <em>right before</em> AI takes over everything engineers do &#8212; what&#8217;s the last valuable thing left? I won&#8217;t spoiler! Fantastic article by Kent.</p><div><hr></div><h4>&#129352; <a href="https://www.aicelabs.com/articles/why-sell-software-if-anyone-can-make-it">Why Sell Software If Anyone Can Make It?</a></h4><h5>2 min &#8226; by Clemens Adolphs</h5><p>It&#8217;s not hard to make bread at home &#8212; even better than the one you buy at the bakery. Yet nobody really does it at scale. Don&#8217;t let the &#8220;everyone can code now&#8221; narrative scare you out of building a software business.</p><div><hr></div><h4>&#129353; <a href="https://www.chrismdp.com/coding-with-ai/">How I use AI to Code</a></h4><h5>19 min &#8226; by Chris Sherwood</h5><p>A thorough, opinionated guide on AI coding, updated to April 2026. Covers both the mindset and the practical tools. I liked it!</p><div><hr></div><p>And that&#8217;s it for today! If you are finding this newsletter valuable, <strong>subscribe to the full version</strong>!</p><p>1700+ engineers and managers have joined already, and they receive our flagship weekly long-form articles about <strong>how to ship faster</strong> and <strong>work better together</strong>! Learn more about the <a href="http://refactoring.fm/about">benefits of the paid plan here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Make your team ship faster!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://refactoring.fm/subscribe?"><span>Make your team ship faster!</span></a></p><p>See you next week!<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[How to Own Your Career 🦝 — with Jean Hsu and Cate Huston]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 62]]></description><link>https://refactoring.fm/p/how-to-own-your-career-with-jean</link><guid isPermaLink="false">https://refactoring.fm/p/how-to-own-your-career-with-jean</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 01 May 2026 08:37:21 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/195650521/a807e546679a56097c34c97af9b6f361.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-tb5wdmTJeuk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;tb5wdmTJeuk&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/tb5wdmTJeuk?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><blockquote><p><em>Today&#8217;s sponsor is <strong>Intent</strong> by <strong>Augment</strong>. <br>Intent is a developer workspace built for orchestrating agents: it starts with the living spec that updates as agents make progress, so every task stays aligned with no manual coordination. Try it for yourself at </em><a href="https://www.augmentcode.com/product/intent">https://www.augmentcode.com/product/intent</a></p></blockquote><div class="pullquote"><p style="text-align: center;"><em><strong>Listen now:<br><a href="https://www.youtube.com/@refactoringclub">YouTube</a> | <a href="https://podcasts.apple.com/us/podcast/refactoring-podcast/id1719137305">Apple</a> | <a href="https://open.spotify.com/show/7Luds9dmzZDoDC8Q7EMbSw">Spotify</a></strong></em></p></div><p>Today's guests are <strong>Jean Hsu</strong> and <strong>Cate Huston</strong>!<br><br>Jean and Cate are extremely experienced engineering leaders and coaches, accomplished authors, and have held leadership roles at companies like DuckDuckGo, Automattic, Medium and more.<br><br>They now run a program to help engineers and managers become <em>directly responsible individuals</em> for their careers, to navigate these complicated times.<br> <br>With Jean and Cate, we talked about exploring what you want from your career, how to be intentional about it, how to use feedback to assess how you're doing, and how AI is changing and not changing the picture.</p><p>Also check out <strong><a href="https://www.driyourcareer.com/">DRI Your Career</a></strong> &#8212; their course! If you use the code <strong>REFACTORING</strong> you get 15% off!</p><div><hr></div><blockquote><p><em><strong>If you like the podcast, please give us a rating on your platform of choice! It means a lot to us &#8212; that&#8217;s how other people discover the show! &#11088;&#11088;&#11088;&#11088;&#11088;</strong></em></p></blockquote><div><hr></div><h2>&#129351; Interview Summary</h2><p>If you are a <strong>&#128274; paid subscriber &#128274;</strong> you will find my own <em>summary</em> of the interview below.</p><p>It&#8217;s the <strong>5-minute takeaways</strong> of what we talked about, with timestamps to the relevant video moments, for those who don&#8217;t have time to sit through the 1-hour chat.</p><p>Here is the agenda for today:</p><ol><li><p>&#127786;&#65039; <strong>Why these times are uniquely challenging</strong></p></li><li><p>&#129517; <strong>Figuring out what you actually want</strong></p></li><li><p>&#128257; <strong>Feedback, accountability, and the power of coaching</strong></p></li><li><p>&#129302; <strong>AI: Identity shifts and finding your way</strong></p></li><li><p>&#128161; <strong>Minimizing emotional work, maximizing outcomes</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/how-to-own-your-career-with-jean">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Compounding Software Factory 📈]]></title><description><![CDATA[The third and final episode of our software factory series!]]></description><link>https://refactoring.fm/p/the-compounding-software-factory</link><guid isPermaLink="false">https://refactoring.fm/p/the-compounding-software-factory</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 29 Apr 2026 07:55:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/37242dce-5b57-4811-a3f2-6a21cd227153_2532x1680.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there, Luca here!</p><p>Today I am back with the third and last article in our <strong>Software Factory series</strong>, written together with my friend <a href="https://www.linkedin.com/in/robzuber">Rob Zuber</a>, CTO at <a href="https://circleci.com/">CircleCI</a>.</p><p>Before this one we published:</p><ol><li><p><a href="https://refactoring.fm/p/the-era-of-the-software-factory">The Era of the Software Factory</a></p></li><li><p><a href="https://refactoring.fm/p/growing-your-sofware-factory">How to Grow your Software Factory</a></p></li></ol><p>Why three articles? Because we like to work from first principles:</p><p>In the first article we established (with <a href="https://circleci.com/resources/2026-state-of-software-delivery/">actual data</a>) that teams that are getting far with AI are doing so thanks to good DX. The same teams that had good DX three years ago, are now winning the AI race: those at the 90th percentile are shipping &gt;2x faster than before.</p><p>In the second article we said: ok, but once you have good DX, how do you create leverage with AI? And we laid out a plan in three steps:</p><ol><li><p>&#128203; <strong>Specs</strong> &#8212; start by writing good, detailed instructions about things to be done. E.g. &#8220;<em>create a button that has the following specs [&#8230;]</em>&#8221;</p></li><li><p>&#128218; <strong>Rules</strong> &#8212; turn specs into reusable <em>rules</em> for the AI to follow. This is when you can say to the AI: &#8220;<em>create a button using our rules for creating buttons</em>&#8221;.</p></li><li><p>&#129513; <strong>Modules</strong> &#8212; is the final stage, when AI can reuse <em>code</em> directly, instead of rules, and you can simply say: &#8220;<em>create a primary button</em>&#8221;</p></li></ol><p>This seems <em>good enough</em>, so why a third article?</p><p>Because if you do all of the above right, your outcome will be: a solid dev process, in which AI produces <em>good</em> <em>enough </em>work to be shipped.</p><p>Now, while this seems like an ambitious target already, I still think <strong>we should aim higher</strong>.</p><p>To understand why this matters, we need to take a step back and reflect on engineering teams <em>before</em> AI. Here is the agenda for today:</p><ul><li><p>&#128201; <strong>The default path is degradation </strong>&#8212; the uncomfortable reality of engineering teams so far.</p></li><li><p>&#128027; <strong>What causes teams to degrade </strong>&#8212; talking about coding hygiene, capturing knowledge, and building the wrong things.</p></li><li><p><strong>&#128200; How to get better instead of worse </strong>&#8212; how to invert the trend on each of these dimensions.</p></li><li><p><strong>&#127933; Empowering managers </strong>&#8212; this is <em>peak</em> manager territory. Let&#8217;s talk about what managers should really do today in the age of AI.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><p><em>As always, I want to thank Rob and the great CircleCI folks for partnering on this piece. I loved bouncing ideas off with them, and I am a fan of how they are trying to reinvent software validation for the AI era. You can learn more below </em>&#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://circleci.com/&quot;,&quot;text&quot;:&quot;Learn more about CircleCI&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://circleci.com/"><span>Learn more about CircleCI</span></a></p><p><em>Disclaimer: in the article I only wrote my unbiased opinion about all practices and tools mentioned, CircleCI included</em><strong> </strong></p><div><hr></div><h2>&#128201; The default path is degradation</h2><p>Anyone who has worked in human software teams for years &#8212; teams that work on the same codebase over a long period of time, teams that grow, shrink, rotate, and do all the things that human teams do &#8212; knows that the default trajectory is not an <em>improving</em> one. It&#8217;s not even <em>staying put</em>.</p><p>Over time, the default is <strong>getting worse</strong>.</p><p>Codebases become a mess, large teams ship less than small teams (per engineer, but often as a whole), and products get shitty.</p><p>There are exceptions of course, but this is the reality of engineering for probably 90% of teams.</p><p>I think it&#8217;s exactly this bias, plus the fear of losing control over code, that makes us happy with AI <em>just</em> getting things right. Good enough. If we get moderately faster through this, and don&#8217;t degrade over time, that&#8217;s a victory already!</p><p>And that&#8217;s true, but what if we don&#8217;t stop there? What if the default becomes that <strong>things get better over time</strong>, instead of worse?</p><p>What if, for any change, instead of asking &#8220;<em>is this good enough to ship?</em>&#8221; we asked ourselves: &#8220;<em>does this change make the next easier/safer/cheaper</em>&#8221;?</p><p>In other words, a world in which, over time:</p><ul><li><p><strong>The team gets faster</strong> &#8212; both individually and as a whole.</p></li><li><p><strong>AI gets more accurate</strong> &#8212; because tech and product get better understood.</p></li><li><p><strong>The codebase gets better</strong> &#8212; because of the aggregated understanding of the problem, the continuous refinement of the abstractions, and the collective time spent on making things right.</p></li></ul><p>This has been discussed in recent times already, and often goes by the name of <a href="https://lethain.com/everyinc-compound-engineering/">compound engineering</a> &#8212; but it&#8217;s still unclear how to pull it off.</p><p>So today we are taking a stab at what <strong>real-world compound engineering</strong> might look like, based on the actual tools available, and our respective experience:</p><ul><li><p>Rob has the privileged vantage point of overseeing the workflows of tens of thousands of teams via <a href="https://circleci.com/">CircleCI</a>. CI is the <em>crossroads</em> through which most software activity <em>has</em> to go through, so it&#8217;s perfect to spot patterns, see what works, and what doesn&#8217;t.</p></li><li><p>On my end, <a href="https://refactoring.fm/p/introducing-tolaria">I have been building Tolaria</a> for several months now (p.s. we got to 8K stars on <a href="https://github.com/refactoringhq/tolaria">Github</a>!), have written 100K+ lines of code for it in over 2000 commits, and have developed strong opinions about the state of AI coding today.</p></li></ul><blockquote></blockquote><div><hr></div><h2>&#128027; What causes teams to degrade</h2><p>I like to address problems by <em>inversion</em>, so to figure out how to make things get better, I like to start by reflecting on what makes them worse &#8212; and then avoid that!</p><p>We could spend weeks just debating this, but I&#8217;ll keep things simple and give you my top three candidates for what makes engineering teams (and products) degrade over time:</p><h3>1) Coding hygiene</h3><p>There is an obvious baseline of coding hygiene that helps keep things maintainable, like:</p><ul><li><p><strong>&#128300; Good testing coverage</strong> &#8212; made of actual good tests (see <a href="https://medium.com/@kentbeck_7670/test-desiderata-94150638a4b3">Kent Beck&#8217;s desiderata</a>)</p></li><li><p><strong>&#129658; Good code health</strong> &#8212; high cohesion, low cyclomatic complexity, small files, no bumpy roads, etc.</p></li><li><p><strong>&#129521; Good basic abstractions</strong> &#8212; that encapsulate <em>domain language</em>, instead of using language primitives all the time.</p></li></ul><p>A key characteristic of coding hygiene is that it is largely domain agnostic. In fact, it can be easily evaluated by automatic tools that know nothing about your product.</p><p>It&#8217;s also, honestly, <strong>hard to maintain</strong>. Writing good tests is hard for a variety of reasons, they pose nasty tradeoffs and cause endless fights for time to market. Good code health is easier said than done, and even basic abstractions are often challenging.</p><p>So I empathize with teams that struggle with these &#8212; but nevertheless, these are the basics. What comes next is harder.</p><h3>2) Capturing knowledge</h3><p>If there is a single thing that <em>compounds</em> in life, it is knowledge. Knowledge is leverage, and teams are generally very bad at capturing and growing their collective knowledge.</p><p>First of all, they capture very little: no records of their decisions, no snapshots of what exists today (in whatever format), no vision/mission statements.</p><p>Also, most often no playbooks on how to do things: from designing features, to coding specific parts of the product, to operating systems in prod.</p><p>Again, I am not faulting anyone for this. Writing things down is hard, and keeping them updated is even harder.</p><h3>3) Building the wrong thing</h3><p>As a result of dubious knowledge + poor hygiene, we often end up <strong>building the wrong things</strong>.</p><p>And the more wrong things we build, the harder it becomes to steer a codebase, because of little residual design space (from bad abstractions), little confidence in changes (from little testing), and so on.</p><p>Again, these are all things that, <em>by default</em>, get worse with time. We know this from research. Large and old orgs, vs small and young ones, perform worse on all dimensions:</p><ul><li><p>Code health is worse.</p></li><li><p>Institutional knowledge is less shared.</p></li><li><p>Product moves slower.</p></li></ul><p>So how do we not only <em>stop</em> the trend, but invert it? Let&#8217;s take on these one by one &#128071;</p><div><hr></div><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!alN4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!alN4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 424w, https://substackcdn.com/image/fetch/$s_!alN4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 848w, https://substackcdn.com/image/fetch/$s_!alN4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 1272w, https://substackcdn.com/image/fetch/$s_!alN4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!alN4!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png" width="1200" height="429.3956043956044" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:200363,&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://refactoring.fm/i/195748040?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!alN4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 424w, https://substackcdn.com/image/fetch/$s_!alN4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 848w, https://substackcdn.com/image/fetch/$s_!alN4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 1272w, https://substackcdn.com/image/fetch/$s_!alN4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.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 role="img" 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><title></title><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>&#128300; Improving code hygiene</h2><p>As a result of AI writing the code, you can&#8212;and should&#8212;enforce it to write good code.</p><p>In my experience, you can do so by combining:</p><ul><li><p><strong>Rules and skills</strong> &#8212; about <em>what</em> the agent should do (e.g. always write tests) and <em>how</em> it should do it (e.g. what makes for a good test?)</p></li><li><p><strong>Gates</strong> &#8212; agents often simply <em>ignore</em> rules, so you need gates that enforce these rules. Code health above X, test coverage above Y, and so on.</p></li></ul><p>There are a ton of tools today that can automatically check for anything you can think of, and I am personally a fan of integrating them both in the CI (as usual), and as local hooks (e.g. with <a href="https://typicode.github.io/husky/">Husky</a>), to shift things <em>left</em> and let AI find problems earlier. Rob believes this is where <em>validation</em> infra needs to go: creating environments fast enough, real enough, and context-aware enough for agents to validate against before code reaches shared infrastructure.</p><p>There is also hygiene work that comes from regular maintenance, <em>after</em> the code is in prod. This is classic KTLO, from updating dependencies, to fixing small bugs, investigating failures in logs, and more.</p><p>This is all work where today AI can give you an incredible hand. What used to be recurring grunt work for your team, can turn into recurring automations that lead to PR drafts. You can create some for:</p><ul><li><p>Proposing dependency updates</p></li><li><p>Scanning for security vulnerabilities, from well-known online lists</p></li><li><p>Fetch insights from Sentry and your instrumentation to auto-fix bugs before you are even aware of them</p></li></ul><p>Personally, for Tolaria I have a hourly automation that:</p><ul><li><p>Scans Sentry logs and Github issues reported by users</p></li><li><p>Investigates and tries to reproduce them</p></li><li><p>When considered worth it, it creates tasks for the Codex/Claude queue</p></li><li><p>Bug tasks (as opposed to features) are automatically taken in charge and a fix is drafted for me to review.</p></li></ul><p>Is this perfect? No. Does it create duplicates, false positives, or simply interpret things wrong? Yes! But does it help reduce my cognitive load and effort on these? Absolutely!</p><blockquote></blockquote><div><hr></div><h2>&#128218; Capturing knowledge</h2><p>AI is fantastic at summarizing, expanding, moving, and overall <em>processing</em> content &#8212; but only if you capture it first!</p><p>And today, frankly, you should <strong>capture just about everything</strong>, exactly because of how cheap it is to process and maintain such information.</p><p>So you should capture:</p><ul><li><p><strong>Raw inputs</strong> &#8212; like meetings, brainstorming docs, things where you are <em>diverging</em>, not <em>converging.</em></p></li><li><p><strong>Decisions</strong> &#8212; e.g. ADRs in tech, but also product insights, directions you <em>decided</em> to go, and all the <em>whys</em> that the AI can&#8217;t figure out by itself by simply looking at the <em>what</em>.</p></li><li><p><strong>What exists today</strong> &#8212; I call these <em>recap</em> docs, because I believe they should be built as summaries of smaller, atomic things. You can put together a big ARCHITECTURE.md doc as a combination of the ADRs, or the product version of it by combining PRDs and specs. This is 100% AI territory today: you provide human input about single features, but leave the <em>plumbing</em> around content orchestration to the AI.</p></li></ul><p>All this stuff needs workflows to be created to capture data, process it, keep it in sync, and so on &#8212; but honestly, it&#8217;s all easy! We are engineers! And the leverage over time is incredible. So there is zero excuse not to do so.</p><blockquote></blockquote><div><hr></div><h2>&#128296; Building the right thing</h2><p>If you do the above right, the result will be building more <em>right</em> things, as opposed to <em>wrong</em> things:</p><ul><li><p>Things that build nicely on top of what already exists</p></li><li><p>Things that are coherent with past decisions</p></li><li><p>Things that work and do not degrade your codebase</p></li></ul><p>Above all, things that actually <em>improve</em> your codebase &#8212; because they record <em>more</em> decisions, say no to the things that are wrong, and yes to those that are right.</p><p>And those no&#8217;s and yeses stay there to help make better decisions in the future.</p><p>Also, such <em>compounding</em> can and should happen in all of your environment, not just the codebase: build history, pipeline patterns, team context, baked in and available over time, so agents can validate more, debug better, assess if code runs, and, most of all, if they are building the right things.</p><blockquote></blockquote><div><hr></div><h2>&#127933; Empowering managers</h2><p>I want to close by spending a few words about managers, who are often neglected in this AI conversation.</p><p>&#8220;Managers are in trouble&#8221;, &#8220;AI is for builders&#8221;, &#8220;everyone is back to coding&#8221;, and so on.</p><p>Guys, all the stuff we discussed is <em><strong>peak</strong></em><strong> manager work</strong>.</p><p>I have interviewed a lot of engineering managers on the podcast, and often asked them what&#8217;s the hardest part of their job. One of the common responses is: &#8220;<em>the feedback loop is slow</em>&#8221;.</p><p>Think about it. When you are an engineer, your feedback loop is: you write a feature, see that it works, if not you iterate, push it, possibly iterate on reviews, and it&#8217;s done. This is all extremely fast (even if it might not feel like so!).</p><p>Now compare it with the feedback loop of a manager who is trying to improve how sprint planning works. Or performance reviews. Or their team&#8217;s velocity. Any change you make to the process needs to be measured on a scale of several weeks, or months. And in many cases, what do you even measure?</p><p>Agent workflows are amazing for managers to operate because it&#8217;s like their normal work&#8230; <strong>on timelapse</strong>. Even if the agents are not that good, make mistakes, or trip over themselves, it doesn&#8217;t matter as long as they are <em>fast</em> and managers can course-correct quickly.</p><p>So if it is <em>true</em> that all engineers are becoming <em>kinda</em> like managers now, it&#8217;s also true that motivated managers can have some upper hand because, well, they are already managers!</p><blockquote></blockquote><div><hr></div><p>And that&#8217;s it for today! I wish you a great week</p><p>Sincerely &#128075;<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Bad code, progressive complexity, and weekly readings💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #205]]></description><link>https://refactoring.fm/p/bad-code-progressive-complexity-and</link><guid isPermaLink="false">https://refactoring.fm/p/bad-code-progressive-complexity-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 27 Apr 2026 07:01:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/5Q4FasJl0SA" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>.</em></p><div><hr></div><h2><a href="https://newsletter.chainofthought.show/p/inverting-the-innovators-dilemma">Reporting from Salesforce&#8217;s TDX event!</a> &#129489;&#8205;&#128187;</h2><p><em>This week&#8217;s sponsor is Salesforce!</em></p><p>Our friend <a href="https://newsletter.chainofthought.show/">Conor Bronsdon</a> was our eyes and ears on the floor at <a href="https://www.salesforce.com/tdx/">TDX</a> last week, and wrote a full breakdown on <a href="https://newsletter.chainofthought.show/p/inverting-the-innovators-dilemma">Chain of Thought</a>.</p><p>He says <a href="https://www.salesforce.com/eu/form/agentforce/maximizing-roi-with-agentforce/?d=701ed00000p99uMAAQ&amp;nc=701ed00000pCjLLAA0&amp;utm_content=701ed00000p99uMAAQ&amp;gclsrc=aw.ds&amp;gad_source=1&amp;gad_campaignid=22814410482&amp;gbraid=0AAAABAVtBhSz9uEfWIk83PbS9EjJJUZ2A&amp;gclid=CjwKCAjwqazPBhALEiwAOuXqdCdRf0LHVCkka--kPqK_4UWHYHr9LG1ow0N0iMmldmIcE-7kiaKfGRoCH6sQAvD_BwE">Agentforce</a> is now Salesforce's fastest-growing product, and the signs were everywhere at TDX:</p><ul><li><p>60+ new MCP tools in Headless 360</p></li><li><p>Agent Script open-sourced on GitHub</p></li><li><p>Agentforce Vibes 2.0 (their vibe coding tool),</p></li><li><p>plus new Slack agent capabilities.</p></li></ul><p>Salesforce went as far as publishing the full language spec, grammar, parser, and compiler for their agent-definition language. </p><p>They're betting an <strong>open agent ecosystem wins</strong> developer adoption, while enterprise-grade upgrade paths let businesses actually ship reliable agents to production.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.chainofthought.show/p/inverting-the-innovators-dilemma&quot;,&quot;text&quot;:&quot;Read the full TDX breakdown&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.chainofthought.show/p/inverting-the-innovators-dilemma"><span>Read the full TDX breakdown</span></a></p><div><hr></div><h1>&#128161; Coding is not solved, but bad code&#8230; kinda is</h1><p>Last week I launched <a href="https://refactoring.fm/p/introducing-tolaria">Tolaria</a>, which by now is one of the <a href="https://github.com/refactoringhq/tolaria">fastest growing repos</a> on the whole Github! It got <strong>6000+ stars</strong> in less than a week.</p><p>Tolaria is a lot of code: 100K+ LOCs, 2K+ commits, 3K+ tests, 70+ ADRs. I publicly said many times <a href="https://refactoring.fm/i/194609000/tolaria-refactoring">I didn&#8217;t write any of it</a>, which made some people think I believe coding is <em>solved</em>.</p><p>I don&#8217;t think coding is solved <em>at large</em>, but <em>bad code</em> feels solved. To understand what I mean by that, a useful way to think about tech debt is to split it into two kinds:</p><ul><li><p><strong>Bad code</strong></p></li><li><p><strong>Misaligned code</strong></p></li></ul><p><em>Bad code</em> is basic hygiene failure: lack of tests, high complexity, tight coupling, duplication, outdated libraries. It is bad regardless of business context, and we know it increases lead time, outages, and maintenance cost.</p><p>As of today this kind of debt is largely avoidable if you <strong>choose to enforce quality</strong>. On Tolaria, AI-generated code must meet three gates: high test coverage, strong CodeScene health scores, and current library/docs usage. These rules live both in CLAUDE.md and CI, because agents still forget or ignore instructions. Once those checks are in place, the basics can be trusted without manually reviewing every line.</p><p><em>Misaligned code</em> is harder, and is definitely not solved yet. Code may be clean, tested, and well-structured, but still wrong for the product direction you want. It&#8217;s code that is a good circle when you really needed a square: a leaky abstraction, an old design assumption, or a model that no longer matches intent.</p><p>Reviewing architecture and abstractions still feels supremely important, because they're the things that the AI model can&#8217;t figure out by itself, because they are about what you want to build in the future, and why.</p><p>I wrote more about this in my series of articles about my AI coding workflow:</p><ol><li><p><strong><a href="https://refactoring.fm/p/my-ai-coding-workflow">My AI Coding Workflow</a></strong> (Feb 2026)</p></li><li><p><strong><a href="https://refactoring.fm/p/updates-to-my-ai-coding-workflow">Updates to My AI Coding Workflow</a></strong> (Apr 2026)</p></li><li><p><strong><a href="https://refactoring.fm/p/introducing-tolaria">Introducing Tolaria</a></strong> (last week!)</p></li></ol><div><hr></div><h1>&#127897;&#65039; Progressive disclosure of complexity</h1><p>In May last year I interviewed Guillermo Rauch, founder and CEO of Vercel</p><p>Guillermo talked about the qualities of great technology, and one principle that stuck with me was what he called the <strong>progressive disclosure of complexity</strong>.</p><p>A defining feature of great tech is that&#8217;s approachable for beginners but powerful enough for enterprise needs.</p><p>This principle guides the design of Vercel, Next.js, and everything they do.</p><blockquote><p><em><strong>&#8220;I&#8217;m building a platform that should not be intimidating for your first line of code, and gives you the superpower that you could be one day a top 30 internet website with the same infrastructure, with the same tools, with the same access.&#8221;</strong></em></p></blockquote><p>Guillermo draws inspiration from products like the iPhone, which can be used by both children and the elderly while still serving business professionals with complex needs.</p><p>His approach to API design focuses on what he calls <em>token minimization</em> (not AI tokens!) &#8212; requiring minimal code to get started, then gradually introducing more sophisticated features as needed:</p><ul><li><p>&#127937; <strong>Low barrier to entry</strong> &#8212; a new Next.js project can be started with just a few lines of code.</p></li><li><p>&#127793; <strong>Growing with users</strong> &#8212; complexity is only introduced when needed for specific requirements.</p></li><li><p>&#128260; <strong>Same technology at all scales</strong> &#8212; the technology that powers a beginner&#8217;s first project is the same that can scale to handle millions of users.</p></li></ul><p>Here is the full interview with Guillermo:</p><div id="youtube2-5Q4FasJl0SA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;5Q4FasJl0SA&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/5Q4FasJl0SA?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>You can also find it on &#127911; <strong><a href="https://open.spotify.com/episode/2K73fsshI6PvWPsd0pPPHq?si=49224547d4b6431d">Spotify</a></strong> and &#128236; <strong><a href="https://refactoring.fm/p/the-vercel-journey-with-guillermo">Substack</a></strong></p><div><hr></div><h1>&#128218; Weekly Readings</h1><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://theengineeringmanager.substack.com/p/my-cto-daily-driver">My CTO Daily Driver</a></h4><h5>8 min &#8226; by James Stanier</h5><p>I basically recommend all of James&#8217; articles, and this makes no exception. He explains how he uses Claude Code to drive a personalized <em>CTO workspace</em> with memory. With custom slash commands tied to Linear, Notion, and BetterStack.</p><div><hr></div><h4>&#129352; <a href="https://bcantrill.dtrace.org/2026/04/12/the-peril-of-laziness-lost/">The Peril of Laziness Lost</a></h4><h5>12 min &#8226; by Bryan Cantrill</h5><p>Laziness has always been a programmer&#8217;s <em>virtue</em> &#8212; it&#8217;s what drives us to build abstractions instead of doing the same thing twice. LLMs don&#8217;t have that instinct: you have to <em>supply it</em> to them. If you don&#8217;t, you lose the elegance, efficiency, and maintainability that comes from human constraints.</p><div><hr></div><h4>&#129353; <a href="https://x.com/intuitiveml/status/2043545596699750791?s=46">99% of Our Production Code Is Written by AI</a></h4><h5>20 min &#8226; by Peter Pang</h5><p>Took a lot of ideas from this post. Feels a bit AI-generated at times, but the ideas around feature gates, self-healing feedback loop, and bug fixing are awesome. Peak &#8220;harness engineering&#8221;, as kids call it these days.</p><div><hr></div><p>And that&#8217;s it for today! If you are finding this newsletter valuable, <strong>subscribe to the full version</strong>!</p><p>1700+ engineers and managers have joined already, and they receive our flagship weekly long-form articles about <strong>how to ship faster</strong> and <strong>work better together</strong>! Learn more about the <a href="http://refactoring.fm/about">benefits of the paid plan here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Make your team ship faster!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://refactoring.fm/subscribe?"><span>Make your team ship faster!</span></a></p><p>See you next week!<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Tolaria is doing numbers! 🚀]]></title><description><![CDATA[Thank you so much for this &#128591;]]></description><link>https://refactoring.fm/p/tolaria-is-doing-numbers</link><guid isPermaLink="false">https://refactoring.fm/p/tolaria-is-doing-numbers</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Thu, 23 Apr 2026 07:46:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CR5A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey! <a href="https://refactoring.fm/p/introducing-tolaria">Tolaria&#8217;s launch</a> has been absolutely incredible so far!</p><p>It went <a href="https://x.com/lucaronin/status/2046877445748322418">viral on X</a>, got a ton of replies via email (sorry if I didn&#8217;t get back to everyone yet!) and an insane <a href="https://github.com/refactoringhq/tolaria">700 stars</a> on Github.</p><p>As a refresher, if you missed yesterday&#8217;s email, Tolaria is a <strong>free &amp; open source</strong> desktop macOS app for managing markdown knowledge bases. It&#8217;s similar to Obsidian, &#8230;</p>
      <p>
          <a href="https://refactoring.fm/p/tolaria-is-doing-numbers">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Introducing Tolaria 💧]]></title><description><![CDATA[A free & open source macOS app for managing markdown knowledge bases.]]></description><link>https://refactoring.fm/p/introducing-tolaria</link><guid isPermaLink="false">https://refactoring.fm/p/introducing-tolaria</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 22 Apr 2026 08:06:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XRY5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, Luca here &#8212; the wait is over! After <a href="https://refactoring.fm/p/updates-to-my-ai-coding-workflow">teasing it</a> during the last month, today I am making <a href="http://tolaria.md/">Tolaria</a> available to everyone, free and open source. You can find it <a href="https://github.com/refactoringhq/tolaria">here</a> and download the latest release.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/refactoringhq/tolaria&quot;,&quot;text&quot;:&quot;Check out Tolaria &#128167;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/refactoringhq/tolaria"><span>Check out Tolaria &#128167;</span></a></p><h2>What is Tolaria?</h2><p>Tolaria is a desktop app for Mac for managing <strong>markdown knowledge bases</strong>. In a way, it&#8217;s my own version of <a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f">Karpathy&#8217;s LLM wiki</a>.</p><p>I have a close &#8230;</p>
      <p>
          <a href="https://refactoring.fm/p/introducing-tolaria">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Devex floor, saving the day, and weekly reading 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #204]]></description><link>https://refactoring.fm/p/devex-floor-saving-the-day-and-weekly</link><guid isPermaLink="false">https://refactoring.fm/p/devex-floor-saving-the-day-and-weekly</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 20 Apr 2026 07:00:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vm_O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>.</em></p>
      <p>
          <a href="https://refactoring.fm/p/devex-floor-saving-the-day-and-weekly">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AI Coding meets Code Health 🪄 — with Stuart Caborn]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 61]]></description><link>https://refactoring.fm/p/ai-coding-meets-code-health-with</link><guid isPermaLink="false">https://refactoring.fm/p/ai-coding-meets-code-health-with</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 17 Apr 2026 07:01:17 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/194274334/842d647b625d80917cb00b8d08ddf68a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-msEjXJhL0HM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;msEjXJhL0HM&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/msEjXJhL0HM?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><blockquote><p><em>Today&#8217;s sponsor is <strong>Intent</strong> by <strong>Augment</strong>. <br>Intent is a developer workspace built for orchestrating agents: it starts with the living spec that updates as agents make progress, so every task stays aligned with no manual coordination. Try it for yourself at </em><a href="https://www.augmentcode.com/product/intent">https://www.augmentcode.com/product/intent</a></p></blockquote><div class="pullquote"><p style="text-align: center;"><em><strong>Listen now:<br><a href="https://www.youtube.com/@refactoringclub">YouTube</a> | <a href="https://podcasts.apple.com/us/podcast/refactoring-podcast/id1719137305">Apple</a> | <a href="https://open.spotify.com/show/7Luds9dmzZDoDC8Q7EMbSw">Spotify</a></strong></em></p></div><p>Today's guest is <strong>Stuart Caborn</strong>, Distinguished Engineer at <a href="https://www.loveholidays.com/">Loveholidays</a>, an online travel agency with millions of customers worldwide.</p><p>Stuart's team is doing AI coding for real:</p><ul><li><p>Each engineer deploys to production more than <strong>80 times a month</strong></p></li><li><p>Over <strong>60% of production code is written by AI</strong></p></li><li><p>All while maintaining an elite change failure rate under 1%, and <strong>perfect code health</strong>.</p></li></ul><div><hr></div><blockquote><p><em><strong>If you like the podcast, please give us a rating on your platform of choice! It means a lot to us &#8212; that&#8217;s how other people discover the show! &#11088;&#11088;&#11088;&#11088;&#11088;</strong></em></p></blockquote><div><hr></div><h2>&#129351; Interview Summary</h2><p>If you are a <strong>&#128274; paid subscriber &#128274;</strong> you will find my own <em>summary</em> of the interview below.</p><p>It&#8217;s the <strong>5-minute takeaways</strong> of what we talked about, with timestamps to the relevant video moments, for those who don&#8217;t have time to sit through the 1-hour chat.</p><p>Here is the agenda for today:</p><ol><li><p><strong>&#9992;&#65039; The complexity of online travel</strong></p></li><li><p><strong>&#127973; Code health before AI</strong></p></li><li><p><strong>&#129302; Becoming an AI-first engineering team</strong></p></li><li><p><strong>&#128737;&#65039; Guardrails, reviews, and trusting the machine</strong></p></li><li><p><strong>&#128260; How AI is changing the development process</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/ai-coding-meets-code-health-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Introducing the AI Club 🪄]]></title><description><![CDATA[A new monthly gathering for Refactoring community members]]></description><link>https://refactoring.fm/p/introducing-the-ai-club</link><guid isPermaLink="false">https://refactoring.fm/p/introducing-the-ai-club</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 15 Apr 2026 07:03:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f2cd68bf-0153-4ae0-83e5-872a611b8e9f_1240x640.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there! This is a special edition to announce I am starting a private <strong>AI Club</strong> for members of the Refactoring community!</p><p>These are going to be <strong>monthly online gatherings</strong> where people can share wins and learnings from using AI, ask questions, and stay up to date about what works.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;http://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Join our AI Club &#129668;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="http://refactoring.fm/subscribe?"><span>Join our AI Club &#129668;</span></a></p><p>So today&#8217;s post is to explain 1) why I am starting it, and<strong> </strong>2) how it works.</p>
      <p>
          <a href="https://refactoring.fm/p/introducing-the-ai-club">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Asking engineers, signal areas, and weekly readings 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #203]]></description><link>https://refactoring.fm/p/asking-engineers-signal-areas-and</link><guid isPermaLink="false">https://refactoring.fm/p/asking-engineers-signal-areas-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 13 Apr 2026 07:39:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dofp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>.</em></p>
      <p>
          <a href="https://refactoring.fm/p/asking-engineers-signal-areas-and">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Updates to my AI Coding Workflow]]></title><description><![CDATA[As of April 2026]]></description><link>https://refactoring.fm/p/updates-to-my-ai-coding-workflow</link><guid isPermaLink="false">https://refactoring.fm/p/updates-to-my-ai-coding-workflow</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 08 Apr 2026 07:12:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7c31c0da-a80c-463b-8804-c108402a8d19_1200x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>About a month ago I wrote an article about my <a href="https://refactoring.fm/p/my-ai-coding-workflow">AI coding workflow</a>, and it <em>instantly</em> became the most popular Refactoring article of all time.</p><p>I received a lot of private comments, most of which can be organized into two categories:</p><ul><li><p>People wanting to learn more about the <strong>coding workflow</strong> itself.</p></li><li><p>People wanting to learn more about the <strong>note-taking</strong> <strong>app</strong> I am building.</p></li></ul><p>Both types of comments motivated me <em>a lot</em>, to the point where I decided to make all of this an official part of my Refactoring work, as follows:</p><ul><li><p>I am going to build this app for real, make it free and open source for everyone, and keep working on it as an ongoing effort.</p></li><li><p>I am going to report my learnings about AI coding as part of the regular writing schedule, let&#8217;s say once a month or so.</p></li></ul><p>I am convinced this is the right thing to do because, frankly, <strong>getting AI coding right is the #1 problem in software engineering</strong> today, and it&#8217;s not even close.</p><p>The economics of software are changing so much that there is no part of the process that is <em>safe</em>. Code reviews, QA, planning, staffing, traditional management &#8212; everything feels up for grabs and <em>downstream </em>of what happens with coding.</p><p>Also, while I love doing research and talking with others (e.g. on the podcast), opinions are so scattered across the board that I feel the strong need to try things myself, and do so in a serious, ongoing way.</p><p>So here is today&#8217;s agenda:</p><ul><li><p>&#128167; <strong>Building Tolaria</strong> &#8212; a personal knowledge management app for the age of AI.</p></li><li><p>&#129438; <strong>OpenClaw vs Claude Code</strong> &#8212; how I use them, and to do what.</p></li><li><p>&#128295; <strong>Coding workflow</strong> &#8212; what changed vs one month ago, and what stayed the same.</p></li><li><p>&#128209; <strong>ADRs</strong> &#8212; the best recent addition to my coding.</p></li><li><p>&#127912; <strong>Product workflow</strong> &#8212; how I create specs.</p></li><li><p><strong>&#128184; How much I am spending</strong> &#8212; because I know y&#8217;all want to know that.</p></li><li><p>&#129302; <strong>CLAUDE.md</strong> &#8212; bonus: my current Claude file, attached in full.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><h2>&#128167; Building Tolaria</h2><p>In the last article I said that what I was building didn&#8217;t matter much, well now it kinda does, because you are going to hear a lot more about it in the future.</p><p><strong><a href="http://tolaria.md/">Tolaria</a></strong> is a personal knowledge management app, extremely opinionated and tailored for my own personal use, but I hope it can be useful to others too.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BUFS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BUFS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 424w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 848w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 1272w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BUFS!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png" width="1200" height="1219.7802197802198" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:1480,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:3089503,&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://refactoring.fm/i/193368488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BUFS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 424w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 848w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 1272w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.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 role="img" 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><title></title><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 worth noting that this is not a particularly original idea. There exist plenty of tools in this space &#8212; Notion, Obsidian, Craft, Roam, and more &#8212; and most of them are very well made. Still, I know plenty of smart people who lately have been experimenting with weird setups. </p><p>Just last week, <a href="https://x.com/karpathy/status/2039805659525644595">Karpathy wrote a viral tweet</a> exactly about that.</p><p>Why such a renewed excitement around <strong>knowledge management</strong>? Because everyone who tries to work <em>seriously</em> with AI agents eventually understands that this is a core problem to solve: continuously <em>supplying</em> agents with reliable, up-to-date information about your life and work, and creating a good collaboration surface on these.</p><p>I suspect this still feels a bit abstract, so I&#8217;ll make a few examples from my own work:</p><ul><li><p>An agent should periodically fetch meeting summaries from tools like Fathom or Fireflies, create a note for the meeting with the summary and action items, and link the note to individual attendees (each of whom should have a page for themselves). If there are attendees who are <em>new</em>, the agent should create individual notes for each of them, enriching my personal CRM.</p></li><li><p>An agent should receive voice notes from me and turn them into long-term notes and tasks, and connect them to the relevant existing pages.</p></li><li><p>An agent should take every new article I write and split it into atomic evergreen ideas, connect them to similar ideas I have already saved in the past, and better organize my knowledge base so that it&#8217;s easier to write new articles in the future.</p></li><li><p>An agent should suggest new article topics and podcast guests based on my recent readings and how these connect to things I have written in the past and interviews I already did.</p></li></ul><p>In terms of intelligence required, most of these tasks are <strong>trivial</strong>. But they need a good collaboration surface 1) for agents to fetch the relevant info and 2) for me to work well with them.</p><p><a href="https://tolaria.md/">Tolaria</a> is my attempt to build this for myself first, and hopefully for some others too.</p><p>It will be completely<strong> free and open source</strong>, so that it also works as a <strong>visible artifact</strong> of my <em>understanding</em> of how to create products with AI, for other people to inspect.</p><p>At any given time, if you want to know e.g. what I write in my CLAUDE.md, or how I write docs, or what types of tests I write and which I don&#8217;t &#8212; you shouldn&#8217;t just <em>trust</em> my articles, you should be able to go to the repo and see for yourself.</p><p>This way, the ideas you read on Refactoring become the result of three things:</p><ul><li><p><strong>&#128218; Research</strong> &#8212; I read and collect experiences from others.</p></li><li><p>&#128172; <strong>Conversations</strong> &#8212; I go deeper by running community events and 1:1 podcast interviews.</p></li><li><p>&#128295; <strong>Personal work</strong> &#8212; I do coding and product development myself to stress-test these beliefs.</p></li></ul><p>All of these elements are meant to be <em>public</em>: you can get <a href="https://refactoring.fm/i/193052967/weekly-readings">weekly digests</a> of what I read, listen to the <a href="https://refactoring.fm/podcast">podcast conversations</a>, <a href="https://refactoring.fm/p/refactoring-community">join the community</a> to chat with me (and others), and inspect the Tolaria codebase (soon!) to see how I write code.</p><p>Tolaria is not ready yet but it will be in a couple of weeks!</p><p>So where are we today? Here is an exec summary. Since I started working on it around mid Feb, here is what I got:</p><ul><li><p><strong>1526 commits</strong> &#8212; that is ~30 commits/day on average</p></li><li><p><strong>~70K LOCs</strong> &#8212; about 45 lines / commit</p></li><li><p><strong>~3000 tests</strong> &#8212; about 85% coverage</p></li><li><p><strong>9.5/10 code health</strong> &#8212; as measured by CodeScene</p></li><li><p><strong>40+ ADRs</strong> &#8212; to track our core tech choices, plus three summary docs for Architecture, Abstractions, and Getting Started.</p></li></ul><p>That&#8217;s 2.5x the amount of code we had last month (we were at 20K LOCs), with better code health (9.5 vs 9.3), and better docs. I am still not writing any code, and I am still reading very little of it.</p><p>The product also got way better to the point where, by now, I have fully replaced my Notion workspace. It still feels surreal to say that out loud, after 6+ years of really intensive Notion usage, but here we are.</p><p>So let&#8217;s get into how I work on it, starting with coding &#128071;</p><div><hr></div><h2>&#129438; OpenClaw vs Claude Code</h2><p>In last month&#8217;s <a href="https://refactoring.fm/p/my-ai-coding-workflow">post</a> I said that basically I acted as CEO, OpenClaw worked as a PM, and Claude Code worked as a team of designers + engineers.</p><p>Has any of this changed? Yes, and no. Roles are still kinda the same, but I am not using Claude Code strictly <em>together</em> with OpenClaw anymore, in the sense that the latter directs the former, but more in an async way. This change has been driven by three reasons:</p><ul><li><p>&#128184; <strong>Cost</strong> &#8212; the initial workflow in which OpenClaw steered CC all the time was wildly inefficient in terms of token spend.</p></li><li><p>&#127891; <strong>Capabilities</strong> &#8212; CC has caught up with a lot of OpenClaw stuff. Most of all, it has loops now.</p></li><li><p>&#128110;&#8205;&#9794;&#65039; <strong>Legal</strong> &#8212; most recently, Anthropic has explicitly banned this type of usage, but to be fair I had stopped it already.</p></li></ul><p>So by now my OpenClaw and Claude Code work on separate things, in a completely asynchronous way:</p><ul><li><p>OpenClaw turns my inputs into product specs, checks on the general status of things, brainstorms new ideas, and in general does the work that benefits from <em>broad</em> context.</p></li><li><p>Claude Code does all the technical work, including coding, writing ADRs and docs, and, crucially, QA, that was done by OpenClaw before.</p></li></ul><p>OpenClaw doesn&#8217;t interact with Claude Code anymore, but it periodically checks that it doesn&#8217;t get stuck or crashes (which can happen for a variety of reasons). In that case, it restarts it.</p><div><hr></div><h2>&#128295; Coding workflow</h2><p>This article is largely meant to work as a <em>delta</em> vs my original AI coding article to highlight things that have changed, but it&#8217;s also worth noting the good stuff that <em>has not changed.</em></p><p>The highest leverage parts of the AI coding workflow are <em>still</em> probably the CI gates on <strong>code health</strong> and <strong>test coverage</strong>. These gates exist in two places:</p>
      <p>
          <a href="https://refactoring.fm/p/updates-to-my-ai-coding-workflow">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA["Why" context, functional teams, and weekly readings 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #202]]></description><link>https://refactoring.fm/p/why-context-functional-teams-and</link><guid isPermaLink="false">https://refactoring.fm/p/why-context-functional-teams-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 06 Apr 2026 07:12:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0UaP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c80fb31-523a-4379-a3f9-e829d6bdca3a_2042x1184.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>:</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Make your team ship faster!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://refactoring.fm/subscribe?"><span>Make your team ship faster!</span></a></p><p><em>Resources: </em>&#127963;&#65039;<em> <strong><a href="https://refactoring.fm/p/library-tracks">Library</a></strong> &#8226; </em>&#128172;<em> <strong><a href="https://refactoring.fm/p/refactoring-community">Community</a> </strong>&#8226;<strong> </strong></em><strong>&#127897;&#65039;</strong><em><strong> <a href="https://refactoring.fm/podcast">Podcast</a> </strong>&#8226; </em>&#128227;<em> <strong><a href="https://airtable.com/app6T1no2xUAkvqqI/pagmohBDjtBNk9dKY/form">Advertise</a> </strong></em></p>
      <p>
          <a href="https://refactoring.fm/p/why-context-functional-teams-and">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Every Engineer Is a Manager Now 🤖 — with Chris Lattner]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 60]]></description><link>https://refactoring.fm/p/every-engineer-is-a-manager-now-with</link><guid isPermaLink="false">https://refactoring.fm/p/every-engineer-is-a-manager-now-with</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 03 Apr 2026 07:03:15 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/192704261/64e49b7ac57430be939daf60bafd5c5d.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-PLQs_hHTzSk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;PLQs_hHTzSk&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/PLQs_hHTzSk?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><blockquote><p><em>Today&#8217;s sponsor is <strong>Intent</strong> by <strong>Augment</strong>. <br>Intent is a developer workspace built for orchestrating agents: it starts with the living spec that updates as agents make progress, so every task stays aligned with no manual coordination. Try it for yourself at </em><a href="https://www.augmentcode.com/product/intent">https://www.augmentcode.com/product/intent</a></p></blockquote><div class="pullquote"><p style="text-align: center;"><em><strong>Listen now:<br><a href="https://www.youtube.com/@refactoringclub">YouTube</a> | <a href="https://podcasts.apple.com/us/podcast/refactoring-podcast/id1719137305">Apple</a> | <a href="https://open.spotify.com/show/7Luds9dmzZDoDC8Q7EMbSw">Spotify</a></strong></em></p></div><p>Today&#8217;s guest is <strong>Chris Lattner</strong>, one of the most important engineers for modern computing. Chris invented key compiler infrastructure tech like LLVM and MLIR, but he&#8217;s also the inventor of the Swift language, a key contributor in bringing Google TPUs to market, and a lot more. Today he&#8217;s the founder and CEO of <a href="https://modular.com/">Modular</a>, where he&#8217;s reinventing AI infrastructure to make software portable across GPUs and platforms.</p><p>With Chris, we talked about <strong>his vision for AI and computing</strong>. We talked about how Modular&#8217;s mission makes us closer to a future where AI is open and portable. And we talked about open source, how AI is both empowering and straining contributors, how it&#8217;s changing intellectual property, and what workflows we need to change as engineers.</p><p>Finally, we discussed how AI is <strong>changing software craftsmanship</strong>, how he&#8217;s bullish about junior engineers, and a lot more.</p><div><hr></div><blockquote><p><em><strong>If you like the podcast, please give us a rating on your platform of choice! It means a lot to us &#8212; that&#8217;s how other people discover the show! &#11088;&#11088;&#11088;&#11088;&#11088;</strong></em></p></blockquote><div><hr></div><h2>&#129351; Interview Summary</h2><p>If you are a <strong>&#128274; paid subscriber &#128274;</strong> you will find my own <em>summary</em> of the interview below.</p><p>It&#8217;s the <strong>5-minute takeaways</strong> of what we talked about, with timestamps to the relevant video moments, for those who don&#8217;t have time to sit through the 1-hour chat</p><p>Here is the agenda for today:</p><ol><li><p><strong>&#128295; Modular&#8217;s mission and the GPU accessibility gap</strong></p></li><li><p><strong>&#127760; Open source in the age of AI</strong></p></li><li><p><strong>&#9889; AI and software craftsmanship</strong></p></li><li><p><strong>&#128105;&#8205;&#128187; Junior engineers, manager thinking, and team building</strong></p></li><li><p><strong>&#127959;&#65039; Best practices under pressure</strong></p></li></ol><p>Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/every-engineer-is-a-manager-now-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Grow your Software Factory]]></title><description><![CDATA[Rules, modules, and the path to AI leverage]]></description><link>https://refactoring.fm/p/growing-your-sofware-factory</link><guid isPermaLink="false">https://refactoring.fm/p/growing-your-sofware-factory</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 01 Apr 2026 07:02:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FXrO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last month I published <a href="https://refactoring.fm/p/the-era-of-the-software-factory">The Era of the Software Factory</a>, where I commented on the latest <a href="https://circleci.com/software-delivery-data-explorer/">State of Software Delivery</a> together with Rob Zuber, a good friend and CTO of CircleCI.</p><p>In that piece we argued that software engineering was undergoing a transformation from craftsmanship to factory work, with the gap between elite and average teams being more and more the result of good control systems and tight feedback loops, as opposed to individual brilliance.</p><p>Some will argue it has always been the case. Chasing 10x engineers has always felt like a dubious idea, with the healthy version being: let&#8217;s build a <a href="https://refactoring.fm/p/in-praise-of-normal-engineers">10x team</a>, instead.</p><p>Whether or not it felt true in the past, it certainly feels true now. The report showed that elite teams <em>today</em> &#8212; those that are getting the most out of AI &#8212; are exactly the ones who already had the best delivery infrastructure <em>yesterday</em> (i.e. 3 years ago). Today, these teams are both running their &#8220;factory&#8221; faster, and <em>improving</em> it faster. They are going faster than others, and accelerating faster, too.</p><p>So how do they do that? What does getting better look like? How do you even know it&#8217;s happening?</p><p>Let&#8217;s get practical and try to bridge this gap. Here is the agenda for today:</p><ol><li><p><strong>&#129518; DORA metrics are not enough </strong>&#8212; we need leading indicators of AI success</p></li><li><p><strong>&#128202; Specs, rules, and modules </strong>&#8212; a simple mental model for AI leverage in three steps</p></li><li><p><strong>&#129716; Making things compound </strong>&#8212; how to make things happen on your team</p></li></ol><p>Let&#8217;s dive in!</p><div><hr></div><p>I am grateful to Rob and the <a href="https://circleci.com/">CircleCI</a> team for partnering again on this piece. You can learn more about CircleCI below.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://circleci.com/&quot;,&quot;text&quot;:&quot;Learn more about CircleCI&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://circleci.com/"><span>Learn more about CircleCI</span></a></p><p>Disclaimer: even though CircleCI is a partner for this piece, I will only provide my unbiased opinion on all practices and tools we cover, CircleCI included</p><div><hr></div><h2>&#129518; DORA metrics and LOCs are not enough</h2><p>From the report above, we know there is a small group of teams leading the pack, with outrageous numbers like 2-3x throughput, and a large group of others that, on average, are getting <em>nothing</em> out of AI. Literally nothing. Zero. Nil.</p><p>And not because they are not trying! AI penetration with engineers is ~90% &#8212; basically everyone is using AI everyday for coding, but the <em>median team</em> is not getting any faster.</p><p>How do we know this? Because as of today, in 2026, we have a good understanding of how to measure the effectiveness of the software delivery process. For example, we can look at the DORA metrics. Whether or not you use AI in the dev process, we can track how long it takes for work to go through the pipeline, how many commits are made per day, what&#8217;s the success rate of these commits, and how fast you recover from mistakes.</p><p>These numbers give us a good idea of the <em>health</em> and effectiveness of the delivery process, and allow us to even <em>venture</em> into saying: &#8220;<em>this team is doing better than this other team!&#8221;</em>.</p><p>Sometimes they also allow us to say: this team is not doing <em>any</em> better than before &#8212; which is what <a href="https://circleci.com/resources/2026-state-of-software-delivery/">CircleCI found on average</a> in 2025:</p><ul><li><p>-6.8% commits in production</p></li><li><p>-14% deployment success rate</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1PHF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1PHF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png 424w, https://substackcdn.com/image/fetch/$s_!1PHF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png 848w, https://substackcdn.com/image/fetch/$s_!1PHF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png 1272w, https://substackcdn.com/image/fetch/$s_!1PHF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1PHF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png" width="1332" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:608,&quot;width&quot;:1332,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105421,&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://refactoring.fm/i/192418439?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1PHF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png 424w, https://substackcdn.com/image/fetch/$s_!1PHF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png 848w, https://substackcdn.com/image/fetch/$s_!1PHF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.png 1272w, https://substackcdn.com/image/fetch/$s_!1PHF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F596f7853-4ea9-4fec-81c3-ce5f72a325f9_1332x608.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 role="img" 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><title></title><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">Depressing stats from the latest State of Software Delivery</figcaption></figure></div><p>DORA metrics are effective at measuring the impact of AI precisely because, counterintuitively, they ignore AI. They look at <strong>the output of the process</strong>, regardless of how the process is implemented.</p><p>This is both a blessing and a curse.</p><p>It&#8217;s a blessing because they stay close to where the value is, and it&#8217;s a curse because they are too high level to be <em>directly actionable</em>. Just like setting a goal of increasing business revenues by 10% doesn&#8217;t say much about what you need to do to get there, setting direct DORA metrics goals isn&#8217;t very useful, and can even backfire if you are not careful with it. E.g. it&#8217;s easy to increase the number of commits per day by splitting work into artificially small batches, and shipping just a few lines of code at a time just for the sake of pedaling faster.</p><p>So, DORA metrics are <strong>lagging indicators</strong>. They are good for assessing the <em>production level</em> of your factory, but they don&#8217;t tell you how to improve your stations. For that, we need <strong>leading indicators</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FXrO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FXrO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png 424w, https://substackcdn.com/image/fetch/$s_!FXrO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png 848w, https://substackcdn.com/image/fetch/$s_!FXrO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!FXrO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FXrO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png" width="1456" height="897" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:897,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:462366,&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://refactoring.fm/i/192418439?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FXrO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png 424w, https://substackcdn.com/image/fetch/$s_!FXrO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png 848w, https://substackcdn.com/image/fetch/$s_!FXrO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!FXrO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F939d8dd5-a30e-4c7f-96cd-560960e6c1fd_2110x1300.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 role="img" 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><title></title><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">Both leading and lagging indicators are useful &#8212; but at different things</figcaption></figure></div><p>The most convincing leading indicator for the SDLC is <strong>developer experience</strong>. There is plenty of research today that shows that <a href="https://refactoring.fm/p/the-listening-tour">improving developer experience</a> has outsized returns on the <em>lagging indicators</em> not only of the health of your engineering process, but of the business as a whole. This was already the core takeaway from <a href="https://refactoring.fm/p/accelerate">Accelerate</a>, exactly 10 years ago, and has only been confirmed ever since. About this, I particularly liked <a href="https://developerexperiencebook.com/">Frictionless</a> recently, by some of the same authors of Accelerate.</p><p>Developer experience, though, doesn&#8217;t say much about <strong>how we are using AI</strong>.</p><p>What are the <strong>leading indicators of AI success</strong>?</p>
      <p>
          <a href="https://refactoring.fm/p/growing-your-sofware-factory">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Leadership archetypes, perfect teams, and weekly readings 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #201]]></description><link>https://refactoring.fm/p/leadership-archetypes-perfect-teams</link><guid isPermaLink="false">https://refactoring.fm/p/leadership-archetypes-perfect-teams</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 30 Mar 2026 07:02:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JM_W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd641e3-e58c-4c97-af71-69d0c511124e_594x494.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! </em></p><p><em>I am repeating <a href="https://refactoring.fm/p/slave-software-polarities-and-weekly">last week&#8217;s experiment</a> of adding the best articles I have read last week, other than the classic weekly ideas. Let me know if you like it!</em></p><p><em>To access all our articles, library, community, and support my work, subscribe to the <a href="https://refactoring.fm/about">full version of Refactoring</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://refactoring.fm/subscribe?"><span>Subscribe now</span></a></p>
      <p>
          <a href="https://refactoring.fm/p/leadership-archetypes-perfect-teams">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Telephone Game of Software]]></title><description><![CDATA[How to navigate the journey from intent to code]]></description><link>https://refactoring.fm/p/the-telephone-game-of-software</link><guid isPermaLink="false">https://refactoring.fm/p/the-telephone-game-of-software</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 25 Mar 2026 08:42:59 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b8713384-a4c2-4057-b6c2-731abcc0d68b_2382x1580.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My favorite <em>byproduct</em> of the AI shift in engineering is that it is making us think harder at workflows and ideas we have taken for granted for a long time.</p><p>In some cases, we even <em>invented</em> words we didn&#8217;t use before, like <em>context</em>, or, one of my favorite lately, <em>intent</em>. These words are <em>abstractions</em>&#8212;our bread and butter as engineers&#8212;and are born out of the necessity to discuss ideas, understand what&#8217;s going on, and improve how we work.</p><p>The <em>intent</em> concept is both important and, AFAIK, quite novel. These days you may hear it in sentences like &#8220;<em>making sure PMs&#8217; intent is captured into specs</em>&#8221;, or &#8220;<em>AI code should reflect the engineers&#8217; intent</em>&#8221;.</p><p>This angle frames software engineering as a <strong>translation act</strong> between something you want to achieve and what gets actually captured in <em>artifacts</em> like specs, UI design, up until code. If we continue this analogy, translation happens at every step, with different steps following different rules. Many engineering practices exist essentially to <em>reduce</em> the error rate of such translation.</p><p>So, seen through this lens, software development becomes an elaborated version of <a href="https://en.wikipedia.org/wiki/Telephone_game">the telephone game</a>. You win the game if the message is passed properly and ends up in&#8230; production.</p><p>That said, what the <em>steps</em> of the telephone game are (or should be), or what the best winning strategy is, frankly, it&#8217;s all up for discussion today. Should we write big specs beforehand? Should we keep human code reviews? <em>Who</em> should do this and that, and when, and how often?</p><p>Today I want to explore this, taking from what I have personally learned from my <a href="https://refactoring.fm/p/my-ai-coding-workflow">recent coding efforts</a>, and ideas I bounced off with <a href="https://www.linkedin.com/in/wattenberger">Amelia Wattenberger</a>, who <a href="https://refactoring.fm/p/what-comes-after-the-ide-with-amelia">I interviewed last week</a> on the podcast, and is joining me today on this piece.</p><p>So here is the agenda for today:</p><ul><li><p>&#128256; <strong>From intent to code</strong> &#8212; the journey of translating what you really want to do</p></li><li><p><strong>&#129521; Creating good platform</strong> &#8212; for each step of the journey, so AI doesn&#8217;t mess things up.</p></li><li><p><strong>&#128747; Staying at the right altitude</strong> &#8212; evolve your artifacts to match what you want to inspect</p></li><li><p><strong>&#128300; Using product to improve understanding</strong> &#8212; not just to <em>implement</em> it.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XE7W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XE7W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png 424w, https://substackcdn.com/image/fetch/$s_!XE7W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png 848w, https://substackcdn.com/image/fetch/$s_!XE7W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png 1272w, https://substackcdn.com/image/fetch/$s_!XE7W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XE7W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png" width="1456" height="482" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:482,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:969213,&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://refactoring.fm/i/191761060?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XE7W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png 424w, https://substackcdn.com/image/fetch/$s_!XE7W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png 848w, https://substackcdn.com/image/fetch/$s_!XE7W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.png 1272w, https://substackcdn.com/image/fetch/$s_!XE7W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6709e936-78a6-4eb6-9123-b2c127a1d998_2512x832.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 role="img" 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><title></title><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><p><em>Disclaimer: Amelia works at <a href="https://www.augmentcode.com/">Augment Code</a> and created <a href="https://www.augmentcode.com/product/intent">Intent</a>, a developer workspace with strong opinions about all of this. Augment is a long-time partner of Refactoring, I use it, I am a fan, and I am happy if you check it out.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.augmentcode.com/product/intent&quot;,&quot;text&quot;:&quot;Learn more about Intent&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.augmentcode.com/product/intent"><span>Learn more about Intent</span></a></p><p><em>However, we are not here to promote Augment today, but rather compare notes about problems and try to predict where the puck is going. (The puck, Luca? In a telephone game? Yes)</em></p><div><hr></div><h2>&#128256; From Intent to Code</h2><p>Starting from something you want to achieve on the product you are building, then it&#8217;s a <em>long way</em> to encode that into, well, code.</p><p>Intermediate steps may vary based on your process, but you probably have some version of these:</p><h3>1) Product intent</h3><p>A high-level, one or two-sentence version of what you want to build. It may only live in your head.</p><p>Making an example from my own experiments (I am building <a href="http://tolaria.md/">an editor</a>), let&#8217;s say I want to add <em>split panes</em>, like many editors have. In my head, that&#8217;s it. I don&#8217;t think about it a lot more.</p><h3>2) Product specs</h3><p>Product intent needs to be turned into a <em>spec</em>, like a PRD, which needs to stay <em>faithful</em> to my original intent, while deciding a lot more things.</p><p>How is this triggered? Is there a button? What does it look like? What about keyboard shortcuts? What happens if I drag a tab from one pane to the other? And more.</p><p>Some of these are just <em>additional detail</em>, but some might derail the feature in a direction I didn&#8217;t intend. For example, a legitimate interpretation might be to open up the tab in a new window, which is not what I want.</p><h3>3) UI/UX design</h3><p>Product specs are turned into design specs. What it looks like, how it behaves, where it lives.</p><h3>4) System design</h3><p>Product and design specs <em>inform</em> the strategy to implement this with code. Abstractions that should be reused or created, data structures (when relevant), migrations, instrumentation, testing, rollout and rollback, and more.</p><h3>5) Code!</h3><p>Finally, there&#8217;s code! All of this turns into a bunch of LOCs, to be pushed, reviewed, and released in prod.</p><p>Phew. That&#8217;s a lot of work.</p><p>Of course YMMV and you may skip creating actual <em>artifacts</em> for some of these steps, based on the complexity of the work at hand, and your team's workflows. But there are at least <strong>decisions to be made</strong> about all of these, even without the artifacts:</p><ul><li><p>Every step adds details that the previous kept implicit or simply did not consider.</p></li><li><p>Every step can act as a <em>lossy translation</em> of the original intent. It can miss important details or interpret them incorrectly.</p></li></ul><p>What is our goal with respect to this process? The ultimate goal is always to <strong>ship value to customers as fast as possible</strong>, so you can get feedback and iterate.</p><p>To ship fast you want to avoid <em>rework</em>: you want to reduce the misunderstandings between the various steps and the mistakes that would make work move backwards instead of forwards. You want code abstractions that match the PRD, a PRD that matches the product intent, and not getting to the point where a review fails and some of this gets back to the drawing board.</p><p>This angle is relevant with humans, and <em>especially</em> relevant with AI. AI models today are <em>really</em> good, and it feels most of their mistakes now come from <em>not understanding</em> what you wanted, rather than e.g. bad coding skills.</p><p>So how do you get good at this? The most convincing way, to me, is:</p><ul><li><p><strong>Creating good platform for each step</strong> &#8212; which acts as guardrails and helps you minimize the amount of <em>intent</em> you need to encode into specs.</p></li><li><p><strong>Use specs as active collaboration surface</strong> &#8212; updating it with more details as the work progresses, so it stays at the right altitude all the time. Kudos to Amelia for making me think about this.</p></li></ul><p>Let&#8217;s explore both &#128071;</p><div><hr></div><h2>&#129521; Create good platform for each step</h2>
      <p>
          <a href="https://refactoring.fm/p/the-telephone-game-of-software">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Slave software, polarities, and weekly readings 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #200!]]></description><link>https://refactoring.fm/p/slave-software-polarities-and-weekly</link><guid isPermaLink="false">https://refactoring.fm/p/slave-software-polarities-and-weekly</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 23 Mar 2026 08:01:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CR5A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there, Luca here! This is our <strong>200th edition</strong> of the Monday Ideas! &#127881;&#127882;</p><p>To celebrate this milestone I want to experiment with some tweaks. Instead of our classic three ideas, today I am going to post:</p><ol><li><p>&#129525; One idea from a recent <strong>article</strong> I wrote.</p></li><li><p>&#127897;&#65039; One idea from a recent <strong>podcast interview</strong> we did.</p></li><li><p>&#128218; A small digest of the <strong>best articles</strong> I have read this week&#8230;</p></li></ol>
      <p>
          <a href="https://refactoring.fm/p/slave-software-polarities-and-weekly">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What Comes After the IDE 🖥️ — with Amelia Wattenberger]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 59]]></description><link>https://refactoring.fm/p/what-comes-after-the-ide-with-amelia</link><guid isPermaLink="false">https://refactoring.fm/p/what-comes-after-the-ide-with-amelia</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 20 Mar 2026 08:36:45 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/191384400/938f192d207d3c4fd57e953b4fe8a1df.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-79sDQ7JXVvQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;79sDQ7JXVvQ&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/79sDQ7JXVvQ?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 class="pullquote"><p style="text-align: center;"><em><strong>Listen now:<br><a href="https://www.youtube.com/@refactoringclub">YouTube</a> | <a href="https://podcasts.apple.com/us/podcast/refactoring-podcast/id1719137305">Apple</a> | <a href="https://open.spotify.com/show/7Luds9dmzZDoDC8Q7EMbSw">Spotify</a></strong></em></p></div><p>Today&#8217;s guest is <strong>Amelia Wattenberger</strong>, former principal research engineer at GitHub and now Partner at Sutter Hill Ventures.</p><p>But she&#8217;s also a Product Lead at Augment Code, where she developed <a href="https://www.augmentcode.com/product/intent">Intent</a>, a developer workspace for orchestrating AI coding agents and delivering complex work. So this is a fascinating chat into the future and the present of software development with someone who has clearly been at the very frontier of this for many years.</p><div><hr></div><blockquote><p><em><strong>If you like the podcast, please give us a rating on your platform of choice! It means a lot to us &#8212; that&#8217;s how other people discover the show! &#11088;&#11088;&#11088;&#11088;&#11088;</strong></em></p></blockquote><div><hr></div><h2>&#129351; Interview Summary</h2><p>If you are a <strong>&#128274; paid subscriber &#128274;</strong> you will find my own <em>summary</em> of the interview below.</p><p>It&#8217;s the <strong>5-minute takeaways</strong> of what we talked about, with timestamps to the relevant video moments, for those who don&#8217;t have time to sit through the 1-hour chat.</p><p>Here is the agenda for today:</p><ol><li><p><strong>&#129513; What is Intent and why rethink the IDE</strong></p></li><li><p><strong>&#129302; Orchestrating agents and smart defaults</strong></p></li><li><p><strong>&#128203; The living spec as a control plane</strong></p></li><li><p><strong>&#128640; How AI multiplies (or doesn&#8217;t) different engineers</strong></p></li><li><p><strong>&#128302; The changing shape of roles and specialization</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div><h2>1) &#129513; What is Intent and why rethink the IDE</h2><p>The IDE has been around for nearly half a century, and every single pixel in it is devoted to reading and understanding code. But as AI agents get better at the nitty-gritty of code comprehension, Amelia argues our role as developers is shifting toward <strong>higher levels of abstraction</strong> &#8212; and our tools haven&#8217;t caught up.</p><p>Intent is Augment Code&#8217;s take on what comes <em>after</em> the IDE. Its core primitive is the <strong>workspace</strong>: for any piece of work, you spin up an isolated environment that bundles a copy of your codebase (with its own branch and Git worktree), a set of agents, rich markdown notes, terminals, and a spec. You can run multiple workspaces at once, switching between tasks without the mental overhead of juggling Git branches or remembering scattered chat conversations.</p><blockquote><p><em><strong>&#8220;Every single pixel in the IDE is devoted to reading and understanding code. And it feels like as agents get better at the nitty-gritty, our role as developers has changed, where we&#8217;re working more at higher levels of abstraction, where we have more leverage.&#8221;</strong></em></p></blockquote><p>Amelia describes how we&#8217;ve essentially &#8220;hacked&#8221; AI into existing primitives &#8212; chat in the IDE, chat on the command line, chat on GitHub &#8212; without rethinking what the interface should look like when developers spend more time on <strong>intent and planning</strong> rather than writing individual lines of code. Intent is an exploration of that question.</p><h2>2) &#129302; Orchestrating agents and smart defaults</h2><p>One of Intent&#8217;s most opinionated design choices is how it handles agent orchestration. By default, the app ships with <strong>specialist personas</strong> &#8212; a coordinator that delegates to implementers and verifiers &#8212; but everything is tweakable through natural language settings.</p><p>Amelia explains why splitting agents into focused roles works better:</p>
      <p>
          <a href="https://refactoring.fm/p/what-comes-after-the-ide-with-amelia">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Layoffs, normal engineers, and second brains 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #199]]></description><link>https://refactoring.fm/p/layoffs-normal-engineers-and-second</link><guid isPermaLink="false">https://refactoring.fm/p/layoffs-normal-engineers-and-second</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 16 Mar 2026 08:01:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FnQV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb55f09a4-d716-44e7-8d2d-fb9329f87f49_2676x1092.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>.</em></p>
      <p>
          <a href="https://refactoring.fm/p/layoffs-normal-engineers-and-second">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>