<?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[Join 170,000+ engineers and managers getting practical ideas on engineering leadership, technical strategy and high-performing teams. Free, every week.]]></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>Fri, 06 Nov 2026 21:24:26 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[Find a broader version of yourself]]></title><description><![CDATA[Navigating identity, purpose, and work, in the AI era]]></description><link>https://refactoring.fm/p/find-a-broader-version-of-yourself</link><guid isPermaLink="false">https://refactoring.fm/p/find-a-broader-version-of-yourself</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 04 Nov 2026 08:02:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4d5ee1fc-c6b1-4be3-ba32-62beec16fd9c_1648x1092.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here! Welcome to a new </em>&#128274;<em> <strong>weekly essay</strong></em> &#128274;<em> from Refactoring.</em></p><p><em>Every week I <a href="https://refactoring.fm/s/essays?sort=top">write an article</a> to 170K+ engineers about how to make good software together. To get access to all our articles, resources, and our <a href="https://refactoring.fm/p/refactoring-community">private community</a>, subscribe to the <a href="http://refactoring.fm/subscribe?">full version</a>.</em></p><div><hr></div><p>I remember when an engineer friend of mine told me:</p><blockquote><p><em>The pace of change is just unsustainable. Every week we are supposed to change the way we work.</em></p></blockquote><p>But this was circa 2018, and he was talking about JS frameworks. Feel old yet? These were, apparently, the good old times!</p><p>Jokes aside, AI feels different from a new JS framework, and many engineers I talk to are struggling with it in a deeper way.</p><p>When our work is challenged, our identity is challenged, too. This is especially true for knowledge workers, and for engineers in particular: we find the output of our work to be an act of <em>creation</em>, and so we take pride in it. It&#8217;s easier for us to identify with what we do than it is for people who do less creative jobs, which means that changing how we work has very direct psychological consequences.</p><p>I know this because of my own weird journey. I studied CS, started a PhD, dropped out to start a startup, sold it, became director of a larger company, and today I run Refactoring and Tolaria: respectively a newsletter and an open-source app.</p><p>This means at different points in time I have been a researcher, a founder, a manager, a content creator, and an open-source maintainer. Many of which at the same time!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xzla!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xzla!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png 424w, https://substackcdn.com/image/fetch/$s_!xzla!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png 848w, https://substackcdn.com/image/fetch/$s_!xzla!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!xzla!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!xzla!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png" width="728" height="277.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:555,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:252482,&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/223171907?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xzla!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png 424w, https://substackcdn.com/image/fetch/$s_!xzla!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png 848w, https://substackcdn.com/image/fetch/$s_!xzla!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!xzla!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b06ba26-82c6-4675-b4ef-a5c1f0965f5a_2812x1072.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A weird journey for sure, but I saw many things!</figcaption></figure></div><p>I don&#8217;t think I am exactly <em>world-class</em> at any of these, but I feel fortunate to having done many <em>different</em> things, and having looked at tech from different angles. But this also means along the way I had my own sense of identity challenged many times, and had to adjust. Every single time.</p><p>Sometimes change felt easier, other times harder, but it eventually became a <em>familiar</em> feeling. That&#8217;s probably today why I am not bothered too much by AI, but I understand why many people are.</p><p>So, today I want to talk about how you can think about all of this in order to become more resilient, both psychologically, and &#8211; practically speaking! &#8211; on the job market. I won&#8217;t make big predictions, because I don&#8217;t feel I am particularly good at those, and also because no one really knows what is going to happen anyway. Instead, I&#8217;ll share a few principles and mental models that work for me and I believe will stay true for a long time.</p><p>This is pretty much what Ray Dalio does in <em><a href="https://www.principles.com/">Principles</a></em>: if you do ambitious things, you will go through struggles and fail at some of them, but if you pay attention, you can turn what you learn into principles that work for you. Dalio also says that there are no principles that work for everyone: you should find your own! What follows are some of <em>my</em> principles, not necessarily yours.</p><p>This is also a written version of the talk I am giving today at <a href="https://codetalks.com/">code.talks</a> in Hamburg, and you can find <a href="https://decks.lucaron.in/code-talks-2026-a2f2c2/">the slides here</a>.</p><p>Here is the agenda for today:</p><ul><li><p>&#129379; <strong>Be a mediocre soup</strong> &#8212; also how to walk on ice, and put dots on maps.</p></li><li><p>&#128084; <strong>Work as a manager</strong> &#8212; own the outcome, not necessarily the building.</p></li><li><p>&#128256; <strong>Product or platform</strong> &#8212; the two directions you can broaden your role in.</p></li><li><p>&#128652; <strong>How to make it happen</strong> &#8212; drive the change, and be slightly too ambitious.</p></li><li><p>&#128218; <strong>Resources</strong> &#8212; articles to dive deeper on each of these.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><h2>&#129379; Be a mediocre soup</h2><p>One of my favorite ideas about personal identity comes from Scott Adams, the creator of Dilbert, who said about himself:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jsVD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jsVD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png 424w, https://substackcdn.com/image/fetch/$s_!jsVD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png 848w, https://substackcdn.com/image/fetch/$s_!jsVD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png 1272w, https://substackcdn.com/image/fetch/$s_!jsVD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!jsVD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png" width="1456" height="550" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:188912,&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/223171907?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.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_!jsVD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png 424w, https://substackcdn.com/image/fetch/$s_!jsVD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png 848w, https://substackcdn.com/image/fetch/$s_!jsVD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png 1272w, https://substackcdn.com/image/fetch/$s_!jsVD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2289d53b-eaaf-47dd-a5d7-b88ca74039b4_2350x888.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s not his skills that are unique, but rather their <em>combination</em>. That gives him a good answer to the question: <em>why me? Why should I be the one doing Dilbert?</em></p><p>I believe it&#8217;s important, at work, to be in a position where you provide a unique, or rare, way of contributing. I also believe that, especially today, it is easier to do that by <em>combining</em> different things you know, as opposed to becoming <em>99-percentile</em> at one specific thing.</p><p>So, quoting Scott, the first principle could be: be one <em>big mediocre soup</em>. But I&#8217;d rather turn it into something more actionable, which is: <strong>find a broader version of yourself</strong>.</p>
      <p>
          <a href="https://refactoring.fm/p/find-a-broader-version-of-yourself">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Process migrations, shared skills, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition 232]]></description><link>https://refactoring.fm/p/process-migrations-shared-skills</link><guid isPermaLink="false">https://refactoring.fm/p/process-migrations-shared-skills</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 02 Nov 2026 09:10:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UV6D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right foot.</em></p><p><em>I also publish an original essay every Wednesday. Here is the one from last week in case you missed it:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;13fb273d-4dcd-4dc0-9814-11468ca07ac7&quot;,&quot;caption&quot;:&quot;Hey, Luca here! Welcome to a new &#128274; weekly essay &#128274; from Refactoring.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How AI is Changing Engineering Management&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-10-28T09:34:43.289Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aec6a37b-d968-4f92-b869-12790307e023_2386x1586.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/how-ai-is-changing-engineering-management&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:222333994,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:41,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128202; <a href="https://getdx.com/report/state-of-ai-impact-in-engineering-q3-report/?utm_source=refactoring-newsletter&amp;utm_medium=sponsorship&amp;utm_campaign=state-of-ai-impact-q3">AI sped up coding, but not reviews</a></h2><p><em>This week&#8217;s newsletter is brought to you by our friends at <a href="https://getdx.com/report/state-of-ai-impact-in-engineering-q3-report/?utm_source=refactoring-newsletter&amp;utm_medium=sponsorship&amp;utm_campaign=state-of-ai-impact-q3">DX</a>!</em></p><p>AI tools sped up code authoring. Review and release systems haven&#8217;t kept pace.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://getdx.com/report/state-of-ai-impact-in-engineering-q3-report/?utm_source=refactoring-newsletter&amp;utm_medium=sponsorship&amp;utm_campaign=state-of-ai-impact-q3" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sbw5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png 424w, https://substackcdn.com/image/fetch/$s_!sbw5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png 848w, https://substackcdn.com/image/fetch/$s_!sbw5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png 1272w, https://substackcdn.com/image/fetch/$s_!sbw5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sbw5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png" width="388" height="202.71484375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:535,&quot;width&quot;:1024,&quot;resizeWidth&quot;:388,&quot;bytes&quot;:361971,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://getdx.com/report/state-of-ai-impact-in-engineering-q3-report/?utm_source=refactoring-newsletter&amp;utm_medium=sponsorship&amp;utm_campaign=state-of-ai-impact-q3&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/222603556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.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_!sbw5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png 424w, https://substackcdn.com/image/fetch/$s_!sbw5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png 848w, https://substackcdn.com/image/fetch/$s_!sbw5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png 1272w, https://substackcdn.com/image/fetch/$s_!sbw5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a4b1e1-dde2-4aad-9232-ef67702baa84_1024x535.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>DX&#8217;s newest <strong>AI Impact Report</strong>, based on data from 500+ engineering organizations, shows developers opening far more pull requests each week, each more than twice the size it used to be. As a result, <strong>PRs wait more than twice as long for a first review</strong>.</p><p>Download the full report to see where delivery friction is moving and where leaders should focus next to get the most out of their AI tools &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://getdx.com/report/state-of-ai-impact-in-engineering-q3-report/?utm_source=refactoring-newsletter&amp;utm_medium=sponsorship&amp;utm_campaign=state-of-ai-impact-q3&quot;,&quot;text&quot;:&quot;Download the full report&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://getdx.com/report/state-of-ai-impact-in-engineering-q3-report/?utm_source=refactoring-newsletter&amp;utm_medium=sponsorship&amp;utm_campaign=state-of-ai-impact-q3"><span>Download the full report</span></a></p><div><hr></div><h2>&#128666; Treat process changes like migrations</h2><p>At LDX3 in New York, <a href="https://lethain.com/">Will Larson</a> opened with a keynote about the delivery journey of his team at Imprint: from manual gates everywhere, to CI/CD, to agentic workflows.</p><p>What I liked most was that he framed each of these steps as a <strong>migration</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_!UV6D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UV6D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png 424w, https://substackcdn.com/image/fetch/$s_!UV6D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png 848w, https://substackcdn.com/image/fetch/$s_!UV6D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png 1272w, https://substackcdn.com/image/fetch/$s_!UV6D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UV6D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png" width="728" height="377" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:754,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:233808,&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/222603556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UV6D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png 424w, https://substackcdn.com/image/fetch/$s_!UV6D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png 848w, https://substackcdn.com/image/fetch/$s_!UV6D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png 1272w, https://substackcdn.com/image/fetch/$s_!UV6D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03baa05e-5b85-4b65-b877-235cc4b162a6_1994x1032.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We know a lot about migrating code, and I believe most of the same logic applies to processes and workflows. Here is how Will approached it:</p><ol><li><p><strong>Understand people&#8217;s problems</strong> &#8212; there is a reason why people do things the current way, even when it looks flawed, and to build something better you need to understand those problems deeply.</p></li><li><p><strong>Get buy-in</strong> &#8212; even with clear top-down direction, the implementation should be collaborative. When Will wanted to move from Jira to Linear, he started by involving the biggest Jira fans, because if he could address their concerns, the rest of the team would be easier to migrate.</p></li><li><p><strong>Draw hard lines</strong> &#8212; inclusion matters, but once a direction is taken, resources need to support it. Will made Claude Code the recommended coding agent: people can still use something else, but they won&#8217;t get support from the platform team.</p></li><li><p><strong>Sweat the details</strong> &#8212; every migration has a long tail of things to fix and edges to smooth, so keep working on it even when it seems that most of the work is done.</p></li></ol><p>I wrote a recap of my favorite talks from LDX3 and ProductLab, including Will&#8217;s &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;22fc5919-2218-45e7-8803-15c7c9683bd8&quot;,&quot;caption&quot;:&quot;Hey, Luca here! Welcome to a &#128274; weekly essay &#128274; from Refactoring.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Best Ideas from LDX3 and ProductLab &#127942;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-09-23T07:02:44.672Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!vjuo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/the-best-ideas-from-ldx3-and-productlab&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:216741812,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:38,&quot;comment_count&quot;:2,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#129520; Treat skills like code</h2><p>In August I talked with <strong>Charlie Guo</strong>, developer experience engineer at OpenAI, about how teams are building with agents today.</p><p>We spent a lot of time talking about the move from single-player to multi-player: how do you take the productivity gains of a few AI power users and spread them across the team?</p><p>Charlie&#8217;s answer starts from skills. He organizes them in three tiers:</p><ul><li><p><strong>&#129489;&#8205;&#128187; Personal skills</strong> &#8212; live in your local folder, and are useful only to you.</p></li><li><p><strong>&#128194; Project skills</strong> &#8212; baked into the repo, and shared with everyone working on that project.</p></li><li><p><strong>&#127970; Organization skills</strong> &#8212; hosted in internal repositories blessed by IT and security, that anyone in the company can browse and clone.</p></li></ul><p>Skills follow the same lifecycle as regular code: they are version-controlled, discoverable, they have owners, and an update process.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!db5N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!db5N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png 424w, https://substackcdn.com/image/fetch/$s_!db5N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png 848w, https://substackcdn.com/image/fetch/$s_!db5N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!db5N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!db5N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png" width="1456" height="650" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:650,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:251121,&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/222603556?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.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_!db5N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png 424w, https://substackcdn.com/image/fetch/$s_!db5N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png 848w, https://substackcdn.com/image/fetch/$s_!db5N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!db5N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e958e23-75d7-44cf-87bd-e195468a81a7_2554x1140.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But tooling is not enough. Charlie knows people who don&#8217;t share their AI tricks because they don&#8217;t want their boss to think they are cutting corners, or because they are stack-ranked on AI proficiency and want to keep their edge. So if you lead a team, you should start from the culture side, and make sure that sharing a good workflow gets rewarded and celebrated.</p><p>You can find the full conversation with Charlie here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;bb6833fd-beda-4e20-96d5-b194471c6d1e&quot;,&quot;caption&quot;:&quot;Listen now:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building With Agents Today &#129302; &#8212; with Charlie Guo&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-08-07T07:00:53.190Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/JHAm58YZPIE&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/building-with-agents-today-with-charlie&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;92387196-e8f4-46de-a335-b56e984dc3e1&quot;,&quot;id&quot;:209980935,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:32,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128218; Weekly Readings</h2><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://www.anthropic.com/engineering/redesigning-source-control">Redesigning Source Control at Anthropic</a></h4><h5>14 min &#8226; by Anthropic</h5><p>Anthropic went from about 2,500 merged changes per day in May to over 30,000 in September, and git couldn&#8217;t keep up. So they built Scion, a custom source control system designed around always-online agents, and moved the whole monorepo off git in five months.</p><p>They argue that other companies will hit the same problems soon, and I believe it.</p><div><hr></div><h4>&#129352; <a href="https://felixrieseberg.com/hunger-beats-tenure-advice-for-junior-engineers/">Hunger Beats Tenure: Advice for Junior Engineers</a></h4><h5>5 min &#8226; by Felix Rieseberg</h5><p>Felix is a hiring manager at Anthropic, and this month he stopped doing coding interviews, because Claude is better than candidates at them anyway.</p><p>He also argues that AI is good news for junior engineers: you can pick a business goal, build one bold idea over a weekend, and skip a lot of the usual red taping.</p><div><hr></div><h4>&#129353; <a href="https://yegge.ai/essays/the-counting-house/">The Counting House</a></h4><h5>32 min &#8226; by Steve Yegge</h5><p>Steve explores a pattern to address huge volumes of repetitive work: cheap models on very tight rails, one case type at a time, scored against the humans doing the same job. It&#8217;s the exact opposite of his own wide-open software factory. Long read, but worth 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="https://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;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://refactoring.fm/subscribe?"><span>Make your team ship faster!</span></a></p><p>I wish you a great week.</p><p>Sincerely &#128075;<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Building Your Software Factory 🏭 — with Benedikt Stemmildt]]></title><description><![CDATA[Watch now (52 mins) | Refactoring Podcast &#8226; Episode 75]]></description><link>https://refactoring.fm/p/building-your-software-factory-with</link><guid isPermaLink="false">https://refactoring.fm/p/building-your-software-factory-with</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 30 Oct 2026 08:02:08 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/222657463/9f34679385e2b1f45f52f4c8e62b541f.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-uKH2WCxjOI8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;uKH2WCxjOI8&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/uKH2WCxjOI8?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><blockquote><p><em>Today&#8217;s episode is brought to you by: <strong><a href="https://www.trmlabs.com/careers">TRM Labs</a></strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.trmlabs.com/careers" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!71Wt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png 424w, https://substackcdn.com/image/fetch/$s_!71Wt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png 848w, https://substackcdn.com/image/fetch/$s_!71Wt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png 1272w, https://substackcdn.com/image/fetch/$s_!71Wt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!71Wt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png" width="264" height="123.11538461538461" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:679,&quot;width&quot;:1456,&quot;resizeWidth&quot;:264,&quot;bytes&quot;:23636,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.trmlabs.com/careers&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/222657463?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.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_!71Wt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png 424w, https://substackcdn.com/image/fetch/$s_!71Wt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png 848w, https://substackcdn.com/image/fetch/$s_!71Wt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png 1272w, https://substackcdn.com/image/fetch/$s_!71Wt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7edc3353-fe7f-4f4f-8eec-3e2f25ff3655_1663x776.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><em>Criminals are scaling with AI. Build the technology that helps crimefighters fight back. TRM is hiring, go to <strong><a href="https://www.trmlabs.com/careers">https://www.trmlabs.com/careers</a></strong></em></p></blockquote><div><hr></div><p>Today&#8217;s guest is <strong><a href="https://benedikt.stemmildt.com/">Benedikt Stemmildt</a></strong>, founder of <a href="https://www.hackersandwizards.dev/">hackers&amp;wizards</a> and co-chair of the <a href="https://codetalks.com/">CodeTalks</a> conference. With more than 15 years in software, Benedikt now spends most of his time helping companies and product teams adopt <strong>agentic engineering</strong>, from training to full transformation.</p><p>We talked about why product and engineering roles are merging, why engineers resist AI the most, where the time you save with agents should actually go, and why Benedikt is not a fan of spec-driven development.</p><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 5-minute, handcrafted takeaways 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>&#129309; Product and engineering converge</strong></p></li><li><p><strong>&#129521; Why engineers resist the most</strong></p></li><li><p><strong>&#129529; Where your AI time should go</strong></p></li><li><p><strong>&#127981; Factories, not spec-driven waterfall</strong></p></li><li><p><strong>&#128269; Reviews, agents, and the road ahead</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/building-your-software-factory-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How AI is Changing Engineering Management]]></title><description><![CDATA[What we know about how EM&#8217;s work is changing, backed by a ton of research and stories]]></description><link>https://refactoring.fm/p/how-ai-is-changing-engineering-management</link><guid isPermaLink="false">https://refactoring.fm/p/how-ai-is-changing-engineering-management</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 28 Oct 2026 09:34:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/aec6a37b-d968-4f92-b869-12790307e023_2386x1586.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here! Welcome to a new </em>&#128274;<em> <strong>weekly essay</strong></em> &#128274;<em> from Refactoring.</em></p><p><em>Every week I <a href="https://refactoring.fm/s/essays?sort=top">write an article</a> to 170K+ engineers about how to make good software together. To get access to all our articles, resources, and our <a href="https://refactoring.fm/p/refactoring-community">private community</a>, subscribe to the <a href="http://refactoring.fm/subscribe?">full version</a>.</em></p><div><hr></div><p>We recently introduced <strong>monthly themes</strong> in the <a href="https://refactoring.fm/p/refactoring-community">Refactoring Community</a>, as a way to work all together on one topic at a time, and to get deeper and more interesting insights.</p><p>In October we discussed <strong>Management in the Age of AI</strong>: we had a big community thread, an AI Club edition, a Mastermind, and last week we asked everyone a simple question: </p><blockquote><p><em>In two years, will your company need more managers or fewer?</em></p></blockquote><p>Outside the community, the answer many CEOs are giving is <em>fewer</em>:</p><ul><li><p>Jack Dorsey wrote that &#8220;<a href="https://block.xyz/inside/from-hierarchy-to-intelligence">there is no need for a permanent middle management layer</a>&#8220; at Block.</p></li><li><p>Brian Armstrong announced &#8220;<a href="https://www.coinbase.com/blog/building-a-leaner-and-faster-coinbase">no pure managers</a>&#8220; at Coinbase &#8211; every leader must also be an active individual contributor.</p></li></ul><p>Also, it seems that most conversations about AI are about software factories, bottlenecks, code reviews, and all the IC stuff. Very few are about what happens to the people who manage those ICs.</p><p>So, today we look at what AI is really changing in the manager job, using a month of community conversations plus a ton of research and recent stories. Here is the agenda:</p><ul><li><p>&#127919; <strong>What a manager is for</strong> &#8212; four areas that haven&#8217;t moved.</p></li><li><p>&#129529; <strong>What AI takes off your plate</strong> &#8212; glue work, status, and some building.</p></li><li><p>&#9876;&#65039; <strong>The AI giveth and the AI taketh</strong> &#8212; more review, slop, and the AI transition itself.</p></li><li><p>&#129517; <strong>How to set the quality bar</strong> &#8212; slop as feedback, measuring what matters, reviewing the harness.</p></li><li><p>&#128736;&#65039; <strong>What to do with the space that&#8217;s left</strong> &#8212; a small model for using the time AI frees up.</p></li><li><p>&#128218; <strong>Resources </strong>&#8212; 10+ articles and stories to help you dive deeper.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><h2>&#127919; What a manager is for</h2><p>To see what AI changes, we have to start from what the job is for, and that part to me hasn&#8217;t moved a lot. Andy Grove wrote in <em>High Output Management</em> that:</p><div class="pullquote"><p>A manager&#8217;s output = the output of his organization + the output of the neighboring organizations under his influence</p></div><p>I believe that&#8217;s still pretty much it.</p><p>On top of this, everything a manager does to raise that output falls more or less into four areas: <strong>Product</strong>, <strong>Tech</strong>, <strong>Process</strong>, and <strong>Team</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_!VCZq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VCZq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png 424w, https://substackcdn.com/image/fetch/$s_!VCZq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png 848w, https://substackcdn.com/image/fetch/$s_!VCZq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png 1272w, https://substackcdn.com/image/fetch/$s_!VCZq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!VCZq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png" width="1456" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:96224,&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/222333994?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.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_!VCZq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png 424w, https://substackcdn.com/image/fetch/$s_!VCZq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png 848w, https://substackcdn.com/image/fetch/$s_!VCZq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png 1272w, https://substackcdn.com/image/fetch/$s_!VCZq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F276012e2-a4d2-495c-aa1b-66274a7e4f76_2036x728.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These are the same four pillars I used back in 2024 to describe <a href="https://refactoring.fm/p/how-engineering-management-is-changing">what an EM does</a>, taking a page from Pat Kua&#8217;s EM archetypes, and I believe they still hold. Each of them answers a different question about the team&#8217;s output: <em>what</em> we build, <em>how</em> we build it, <em>how the work flows</em>, and <em>who</em> does it:</p><h3>1) Product &#129517;</h3><p>Shape what the team builds and why, together with PMs and stakeholders, and keep the technical direction aligned with what the business needs.</p><h3>2) Tech &#128296;</h3><p>Make sure the thing is built well: design, quality, reliability, and the technical risk that comes with them. This is where technical skills still matter for managers, because it is hard to judge what good looks like if you have never built the thing yourself.</p><h3>3) Process &#128666;</h3><p>Make sure the work gets done in a reasonable time, without too much friction: planning, scoping, coordination, moving information around, and removing obstacles.</p><h3>4) Team &#129716;</h3><p>Enable trust, alignment, and growth across people and teams, from hiring to careers. This is the <em>human</em> core of the job, and probably the part that has changed the least.</p><p>No manager covers all four equally, of course: how you split your time depends on the company, its stage, and especially on where your team is strong already. Nevertheless, AI touches all four of these, both in good and bad ways. </p><p>Let&#8217;s start with what it takes away.</p><div><hr></div><h2>&#129529; What AI takes off your plate</h2><p>The first obvious area where AI is helping managers is <strong>glue work</strong>, like moving information between tools, writing up meeting notes, and in general, <em>processing</em> information coming from disparate sources.</p><p>Anyone who has worked as a manager for a long time knows this is 1) incredibly time-consuming, and yet 2) absolutely foundational to the success of your job.</p><p>Fetching status is an easy example:</p>
      <p>
          <a href="https://refactoring.fm/p/how-ai-is-changing-engineering-management">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Bicycle gears, governance fences, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition 231]]></description><link>https://refactoring.fm/p/bicycle-gears-governance-fences-and</link><guid isPermaLink="false">https://refactoring.fm/p/bicycle-gears-governance-fences-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 26 Oct 2026 10:06:44 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><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right foot.</em></p><p><em>I also publish an original essay every Wednesday. Here is the one from last week in case you missed it:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;1f2bc4d1-d3b7-494f-b368-ecd7e74dd7a5&quot;,&quot;caption&quot;:&quot;Hey there! Welcome to a new edition of my monthly updates on how I build Tolaria.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Introducing Tolaria for mobile! &#128241;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-10-21T13:13:23.211Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!IJ65!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/introducing-tolaria-mobile&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:221142028,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:27,&quot;comment_count&quot;:3,&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;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128737;&#65039; <a href="https://srv.buysellads.com/ads/long/x/THO6ZWIPTTTTTT3DZZ2NWTTTTTTQ26OO2VTTTTTTP4V26BETTTTTTAIZZ34HKADBQ7M6AYIL5QNULNPD23K64MBYP34T?cid=400237">Centralize VPC traffic inspection on AWS</a></h2><p><em>This week&#8217;s newsletter is brought to you by our friends at <a href="https://srv.buysellads.com/ads/long/x/THO6ZWIPTTTTTT3DZZ2NWTTTTTTQ26OO2VTTTTTTP4V26BETTTTTTAIZZ34HKADBQ7M6AYIL5QNULNPD23K64MBYP34T?cid=400237">Palo Alto Networks</a>!</em></p><p>Most VPC security stops at the perimeter, so traffic moving laterally between VPCs can be left uninspected.</p><p>With this solution template, you get a pre-configured <strong>Palo Alto Networks VM-Series</strong> environment with an AWS Gateway Load Balancer across four VPCs, so you can try:</p><ul><li><p><strong>Three traffic flows, one inspection point</strong> &#8212; route outbound, east-west, and inbound traffic through VM-Series via Transit Gateway.</p></li><li><p><strong>Live threat simulation</strong> &#8212; a real-world exploit hits your demo app, and you switch from alert to active blocking.</p></li><li><p><strong>App-ID in action</strong> &#8212; identify SSH on a non-standard port and enforce rules by application, not topology.</p></li></ul><p>Explore the full architecture, step-by-step walkthroughs, and a live threat simulation, all for free!&#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://srv.buysellads.com/ads/long/x/THO6ZWIPTTTTTT3DZZ2NWTTTTTTQ26OO2VTTTTTTP4V26BETTTTTTAIZZ34HKADBQ7M6AYIL5QNULNPD23K64MBYP34T?cid=400237&quot;,&quot;text&quot;:&quot;Get the free solution template&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://srv.buysellads.com/ads/long/x/THO6ZWIPTTTTTT3DZZ2NWTTTTTTQ26OO2VTTTTTTP4V26BETTTTTTAIZZ34HKADBQ7M6AYIL5QNULNPD23K64MBYP34T?cid=400237"><span>Get the free solution template</span></a></p><div><hr></div><h2>&#128733; Governance can make you faster</h2><p>Many teams feel conflicted about putting real AI governance in place, because it looks like a brake at a moment where everybody expects you to accelerate.</p><p>I have a contrarian take: I believe <strong>good governance can be an accelerant</strong>.</p><p>In 2006, Peter Summerlin ran a simple study about kids in playgrounds. Teachers took kids to a playground with no fence, then to a comparable one with a defined border. Without the fence, the children stayed huddled around their teacher, afraid of leaving her sight. With the fence, they felt free to explore within the boundaries. So in playgrounds <strong>with fences, kids used </strong><em><strong>more</strong></em><strong> space</strong>.</p><p>People work the same way. Once they know where the fences are, they feel empowered to do more <em>within</em> them. But that&#8217;s only true if governance is <em>good</em>.</p><p>We already see this in coding. We talk about guardrails for AI coding all the time, and having strict guardrails is exactly what allows me to be more liberal with the tasks I give to my agents, and with what they can ship.</p><p>Data also seems to point the same way. A late-2025 Google Cloud / CSA study looked at agentic AI adoption by governance maturity:</p><ul><li><p><strong>Full governance</strong> &#8594; 46% adoption</p></li><li><p><strong>Partial governance</strong> &#8594; 25% adoption</p></li><li><p><strong>Still in development</strong> &#8594; 12% adoption</p></li></ul><p>Correlation is not causation, but it makes it hard to look at governance as just a tax.</p><p>I wrote a full guide about how to get started with AI governance, including what you should govern and how rules graduate from common sense to software &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:215418545,&quot;url&quot;:&quot;https://refactoring.fm/p/getting-started-with-ai-governance&quot;,&quot;publication_id&quot;:64099,&quot;embedding_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;Getting started with AI governance &#128274;&quot;,&quot;truncated_body_text&quot;:&quot;Hey there, Luca here!&quot;,&quot;date&quot;:&quot;2026-09-16T13:03:30.670Z&quot;,&quot;like_count&quot;:30,&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;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;Join 170,000+ engineers and managers getting practical ideas on engineering leadership, technical strategy and high-performing teams. Free, every week.&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;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/getting-started-with-ai-governance?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web&amp;embedding_publication_id=64099"><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">Getting started with AI governance &#128274;</div></div><div class="embedded-post-body">Hey there, Luca here&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 months ago &#183; 30 likes &#183; Luca Rossi</div></a></div><div><hr></div><h2>&#128690; Put gears, not modes</h2><p>In July I talked with <strong>Geoffrey Litt</strong>, design engineer at Notion, about malleable software, and he shared one of his favorite product design parables.</p><p>Imagine a bicycle whose gears are labeled not with numbers, but with modes like &#8220;gravel gear&#8221; and &#8220;uphill gear&#8221;. It sounds user-friendly, but it&#8217;s actually terrible. What do you do when you&#8217;re going uphill on gravel?</p><p>When you hide the underlying model behind labels, you take away the mental model people need to develop to handle new situations. And humans are smart! They can learn numbered gears, and then combine that knowledge creatively.</p><blockquote><p><em><strong>What malleable software means is having a smaller set of primitive components that can be reassembled to make anything, and doing a really good job introducing and teaching those components to everyone using the software, just like bicycle gears.</strong></em></p></blockquote><p>Notion is a good example of this. Every paragraph, heading, and image is a self-contained block you can drag, nest, and sync across pages. It&#8217;s a small learning cost upfront that keeps paying back over time, and now it pays back with agents too: they reuse the same primitives, so Notion agent instructions are just Notion pages.</p><p>You can find the full conversation with Geoffrey here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;6e869c3c-296f-4e64-9497-d54488e322c5&quot;,&quot;caption&quot;:&quot;Listen now:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Rise of Malleable Software &#129513; &#8212; with Geoffrey Litt&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-07-10T07:01:01.055Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/XS56wfgAcdw&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/the-rise-of-malleable-software-with&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;50b6ac4b-7701-4864-b38e-4798ffa646da&quot;,&quot;id&quot;:205382828,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:24,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128218; Weekly Readings</h2><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://alifeengineered.substack.com/p/on-the-death-of-amazons-writing-culture">On the Death of Amazon&#8217;s Writing Culture</a></h4><h5>7 min &#8226; by Steve Huynh</h5><p>Steve spent almost twenty years at Amazon, and he argues that its famous writing culture didn&#8217;t survive AI.</p><p>Bezos used to say you can&#8217;t write a six-page memo without clear thinking, and that is simply not true anymore, so a doc is no longer proof that someone has thought about the problem. Food for thought.</p><div><hr></div><h4>&#129352; <a href="https://karrisaarinen.com/posts/someone-behind-the-software/">Someone Behind the Software</a></h4><h5>3 min &#8226; by Karri Saarinen</h5><p>Karri argues that good products carry something of the people who make them, and that many products today feel messy because adding new capabilities is much easier than rethinking the existing ones. This is a great take, that I also needed to hear for Tolaria.</p><div><hr></div><h4>&#129353; <a href="https://felixrieseberg.com/how-to-be-more-ambitious-a-tutorial-for-humans-with-models/">How to Be More Ambitious: A Tutorial for Humans With Models</a></h4><h5>9 min &#8226; by Felix Rieseberg</h5><p>Felix works on Claude, and wrote a practical guide to using AI for more than doing the same work faster. He splits ambition into altitude, depth, and range. For example he went from asking Claude to fix single crashes to asking it to keep the apps crash-free, which first meant giving it crash reports and machines to reproduce bugs on. Lots of good prompts to steal, too!</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;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://refactoring.fm/subscribe?"><span>Make your team ship faster!</span></a></p><p>I wish you a great week.</p><p>Sincerely &#128075;<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Introducing Tolaria for mobile! 📱]]></title><description><![CDATA[Plus a new round of monthly updates on my coding workflow.]]></description><link>https://refactoring.fm/p/introducing-tolaria-mobile</link><guid isPermaLink="false">https://refactoring.fm/p/introducing-tolaria-mobile</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 21 Oct 2026 13:13:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IJ65!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there! Welcome to a new edition of my monthly updates on <strong>how I build <a href="https://tolaria.md/">Tolaria</a></strong>.</p><p>Once a month, I share how the project is going: an overall recap, the latest updates, and what I learned along the way. Everything comes from real experiments, including the parts that didn&#8217;t go as planned!</p><p>This is a big edition: I am introducing our <strong>brand new iOS app</strong> and massive updates to the coding workflow!</p><div class="callout-block" data-callout="true"><p>Tolaria itself stays free and open source thanks to the <a href="https://refactoring.fm/p/introducing-the-tolaria-alliance">Tolaria Alliance</a> and the tools I use every day:</p><ul><li><p><strong><a href="http://codescene.com/">CodeScene</a></strong>: keeps code health high across the codebase. It&#8217;s one of the gates every push has to pass.</p></li><li><p><strong><a href="https://codacy.com/tolaria">Codacy</a></strong>: code quality and security. This month it also got a new role in my agent setup, more on that below.</p></li><li><p><strong><a href="https://getunblocked.com/">Unblocked</a></strong>: helps agents (and me) find context across the codebase, ADRs, GitHub issues and commit history.</p></li><li><p><strong><a href="http://circleci.com/">CircleCI</a></strong>: our CI. This month we moved the main pipeline over completely, and it got about 4&#215; faster!</p></li></ul></div><p>If you missed the previous episodes, last month we talked about <a href="https://refactoring.fm/">moving agents from local machines to the cloud</a>, and earlier chapters covered <a href="https://refactoring.fm/p/how-i-run-the-tolaria-project">how I run the Tolaria project</a> and <a href="https://refactoring.fm/i/200102476/guides-gates-and-guards">guides, gates and guards</a>.</p><p>Here is the agenda for today:</p><ul><li><p>&#128034; <strong>Why releases have been slower</strong> &#8212; a personal note, before the news.</p></li><li><p>&#128241; <strong>Introducing Tolaria for iOS</strong> &#8212; with Android coming soon!</p></li><li><p>&#9729;&#65039; <strong>Cloud dev environments</strong> &#8212; plus Verity, and how agents access tools.</p></li><li><p>&#129302; <strong>Growing the bot family</strong> &#8212; the assistants that help me run everything.</p></li><li><p>&#128301; <strong>What&#8217;s next</strong> &#8212; Tolaria on the web, and inside your agents.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><h2>&#128034; Why releases have been slower</h2><p>I want to start with a small apology, as you may have noticed that Tolaria releases have been slower these last couple of months.</p><p>The truth is, after the big rush of the first months, <strong>I took some time off</strong>. This gave me some space to look at how I was working from a distance, and reflect.</p><p>I believe my #1 mistake has been to allow my attention to spread too thin across a <em>deluge</em> of small things every day instead of fewer, bigger bets that would truly make a difference. This is understandable because Tolaria has a massive <em>surface</em> for bugs and small tweaks, as it: 1) runs on multiple OSes, 2) works with multiple AI agent hosts, 3) works with the file system, the CLI, git, and 4) just does a lot of things! So I can literally fill up all of my time just working on the small improvements that people report on every day.</p><p>This felt productive, but over time I also got stressed and less motivated by that kind of work. So I took a step back, got back to the drawing board, and this is what I want to do now:</p><ul><li><p><strong>Invest most of my time in the big bets</strong> &#8212; define the few clear areas that need most of my human taste and strategy input. For me right now, these are mobile, a web version of Tolaria, and how Tolaria works with agents (more on all of these later!)</p></li><li><p><strong>Create a good workflow for the small daily improvements</strong> &#8212; good product experience is made of a thousand small things, so the little daily tweaks count. But it&#8217;s important that I keep improving my workflow so that these get done without draining my energy, and the product keeps improving, instead of degrading.</p></li></ul><p>All in all, I am figuring this out as we go, so thanks for sticking with me.</p><p>Anyway, the good news is that, from now on, things are going to get much faster. Over these months, I pretty much rebuilt how I work: the new setup lets me do much more in parallel, and scales much better than before. You can see the first results in the updates below, starting with the biggest bet of all, which is ready for you to try &#128071;</p><div><hr></div><h2>&#128241; Introducing Tolaria for iOS</h2><p>The big news of the month is: <strong>Tolaria now runs on iPad and iPhone.</strong> &#127881;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IJ65!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IJ65!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png 424w, https://substackcdn.com/image/fetch/$s_!IJ65!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png 848w, https://substackcdn.com/image/fetch/$s_!IJ65!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png 1272w, https://substackcdn.com/image/fetch/$s_!IJ65!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!IJ65!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png" width="1200" height="746.7032967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:906,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:3044530,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/221142028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!IJ65!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png 424w, https://substackcdn.com/image/fetch/$s_!IJ65!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png 848w, https://substackcdn.com/image/fetch/$s_!IJ65!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png 1272w, https://substackcdn.com/image/fetch/$s_!IJ65!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccd54712-cd30-435a-893a-d5d5765e2233_4096x2548.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Introducing the Tolaria iOS app!</figcaption></figure></div><p>Mobile has always been, far and away, the #1 requested feature on our product board. If you run an iOS device, now it&#8217;s here for you to try.</p><p>But also let me be honest. The apps are still in a rough state: some parts are ugly, some are bugged, and some probably won&#8217;t work at all. But the core of what makes Tolaria useful is already there, and works on both iPad and iPhone. Like, for example:</p><ul><li><p>The visual Markdown editor, with slash commands, properties, and source mode.</p></li><li><p>Real Git push and pull with auto-commit, and two-way sync with an iCloud or Files folder.</p></li><li><p>The command palette, plus iOS gestures and rotation.</p></li><li><p>19 languages, like the desktop app.</p></li></ul><p>Some of the rough edges include: git sync being limited to repos you clone from GitHub (with Github sign-in), large vaults are kinda slow to clone, and the app just crashing sometimes. Also, no AI yet, but coming soon.</p><p>The iOS app is available today on <a href="https://testflight.apple.com/join/7aPD4GAB">TestFlight</a>. And since Tolaria is open source, you can also check out the source code and compile it yourself!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://testflight.apple.com/join/7aPD4GAB&quot;,&quot;text&quot;:&quot;Download from TestFlight&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://testflight.apple.com/join/7aPD4GAB"><span>Download from TestFlight</span></a></p><p>Also, I also created a brand new Discord server to talk about all things Tolaria. I will also use it to post changelogs and announcements, and I will engage personally with the community. You can join below:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://discord.gg/gbMyQWJ64w&quot;,&quot;text&quot;:&quot;Join Tolaria's Discord&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://discord.gg/gbMyQWJ64w"><span>Join Tolaria's Discord</span></a></p><p>Finally, a couple of FAQs:</p><h3>What about Android?</h3><p>Because the app is built in React Native, Android is coming soon. I just haven&#8217;t had much time to test it yet, and I&#8217;d rather ship it when I&#8217;m confident it works well. But of course, you are welcome to try it from the source, and submit PRs to make it better.</p><h3>Why React Native?</h3><p>You might have seen that Shopify <a href="https://shopify.engineering/back-to-native">recently announced</a> it&#8217;s moving its mobile apps from React Native back to native Swift and Kotlin. They had gone all-in on React Native in 2020, and they explain that coding agents have made building each feature much cheaper, so native is now viable and keeps them closer to platform capabilities.</p><p>So could I have gone native? Maybe yes, but what really moved the needle for me were over-the-air (OTA) updates. With OTA, I can push fixes and improvements straight to users, without waiting on reviews each time. Now that agents can ship very fast, that felt table-stakes to me. And yes, there is also some code we can share between the desktop and mobile versions, but it&#8217;s not a lot anyway, so it was not a primary factor in the decision.</p><p>Let me know your thoughts, and on to the next updates &#128071;</p><div><hr></div><h2>&#9729;&#65039; Cloud dev environments</h2><p>Last month I wrote about my agents moving from local machines to the cloud. This month, the whole development environment followed.</p><h3>1) Three coding agents, two of which in the cloud</h3><p>Before, my coding agent ran on my Mac Mini with Codex, doing one thing at a time. Simple as that! In September, it had become already obvious that this was extremely inefficient:</p><ul><li><p>Doing one thing at a time was no longer enough, given the various work threads: desktop, web, and mobile.</p></li><li><p>Mobile access was cumbersome, and so was access for other agents (e.g. Grok Bot)</p></li><li><p>Long-tail reliability issues were real: I got a brief power outage while a was away, stalling work days; macOS sometimes <em>really</em> wants to restart; Starlink goes down, etc.</p></li></ul><p>So, since early October, I have moved most of the work to two Linux machines on Hetzner: one of them runs Codex, and the other runs Claude Code. I also still use the Mac mini for the iOS mobile work and builds.</p><p>Having both an OpenAI and Anthropic <em>stack</em> is useful for many reasons, like being able to immediately test new models, and use tools that are specific to one of the two stacks, like <a href="https://verity.md/">Verity</a>, which I use with CC.</p><p>This setup also completely untethered coding from my machines, and I can now drive work from my &#8220;PM&#8221; Grok Bot agent, who in turn SSH into the coding machines.</p><h3>2) Welcome Linear</h3><p>I also <strong>moved from Todoist to Linear</strong> for tracking work.</p><p>All the work the agents pick up now lives in Linear, which provides cleaner (and deeper) abstractions for product dev work, and also better agent integrations.</p><p>This is still early, so I don&#8217;t have a lot to say about it, but the integration has been seamless so far, and I am learning how to use it best.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4ZMH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4ZMH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png 424w, https://substackcdn.com/image/fetch/$s_!4ZMH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png 848w, https://substackcdn.com/image/fetch/$s_!4ZMH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png 1272w, https://substackcdn.com/image/fetch/$s_!4ZMH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!4ZMH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png" width="728" height="263.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba5413e0-f81f-4335-9741-9765d914db06_2668x966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:527,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:307099,&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/221142028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4ZMH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png 424w, https://substackcdn.com/image/fetch/$s_!4ZMH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png 848w, https://substackcdn.com/image/fetch/$s_!4ZMH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png 1272w, https://substackcdn.com/image/fetch/$s_!4ZMH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba5413e0-f81f-4335-9741-9765d914db06_2668x966.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>3) 4x faster CI with <a href="https://circleci.com/">CircleCI</a></h3><p>On the CI side, <strong>we moved from GitHub Actions to</strong> <strong><a href="https://circleci.com/">CircleCI</a></strong>, and the main pipeline went from about 15&#8211;16 minutes to ~4, which is roughly 4&#215; faster!</p><p>Locally, every push still goes through the same Husky gates, performed on the CircleCI sidecar chunks, largely in parallel: CodeScene (10/10), Codacy (zero new findings), unit tests, and Playwright smoke tests.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u0Y7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png 424w, https://substackcdn.com/image/fetch/$s_!u0Y7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png 848w, https://substackcdn.com/image/fetch/$s_!u0Y7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png 1272w, https://substackcdn.com/image/fetch/$s_!u0Y7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!u0Y7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png" width="728" height="237" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:474,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:153894,&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/221142028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u0Y7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png 424w, https://substackcdn.com/image/fetch/$s_!u0Y7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png 848w, https://substackcdn.com/image/fetch/$s_!u0Y7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png 1272w, https://substackcdn.com/image/fetch/$s_!u0Y7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F673c3f0c-71d6-4833-a791-49d1f8675efc_2952x962.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><h3>4) Using <a href="https://verity.md/tolaria">Verity</a></h3><p>I started using <a href="https://verity.md/tolaria">Verity</a>, a new product from the team at <a href="https://codacy.com/tolaria">Codacy</a>, on my Claude Code machine.</p><p>When the coding agent completes a task, Verity checks the change for quality, security and whether it matches the product&#8217;s tech strategy, using AI review, static analysis and formal proofs in <a href="https://lean-lang.org/">Lean</a>. It either passes the change, or blocks and hands the fix to the agent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N0qT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N0qT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png 424w, https://substackcdn.com/image/fetch/$s_!N0qT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png 848w, https://substackcdn.com/image/fetch/$s_!N0qT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png 1272w, https://substackcdn.com/image/fetch/$s_!N0qT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!N0qT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png" width="728" height="277" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:554,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:436877,&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/221142028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!N0qT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png 424w, https://substackcdn.com/image/fetch/$s_!N0qT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png 848w, https://substackcdn.com/image/fetch/$s_!N0qT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png 1272w, https://substackcdn.com/image/fetch/$s_!N0qT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1662a744-5949-49e5-a9e1-68c1f116f479_3697x1406.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With respect to other tools, what sets it apart is the <strong>knowledge base</strong> concept. Every important decision gets recorded alongside my ADRs and docs, so future sessions learn from past ones and don&#8217;t repeat the same mistakes.</p><p>It has already blocked several changes, for legit reasons. I like it so far, and I like the dashboard it includes, where you can check runs, usage, the knowledge base itself, and more. Free during beta, with v1 launching in the coming weeks.</p><h4>5) Centralized access to tools</h4><p>With more agents doing more work (including Grok Bot, see more below), the way we used to handle credentials got really messy, with tokens scattered across machines, configs and bot settings.</p><p>I first moved agent access to tools into <strong>1Password</strong>, but it didn&#8217;t work super well so I developed a small <strong>custom vault service</strong>. Every agent has its own identity, looks up the logins it needs, and can create new ones. It&#8217;s a small thing on paper, but it made the whole setup feel a lot more manageable.</p><p>It&#8217;s also way easier now to spin up new agents on any agent host, as I can simply give it access to the vault.</p><div><hr></div><h2>&#129302; Growing our Grok Bot family</h2><p>Behind all of this, there&#8217;s a growing family of assistants.</p><p>In September I ported my non-coding agents to Grok Bot, and this month we expanded on it, spawning more of them for dedicated areas, and it has all been working very well.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eO4B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eO4B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png 424w, https://substackcdn.com/image/fetch/$s_!eO4B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png 848w, https://substackcdn.com/image/fetch/$s_!eO4B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png 1272w, https://substackcdn.com/image/fetch/$s_!eO4B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!eO4B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png" width="334" height="633.7330037082818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1535,&quot;width&quot;:809,&quot;resizeWidth&quot;:334,&quot;bytes&quot;:194457,&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/221142028?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.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_!eO4B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png 424w, https://substackcdn.com/image/fetch/$s_!eO4B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png 848w, https://substackcdn.com/image/fetch/$s_!eO4B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png 1272w, https://substackcdn.com/image/fetch/$s_!eO4B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b71b69f-bc63-43f7-82f2-bb7ba657c7ea_809x1535.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I don&#8217;t think it&#8217;s worth going into detail about what each bot does, but here are general lessons we have learned in the process:</p><ul><li><p><strong>Make spawning new agents as easy as possible</strong>. We developed the vault for credentials, and a small custom tool to automatically connect new bots to Slack. Unsurprisingly, the less friction there is in delegating and scaling work, the more work you will delegate and scale!</p></li><li><p><strong>Shared team bots + personal assistants work great</strong>. Everyone on our team has a personal bot that acts as chief of staff, plus we have shared bots for the areas where we collaborate. This seems like a good pattern that is working well for us.</p></li><li><p><strong>Mobile access matters a lot</strong>. If I had to pick just one reason why Grok Bot is winning for us, it would be mobile. Whatever agent host you use, make sure you create a good mobile experience (notifications, sync, voice notes, calls). Working with agents is more and more about doing many small things at random times, rather than sitting at your computer for long stretches, so mobile is an incredible enabler.</p></li></ul><p>So far I&#8217;m very happy with Grok Bot itself. A big reason is also that it now runs models other than Grok under the hood, like Opus 5.5, and the difference in quality shows.</p><div><hr></div><h2>&#128301; What&#8217;s next</h2><p>Beyond mobile, two big things are coming next: Tolaria on the web, and inside your agents.</p><h3>1) Tolaria on the web</h3><p>Many teams have asked for a simpler, managed version of Tolaria. This doesn&#8217;t mean changing how the desktop app works: it stays fully offline-first, vaults are still cloned locally as Git repos, and so on.</p><p>What can change is the <strong>hosting</strong>.</p><p>Today, to share a vault with your team, you need GitHub or another Git host. That works, but it gets messy when it comes to managing permissions and onboarding people. A GitHub repo also has a pretty much all-or-nothing permission model: someone either has access to the whole thing, or they don&#8217;t. For code that&#8217;s fine, but for docs it&#8217;s limiting, especially once external contributors are involved.</p><p>So the question for me becomes: can we retain the core principles of Tolaria, while also bringing it <strong>closer to how Google Docs works</strong>, where you can share specific documents with colleagues and partners?</p><p>A web version of Tolaria, that also hosts your file, is the natural place for that. Like the rest of Tolaria, it will be <strong>open-source and self-hostable</strong>. But we&#8217;ll also offer a simple managed option you can pay for, priced very cheaply.</p><p>Work is already underway!</p><h3>2) Tolaria inside your agents</h3><p>Last week I wrote about <a href="https://refactoring.fm/p/how-to-design-a-good-mcp-server">how to design a good MCP server</a>, and the backdrop to that piece is that more and more work is obviously happening inside agent hosts.</p><p>I expect docs to follow the same path: more and more people will add to and edit their Tolaria vaults through agents, in their favorite agent environment, rather than inside Tolaria itself.</p><p>It&#8217;s already true for me, by the way! Tolaria is at the center of my workflow and the source of my knowledge base, yet, the more my agents get good at working on it, the less I use it directly.</p><p>So we want to build good plugins for all the major agent hosts (Grok Bot, Claude, ChatGPT, Codex). Also, not just tools for chatting with the agent, but also some UI and things you can do right inside the host. Today, Tolaria already ships a local MCP server with 12 tools, which register itself automatically. A few ideas we&#8217;re exploring for what comes next, none decided yet:</p><ul><li><p>Live, editable note cards rendered inside the agent chat.</p></li><li><p>A hosted remote MCP, so ChatGPT and Claude can reach your vault (possible with the web version!)</p></li></ul><p>We&#8217;re going to invest big here, because more and more work is shifting to those surfaces.</p><p>I&#8217;d love your help with this. If you use Tolaria through agents today, hit reply and tell me how. And if you try the mobile app, tell me what you think, rough edges included.</p><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[Making room for hard things, stories for feedback, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition 230]]></description><link>https://refactoring.fm/p/making-room-for-hard-things-stories</link><guid isPermaLink="false">https://refactoring.fm/p/making-room-for-hard-things-stories</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 19 Oct 2026 07:01:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!G2_E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right fo</em>o<em>t.</em></p><p><em>I also publish an original essay every Wednesday. Here is the one from last week in case you missed it:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ed158da2-5a49-420d-bf27-fdf891b10f15&quot;,&quot;caption&quot;:&quot;Hey, Luca here! Welcome to the &#10024;&#65039;&#65039;&#65039;&#65039;&#65039;&#65039;&#65039; monthly free essay &#10024;&#65039;&#65039;&#65039;&#65039;&#65039;&#65039;&#65039; from Refactoring.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Design a Good MCP Server &#128268;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-10-15T08:06:06.996Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2e3ac1f-658d-4890-ba05-15fcac1955dd_2046x1366.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/how-to-design-a-good-mcp-server&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:219986578,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:49,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128640; <a href="https://srv.buysellads.com/ads/long/x/TCOG3WDPTTTTTTF3RXKNWTTTTTTDLQNA2VTTTTTTLTLRTBETTTTTT2Z45R36B2S5V6YUCL3JK7NNE7LYCQHFK7QW5RUT?cid=400208">Build event-driven apps without the overhead</a></h2><p><em>This week&#8217;s newsletter is brought to you by our friends at <a href="https://srv.buysellads.com/ads/long/x/TCOG3WDPTTTTTTF3RXKNWTTTTTTDLQNA2VTTTTTTLTLRTBETTTTTT2Z45R36B2S5V6YUCL3JK7NNE7LYCQHFK7QW5RUT?cid=400208">AWS</a> and <a href="https://srv.buysellads.com/ads/long/x/TCOG3WDPTTTTTTF3RXKNWTTTTTTDLQNA2VTTTTTTLTLRTBETTTTTT2Z45R36B2S5V6YUCL3JK7NNE7LYCQHFK7QW5RUT?cid=400208">Confluent</a>!</em></p><p>Deliver real-time customer experiences without managing streaming infra! <strong>Confluent Cloud</strong> is a fully managed Apache Kafka-based solution for event streaming, available directly from your AWS account.</p><p>See how Confluent Cloud integrates with Amazon S3, Redshift, Lambda, and Bedrock to:</p><ul><li><p><strong>Accelerate development</strong> &#8212; build real-time data pipelines connected across your AWS tools</p></li><li><p><strong>Simplify operations</strong> &#8212; offload event streaming management to Confluent Cloud</p></li><li><p><strong>Scale in real-time</strong> &#8212; power event-driven and generative AI apps within your AWS environment</p></li></ul><p>Get technical details to start building, from step-by-step tutorials and Infrastructure-as-Code templates to a free trial &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://srv.buysellads.com/ads/long/x/TCOG3WDPTTTTTTF3RXKNWTTTTTTDLQNA2VTTTTTTLTLRTBETTTTTT2Z45R36B2S5V6YUCL3JK7NNE7LYCQHFK7QW5RUT?cid=400208&quot;,&quot;text&quot;:&quot;Explore Confluent Cloud on AWS &#8594;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://srv.buysellads.com/ads/long/x/TCOG3WDPTTTTTTF3RXKNWTTTTTTDLQNA2VTTTTTTLTLRTBETTTTTT2Z45R36B2S5V6YUCL3JK7NNE7LYCQHFK7QW5RUT?cid=400208"><span>Explore Confluent Cloud on AWS &#8594;</span></a></p><div><hr></div><h2>&#127939;&#8205;&#9794;&#65039; Make room for hard things</h2><p>In <a href="https://refactoring.fm/p/mental-marathoners">Mental Marathoners</a><em>,</em> I wrote that a possible consequence of intelligence getting cheap, is that the edge moves to people who still want to <strong>stretch their own thinking</strong>.</p><p>What I don&#8217;t buy is that this <em>hunger</em> is just a trait &#8212; that you either have it or you don&#8217;t. I prefer to ask myself what makes me hungry in the first place.</p><p>There is a data point about runners that stuck with me. Regular runners (4+ hours a week) are unusually affluent and educated, even though running itself is cheap. This means the <em>filter</em> is not the cost of the hobby. To me, this looks more like Maslow: once basic needs are covered (i.e. you are affluent and educated), you free up mental space for harder challenges (i.e. running).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G2_E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G2_E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png 424w, https://substackcdn.com/image/fetch/$s_!G2_E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png 848w, https://substackcdn.com/image/fetch/$s_!G2_E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png 1272w, https://substackcdn.com/image/fetch/$s_!G2_E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!G2_E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png" width="1456" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:338353,&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/220501322?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.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_!G2_E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png 424w, https://substackcdn.com/image/fetch/$s_!G2_E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png 848w, https://substackcdn.com/image/fetch/$s_!G2_E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png 1272w, https://substackcdn.com/image/fetch/$s_!G2_E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88c3ee2-28a9-4138-8640-5431a5018d64_1478x610.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">To make room for curiosity and willingness to become a better version of yourself, you should probably take care of everything else below</figcaption></figure></div><p>We become hungrier when the rest of our life is simple enough that a hard problem has room to be attacked.</p><p>So I think of energy like a jar. If you fill it with sand (chores, fake urgencies, a hundred open tabs), the rocks never go in. The stretch work is a rock, and <a href="https://refactoring.fm/p/how-to-organize-personal-work">in my experience</a>, you should spend at least half your time on that.</p><p>I wrote more about mental marathoners and how to stay on the right track here &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:213559716,&quot;url&quot;:&quot;https://refactoring.fm/p/mental-marathoners&quot;,&quot;publication_id&quot;:64099,&quot;embedding_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;Mental marathoners &#127939;&#8205;&#9794;&#65039;&quot;,&quot;truncated_body_text&quot;:&quot;A couple of weeks ago, I read The People Who Will Thrive in the AI Age, by David Brooks.&quot;,&quot;date&quot;:&quot;2026-09-02T07:02:07.437Z&quot;,&quot;like_count&quot;:45,&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;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;Join 170,000+ engineers and managers getting practical ideas on engineering leadership, technical strategy and high-performing teams. Free, every week.&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;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/mental-marathoners?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web&amp;embedding_publication_id=64099"><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">Mental marathoners &#127939;&#8205;&#9794;&#65039;</div></div><div class="embedded-post-body">A couple of weeks ago, I read The People Who Will Thrive in the AI Age, by David Brooks&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 months ago &#183; 45 likes &#183; Luca Rossi</div></a></div><div><hr></div><h2>&#128214; Use stories to deliver hard feedback</h2><p>Earlier this year I talked with Michael Lopp (Rands) about the power of stories at work, and one part I keep coming back to is <strong>how he delivers hard feedback</strong>.</p><p>He told the story of a high-performing director who had only ever gotten top marks, then suddenly got a &#8220;C&#8221; after a promotion, and got furious. Instead of saying &#8220;pull it together,&#8221; Rands walked him through a personal story of going through the same experience years earlier.</p><p>This didn&#8217;t fix things overnight &#8211; it took weeks and months of continued support &#8211; but the story created space for the person to process the feedback on their own terms, instead of locking into defense.</p><blockquote><p><em><strong>Their job is to choose to decide whether they want to learn or not. It&#8217;s really important. If they don&#8217;t hear the story, if they don&#8217;t hear the lesson, they&#8217;re not going to do anything.</strong></em></p></blockquote><p>When coaching or managing people, we should assume they are capable and resourceful. In this context, stories can give just enough input to unblock someone, without spoon-feeding the answer. They get to own the conclusion, and that ownership is often what makes them actually act on it.</p><p>You can find the full conversation with Michael here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;c1268134-3243-4ad3-8530-a2036b8c6416&quot;,&quot;caption&quot;:&quot;Listen now:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Power of Stories &#9997;&#65039; &#8212; with Rands&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-06-26T07:01:48.847Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/56qoZulS5Rg&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/the-power-of-stories-with-michael&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;e2316043-1272-48fe-8fc8-32127fe6bd8b&quot;,&quot;id&quot;:203274265,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:14,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128218; Weekly Readings</h2><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://charity.wtf/p/if-your-team-is-happy-are-you-doing">If Your Team Is Happy, Are You Doing a Good Job?</a></h4><h5>9 min &#8226; by Charity Majors</h5><p>Charity goes back to the ZIRP-era belief that if your team is happy, you are doing a good job, and explains how psychological safety drifted from being about learning and performance to being about never feeling bad at work.</p><p>I agree with her that frustrating people and telling them no is part of a manager&#8217;s job, because growth is uncomfortable. Great read, and part of a longer conversation with Cat Hicks that is worth catching up.</p><div><hr></div><h4>&#129352; <a href="https://www.seangoedecke.com/softwares-centaur-age-may-last-decades/">Software&#8217;s Centaur Age May Last Decades</a></h4><h5>5 min &#8226; by Sean Goedecke</h5><p>Sean argues we are living in the centaur age of software, where engineers paired with AI beat both unassisted engineers and unsupervised agents, and that this phase may last decades, like it did in chess.</p><p>I don&#8217;t know if he is right about the timeline (nobody really does), but I like his advice a lot: don&#8217;t jump ship early, and spend your energy figuring out what value humans still add.</p><div><hr></div><h4>&#129353; <a href="https://rdel.substack.com/p/rdel-163-how-do-ai-coding-assistants">How Do AI Coding Assistants Change the Shape of Eng Work?</a></h4><h5>4 min &#8226; by Lizzie Matusov</h5><p>Lizzie covers a six-month study on how AI assistants reshape engineers&#8217; days, and the results are mixed: perceived productivity held at 84%, but the share of engineers reporting a worse developer experience nearly doubled, from 14% to 27%.</p><p>Time moved from writing code to directing and checking AI output, and focus took the hardest hit. I liked the practical advice at the end, especially batching AI review into set blocks and keeping design work and hard debugging on separate, protected time.</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>I wish you a great week.</p><p>Sincerely &#128075;<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Your Team is a System ⚙️ — with Francisco Trindade]]></title><description><![CDATA[Watch now (55 mins) | Refactoring Podcast &#8226; Episode 74]]></description><link>https://refactoring.fm/p/your-team-is-a-system-with-francisco</link><guid isPermaLink="false">https://refactoring.fm/p/your-team-is-a-system-with-francisco</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 16 Oct 2026 07:03:10 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/220371356/d60b763d570fb0b933bb291718e53bdf.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-HiiABFAz06c" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;HiiABFAz06c&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/HiiABFAz06c?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><blockquote><p><em>Today&#8217;s episode is brought to you by: <strong><a href="https://ntn.so/refactoring">Notion</a></strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://ntn.so/refactoring" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jgfe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 424w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 848w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1272w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png" width="312" height="108.42" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:278,&quot;width&quot;:800,&quot;resizeWidth&quot;:312,&quot;bytes&quot;:31046,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://ntn.so/refactoring&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/209980935?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Jgfe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 424w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 848w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1272w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><em>Learn more about<strong> Notion&#8217;s Developer Platform </strong>today at<strong> <a href="https://ntn.so/refactoring">https://ntn.so/refactoring</a></strong></em></p></blockquote><div><hr></div><p>Today's guest is <strong><a href="https://www.linkedin.com/in/franciscomt/">Francisco Trindade</a></strong>, VP of Engineering, founder of two companies, and author of &#8220;<a href="https://franciscotrindade.me/leading-effective-software-teams-book/">Leading Effective Software Teams</a>&#8221;, which I just read and loved.<br>So in this chat, you will learn how to think about your team as a system, how to optimize flow in the developer process, and why you should absolutely hire junior engineers. </p><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 5-minute, handcrafted takeaways 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><p><strong>Agenda</strong>:</p><ol><li><p><strong>&#128216; Why a book about teams as systems</strong></p></li><li><p><strong>&#129504; Systems thinking in day-to-day management</strong></p></li><li><p><strong>&#127754; Optimizing flow and measuring what matters</strong></p></li><li><p><strong>&#127919; Autonomy and shaping work for people</strong></p></li><li><p><strong>&#127793; Why junior engineers still matter</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/your-team-is-a-system-with-francisco">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Design a Good MCP Server 🔌]]></title><description><![CDATA[Taking from successful examples at Notion, Stripe, Block, Sentry, and more!]]></description><link>https://refactoring.fm/p/how-to-design-a-good-mcp-server</link><guid isPermaLink="false">https://refactoring.fm/p/how-to-design-a-good-mcp-server</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Thu, 15 Oct 2026 08:06:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e2e3ac1f-658d-4890-ba05-15fcac1955dd_2046x1366.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here! Welcome to the </em>&#10024;&#65039;&#65039;&#65039;&#65039;&#65039;&#65039;&#65039;<em> <strong>monthly free essay</strong></em> &#10024;&#65039;&#65039;&#65039;&#65039;&#65039;&#65039;&#65039;<em> from Refactoring.</em></p><p><em>Every week I write an article to 170K+ engineers about how to make good software together. To get access to all our articles, resources, and our <a href="https://refactoring.fm/p/refactoring-community">private community</a>, subscribe to the <a href="http://refactoring.fm/subscribe?">full version</a>.</em></p><div><hr></div><p>More and more products these days show up inside agent hosts like ChatGPT, Claude, Grok Bot, as plugins that the model can use. In many cases, agents also act proactively and recommend plugins that fit their current job.</p><p>This means, as many predicted, that agents are becoming <a href="https://x.com/skirano/status/2105353473118404648">important distribution platforms</a>, with many users discovering new products from inside them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MqjY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MqjY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png 424w, https://substackcdn.com/image/fetch/$s_!MqjY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png 848w, https://substackcdn.com/image/fetch/$s_!MqjY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png 1272w, https://substackcdn.com/image/fetch/$s_!MqjY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MqjY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png" width="436" height="535.3605442176871" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1444,&quot;width&quot;:1176,&quot;resizeWidth&quot;:436,&quot;bytes&quot;:141586,&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/219986578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.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_!MqjY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png 424w, https://substackcdn.com/image/fetch/$s_!MqjY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png 848w, https://substackcdn.com/image/fetch/$s_!MqjY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png 1272w, https://substackcdn.com/image/fetch/$s_!MqjY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b38a572-2e1c-4f8d-a3d6-dea12e18bff7_1176x1444.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Such plugins, under the hood, are <strong>powered by MCP servers</strong>, which wrap and expose the tool's functionality.</p><p>On paper, these look easy to build. In practice, less so.</p><p>I bet everyone who has played with agents for a while has found themselves routinely battling with MCPs that are either broken, or incomplete, or don&#8217;t work as intended. I surely have, and I keep seeing <strong>embarrassing stories</strong> popping up on the internet about it.</p><p>Just last week, Figma <a href="https://x.com/badlogicgames/status/2105234146499203255">got backlash</a> for having hardcoded the list of allowed clients in their MCP server, effectively disabling popular tools like Pi and OpenCode. One of the creators of the MCP protocol himself <a href="https://x.com/GayaniFigma/status/2105295629941350454">chimed in</a> to note that this is not how the protocol should work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YKLE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YKLE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png 424w, https://substackcdn.com/image/fetch/$s_!YKLE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png 848w, https://substackcdn.com/image/fetch/$s_!YKLE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png 1272w, https://substackcdn.com/image/fetch/$s_!YKLE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!YKLE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png" width="460" height="363.3220338983051" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:932,&quot;width&quot;:1180,&quot;resizeWidth&quot;:460,&quot;bytes&quot;:252735,&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/219986578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.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_!YKLE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png 424w, https://substackcdn.com/image/fetch/$s_!YKLE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png 848w, https://substackcdn.com/image/fetch/$s_!YKLE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png 1272w, https://substackcdn.com/image/fetch/$s_!YKLE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead9229-bef2-400a-a922-89c6cfb25c3a_1180x932.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Why does this happen? I believe many teams just underestimate what it takes to create good MCP servers. They think about them as simple API wrappers, assign the task to an intern, and call it done.</p><p>Last year I wrote <a href="https://refactoring.fm/p/how-to-design-apis-for-an-ai-world">How to Design APIs for an AI World</a>, because it was already clear that APIs needed to be adapted for when the caller was an agent rather than deterministic software. Fast forward to today, a lot has changed about how agents interact with software, so I am writing a sequel that 1) dives deeper, and 2) covers more of the product surface.</p><p>To do this well, I am also looping in <a href="https://www.linkedin.com/in/luigipederzani/?isSelfProfile=false">Luigi Pederzani</a> and the guys at <a href="http://manufact.com/?utm_source=refactoring">Manufact</a>, who I have known for a long time. They are the authors of the open-source framework <a href="https://github.com/mcp-use/mcp-use?utm_source=refactoring">mcp-use</a> and have been working on MCPs from the very early days, so they are the most knowledgeable people I know about this space.</p><p>I will also be pulling real examples from products that are doing this right, like Notion, Block, Stripe, and Sentry, so you&#8217;ll leave this article with practical references that you can take inspiration from. </p><p>So here is the agenda:</p><ul><li><p>&#129513; <strong>Jobs instead of endpoints</strong> &#8212; deciding which tools should exist in the first place.</p></li><li><p>&#129517; <strong>Designing for an agent caller</strong> &#8212; descriptions, improvisation, errors, and UI.</p></li><li><p>&#128260; <strong>The production lifecycle</strong> &#8212; what is different from running a normal backend.</p></li><li><p>&#9878;&#65039; <strong>Self-host vs managed</strong> &#8212; figuring out when each one makes sense.</p></li><li><p>&#9989; <strong>Checklist</strong> &#8212; what to do with your team next week.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><p><em>Disclaimer: I am thankful to <a href="https://manufact.com/?utm_source=refactoring">Manufact</a> for partnering on this and sharing how they see MCP design and production in the wild. I am a fan of what they build and you should check it out.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://manufact.com/?utm_source=refactoring&quot;,&quot;text&quot;:&quot;Learn more about Manufact&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://manufact.com/?utm_source=refactoring"><span>Learn more about Manufact</span></a></p><p><em>As always, I will only write my unbiased opinion on the practices and tools covered, Manufact included.</em></p><div><hr></div><h2>&#129513; Jobs instead of endpoints</h2><p>So, where do you start?</p><p>In my experience, the most common mistake is simply taking the endpoints you already have and turning each of them into a tool. REST (or GraphQL) APIs are usually built around <em>resources</em> and CRUD verbs, which work great for software that knows exactly what it wants, and can express it as atomic operations.</p><p>An agent, instead, is trying to <strong>complete a job</strong> on behalf of a user, like &#8220;file this bug with a reproduction and an assignee&#8221;, or &#8220;summarize the blockers of this sprint&#8221;.</p><p>If jobs <em>depart</em> too much from what single API endpoints do, the model spends tokens (and time) finding the right paths, chains five calls where one would do, and may still fail the workflow the user actually wanted.</p><p>Instead, it&#8217;s useful to work top-down, starting with the end in mind. List the handful of <strong>end-to-end workflows</strong> people actually ask agents to do with your product, and then design one tool, or a tight chain of tools, for each of them.</p><p>This also gives you a rule of thumb for granularity:</p><ul><li><p><strong>Too fine-grained</strong> &#8212; and you pay for multi-hop agent loops (LLM seconds times N) on top of a confused tool choice.</p></li><li><p><strong>Too coarse</strong> &#8212; like one mega-tool with a kitchen-sink schema, and arguments get brittle, recovery gets hard, and auth gets messy.</p></li></ul><p>A good default is tools that finish a job in one or two calls, batching related reads when you can and keeping multi-step flows for the domains that truly need them. When you do need them, make the intermediate state explicit in the responses, so the model can continue without guessing.</p><p>A useful example is Notion, because they shipped both versions.</p><p>In the Notion API, the content of a page is a tree of <em>blocks</em> (paragraphs, headings, to-dos and so on), and their first, open-source MCP server <a href="https://www.notion.com/blog/notions-hosted-mcp-server-an-inside-look">mapped each endpoint 1:1 to a tool</a>, so agents had to work with blocks too. Blocks are a great abstraction for an API: they are granular and composable, and they give apps that render or sync Notion content precise control over every detail.</p><p>An agent, however, usually has a bigger job in mind, like writing up a meeting recap or adding a section to a plan, where the natural unit is the page. Notion&#8217;s own takeaway was that 1:1 mapping &#8220;<em>created suboptimal experiences for AI agents</em>.&#8221;</p><p>So, on their new <a href="https://developers.notion.com/guides/mcp/mcp-supported-tools">hosted server</a>, they eventually changed the abstraction. There is no tool to create, update or delete individual blocks anymore: pages go in and out as Notion-flavored Markdown, and one page-level call replaces a chain of block calls:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oUVq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oUVq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png 424w, https://substackcdn.com/image/fetch/$s_!oUVq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png 848w, https://substackcdn.com/image/fetch/$s_!oUVq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!oUVq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!oUVq!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png" width="1200" height="557.967032967033" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:677,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:265333,&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/219986578?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.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_!oUVq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png 424w, https://substackcdn.com/image/fetch/$s_!oUVq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png 848w, https://substackcdn.com/image/fetch/$s_!oUVq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!oUVq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf13648d-0168-4497-8058-e00672ada9c1_2418x1124.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">How the Notion MCP server evolved from mirroring API endpoints to tools reflecting broader jobs.</figcaption></figure></div><p>The work of turning Markdown into nested blocks, or finding the right block to change, moved inside the server.</p><p>Block tells a similar story in their <a href="https://engineering.block.xyz/blog/blocks-playbook-for-designing-mcp-servers">MCP playbook</a>: the first version of their internal Linear MCP had 30+ tools that mirrored the API, and a question like &#8220;what issues is bob@example.com working on&#8221; took four to six calls.</p><div><hr></div><h2>&#129517; Designing for an agent caller</h2><p>Once you know which tools should exist, the next question is how they should behave.</p><p>The thing to keep in mind here is that your caller is different in many ways from the software that typically hits your API. We covered this for APIs in general <a href="https://refactoring.fm/p/how-to-design-apis-for-an-ai-world">last year</a>, and most of those ideas apply to MCP, with possibly even less forgiveness.</p><p>To me, here are the most important ideas to remember:</p><h3>1) Descriptions are runtime</h3><p>Developers read your API docs once and internalize the patterns, while agents re-read tool names and descriptions at every turn, inside a limited context window, and decide what to call based on that alone.</p><p>So, you should 1) name tools the way a user would phrase the request, and 2) use the description for the stuff that actually drives behavior: constraints, preconditions, and when <em>not</em> to use the tool. I would also put description edits through review and some testing, because changing a sentence there can change what the model does as much as changing code.</p><p>Sentry&#8217;s MCP server does this well, for example, in its <a href="https://github.com/getsentry/sentry-mcp/blob/main/packages/mcp-core/src/tools/catalog/search-errors.ts">search_errors tool</a>:</p><div class="callout-block" data-callout="true"><p><code>Search Sentry error events: exceptions and crashes with stack traces. Use for error counts, statistics, trends, and individual error events.</code></p><p></p><p><code>NOT for log messages, including error/warning logs (use search_logs), requests or latency (use search_traces), or grouped issue lists (use search_issues).</code></p></div><p>The model learns what the tool is for, and what to use instead.</p><h3>2) The caller improvises</h3><p>Agents may invent argument shapes, call tools out of order, retry in odd ways and forget that setup has already happened, and the host will often retry on their behalf.</p><p>So the principles we discussed for AI-facing APIs are your defense here, which in practice means strict schemas where it matters, safe defaults, and idempotent writes on anything risky. For high-stakes actions, you can refuse with a clear message and offer a human-in-the-loop path when the domain needs it.</p><p>Stripe does this well for APIs: every POST accepts an <a href="https://docs.stripe.com/api/idempotent_requests">Idempotency-Key</a>, and a retry with the same key returns the first response instead of creating a second object. On MCP tools, you can do the same with an idempotency key argument, and declare how each tool behaves with the protocol&#8217;s <a href="https://modelcontextprotocol.io/specification/draft/schema#toolannotations">tool annotations</a>:</p><div class="callout-block" data-callout="true"><p><code>annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false }</code></p></div><p>Clients can use these hints to decide when to ask for confirmation, as Block&#8217;s Goose <a href="https://engineering.block.xyz/blog/blocks-playbook-for-designing-mcp-servers">does</a>.</p><h3>3) Errors should teach the next attempt</h3><p>A key difference between agents and deterministic software is that the former can (and will try to) recover from errors by itself. So you should help with it.</p><p>This means a bare <code>{&#8220;code&#8221;: 400}</code>  is fine for deterministic software, where a developer will eventually read the logs and fix the call, while an agent benefits from errors that are more descriptive and tell it what to do next, like the expected format, an example, or a different tool to use instead.</p><p>Block&#8217;s playbook shows a good one from Goose, for files over 400KB:</p><div class="callout-block" data-callout="true"><p><code>File &#8216;{}&#8217; is too large ({:.2}KB). Maximum size is 400KB to prevent memory issues. If needed, use shell commands like &#8216;head&#8217;, &#8216;tail&#8217;, or &#8216;sed -n&#8217; to read a subset of the file.</code></p></div><p>It says what went wrong, why, and what to try instead.</p><p>It also pays to log which errors agents hit most, because many of them will point to the tool's surface and hint at what you can improve. Half of your failures might be &#8220;invalid priority&#8221; because the schema says <code>high</code> and the server expects <code>P1</code>.</p><h3>4) The job can come with its own UI</h3><p>Lately, MCP servers can do more than expose tools.</p><p>With <a href="https://modelcontextprotocol.io/extensions/apps/overview">MCP Apps</a>, a tool can point to an HTML resource that the host renders in a sandbox, so your product can show its own interface right inside the conversation.</p><p>This matters for jobs where the user wants to see and touch the result. In a design tool, for example, the user may open a project, select a screen, ask the AI to change it, and see the result in the same canvas. Doing that through text alone would mean describing objects back and forth, while here the app can tell the agent exactly what the user selected.</p><p>ChatGPT goes a step further with MCP Extensions, which turn an MCP server into a plugin with specific entry points: a launcher in the sidebar, a tab inside a conversation, and handlers that open files with a given extension in your own viewer. These are host-specific, and some of them (like file entry points) are desktop-only for now. Luigi wrote a <a href="https://manufact.com/blog/openai-mcp-extensions">good walkthrough</a> of this.</p><div><hr></div><h2>&#128260; The production lifecycle</h2><p>The second intuition to update is about what happens after launch. Shipping an MCP server feels like shipping a small backend service, and in many ways it is, but keeping it healthy also involves work that a regular backend doesn&#8217;t have.</p><p>Differences mostly show up in three places:</p><h3>1) Managing hosts</h3><p>Your MCP will be called by ChatGPT, Claude, and a long tail of other clients, each with its own behavior and update cycle, and the same server can produce very different outcomes across them.</p><p>Manufact has an interesting <a href="https://manufact.com/blog/mcp-evals-coding-agents?utm_source=refactoring">testing write-up</a> that walks through an issue-tracker example where Codex manages to work around server bugs and pass, while Claude fails the same suite because of sneaky defects in the tools. If you only test with your favorite client, it is easy to ship bugs like these without ever seeing them, so make golden prompts on a few real hosts part of normal product QA.</p><h3>2) Updating the protocol</h3><p>In about 18 months, MCP has changed a lot: from HTTP+SSE to Streamable HTTP, then tighter OAuth rules, and then the <a href="https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/">2026-07-28 revision</a>, which the maintainers describe as the largest since launch.</p><p>Just in recent changes, sessions and the initialize handshake are gone, every request is self-contained, and auth has been changed substantially.</p><p>Being MCP a client-server protocol, you need to incorporate changes ASAP, because even when your own server code doesn&#8217;t change, the one in the clients will!</p><h3>3) Distributing to directories</h3><p>Distribution through agents comes with its own process, too.</p><p>ChatGPT app review, the Claude Connectors directory, Cursor Marketplace, Muse and Grok custom connectors all want <strong>slightly different assets</strong> and reviewer access. Each platform has its own packaging, review, and update flow, so you should track the requirements for each destination, keep the endpoint stable, and test the experience after every change.</p><p>Put together, this is closer to keeping a mobile app healthy across OS versions and app stores than to maintaining an API behind an SDK you control. None of this is rocket science, but it&#8217;s a significant (and growing) surface to keep track of.</p><div><hr></div><h2>&#9878;&#65039; Self-host or managed?</h2><p>So, all that said, should you run all of this yourself? It depends on how much of the lifecycle above actually applies to you:</p><ul><li><p><strong>Self-hosting</strong> &#8212; is fine when the MCP is internal (e.g. stdio), used by one team or IDE, the blast radius is low, you are okay owning SDK upgrades when the protocol changes, and you are not listed in marketplaces.</p></li><li><p><strong>Managed</strong> &#8212; a hosted platform pays off when you ship a remote MCP as part of your product across many directories (ChatGPT, Claude, Cursor, ...), you want cross-client test suites against real hosts and checks before each submission, and all of that work sits on your critical path without being what makes your product special.</p></li></ul><p>As a quick plug, the second scenario is what the team at <a href="https://manufact.com?utm_source=refactoring">Manufact</a> is building for. Their MCP cloud lets you connect a repo and deploy, test against clients, monitor usage, all with <a href="https://github.com/mcp-use/mcp-use">mcp-use</a> as open-source framework underneath.</p><p>If you are already hosting your server elsewhere, they also run cross-client tests and publishing-readiness checks without moving the deployment. I love their approach and you can learn more about it <a href="https://docs.manufact.com/dashboard/testing?utm_source=refactoring">here</a>.</p><div><hr></div><h2>&#9989; Checklist for next week</h2><p>If you have been thinking about developing (or improving?) your own MCP server, and want something concrete for the team to begin with, here is a quick checklist:</p><ol><li><p><strong>List the most important agent workflows</strong> &#8212; that should exist (say &lt; 7), and delete the endpoint-dump tools that do not serve them.</p></li><li><p><strong>Rewrite tool names and descriptions</strong> &#8212; as if they were prompts, and put description changes through review.</p></li><li><p><strong>Add actionable errors</strong> &#8212; and idempotent writes to the risky tools.</p></li><li><p><strong>Pick three hosts</strong> &#8212; and run a golden-prompt test of the full experience, UI and permissions included.</p></li><li><p><strong>Assign an owner</strong> &#8212; for MCP health, with a re-check after every major MCP, Claude or ChatGPT release.</p></li><li><p><strong>Decide self-host vs managed</strong> &#8212; for deploy, test, monitor and publish, and write down the reason.</p></li></ol><div><hr></div><h2>&#128172; Join our community!</h2><p>Hey, thank you for making it this far! If you liked this piece, consider subscribing to the full version of Refactoring. Paid members get exclusive access to our <a href="https://refactoring.fm/p/refactoring-community">private community</a> of 1500+ tech leaders, where every month we pick one theme and dig into it together.</p><p>In October the theme is <strong>management in the age of AI</strong>, and on <strong>Monday, October 19</strong> we have our next live Mastermind on <a href="https://community.refactoring.club/c/events/rethinking-the-manager-s-role-october-mastermind">rethinking the manager's role</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Get access to the Community&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://refactoring.fm/subscribe?"><span>Get access to the Community</span></a></p><div><hr></div><p>And that&#8217;s it for today! I wish you a great week.</p><p>Sincerely<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Knowledge capturing, human relationships, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition 229]]></description><link>https://refactoring.fm/p/knowledge-capturing-human-relationships</link><guid isPermaLink="false">https://refactoring.fm/p/knowledge-capturing-human-relationships</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 12 Oct 2026 06:02:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!knmA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="native-audio-embed" data-component-name="AudioPlaceholder" data-attrs="{&quot;label&quot;:null,&quot;mediaUploadId&quot;:&quot;2e5b4f91-1b2c-4af5-bd71-4d6c36c56e46&quot;,&quot;duration&quot;:231.94122,&quot;downloadable&quot;:false,&quot;isEditorNode&quot;:true}"></div><p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right foot.</em></p><p><em>I also publish an original essay every Wednesday. Here is the one from last week in case you missed it:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f5a8b58a-4f4c-4f65-8989-8899723eeed8&quot;,&quot;caption&quot;:&quot;Hey there!&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Do You Need Staging in 2026? &#128666;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-10-07T07:54:38.756Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!q-x4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/do-you-need-staging-in-2026&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:218773833,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:38,&quot;comment_count&quot;:3,&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;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h3>Hyperscale Remediation: Autonomously Secure Your Software Estate</h3><p><em>This week&#8217;s newsletter is brought to you by our friends at Blitzy!</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://blitzy.com/sandbox?utm_medium=paid_media&amp;utm_source=newsletter_refactoring&amp;utm_campaign=proactiveinsight" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!knmA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!knmA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!knmA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!knmA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!knmA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2187063,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://blitzy.com/sandbox?utm_medium=paid_media&amp;utm_source=newsletter_refactoring&amp;utm_campaign=proactiveinsight&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/219391260?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!knmA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!knmA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!knmA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!knmA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bda395-9b52-407c-b109-1c8ee6a347f4_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Security teams don&#8217;t need another list of alerts. They need to know which vulnerabilities are reachable, exposed, and safe to fix. Blitzy understands your entire software estate and, through Proactive Insights, surfaces known and previously undiscovered vulnerabilities in the enterprise codebase and remediates them autonomously. It traces each finding through execution paths, identifies dependencies, and validates remediation. Blitzy then turns prioritized risks into batches of tested pull requests for engineers to review.</p><p>The result: less alert noise, faster remediation, and confidence that each fix is safe. Find risk in context and remediate it securely at enterprise scale.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blitzy.com/sandbox?utm_medium=paid_media&amp;utm_source=newsletter_refactoring&amp;utm_campaign=proactiveinsight&quot;,&quot;text&quot;:&quot;Try on your codebase today&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blitzy.com/sandbox?utm_medium=paid_media&amp;utm_source=newsletter_refactoring&amp;utm_campaign=proactiveinsight"><span>Try on your codebase today</span></a></p><div><hr></div><p></p><h2>&#128218; Knowledge capture compounds engineering quality</h2><p>In April, Rob Zuber and I wrapped up our software factory series with an article on compounding. We asked: how do teams actually get better over time, instead of just shipping more?</p><p>I believe <strong>knowledge capture</strong> is one of the few things in engineering that truly compounds.</p><p>Teams usually capture too little of it. They especially lose decisions, forgetting <em>why</em> systems work the way they do.</p><p>There is basically no excuse today for not getting this right, because capturing and processing information is much cheaper than before. Meeting notes, ADRs, product decisions, can all be captured, summarized, updated, and reused by agents.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oCFj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oCFj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp 424w, https://substackcdn.com/image/fetch/$s_!oCFj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp 848w, https://substackcdn.com/image/fetch/$s_!oCFj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp 1272w, https://substackcdn.com/image/fetch/$s_!oCFj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!oCFj!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp" width="1200" height="429.3956043956044" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp&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;:43778,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/219391260?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp&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_!oCFj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp 424w, https://substackcdn.com/image/fetch/$s_!oCFj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp 848w, https://substackcdn.com/image/fetch/$s_!oCFj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp 1272w, https://substackcdn.com/image/fetch/$s_!oCFj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4df95a-1639-4dac-a63e-522783ed86f6_1456x521.webp 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So docs become an asset that improves the development loop, instead of a tax. And the more context the team captures, the more coherent decisions the AI can make on the next project.</p><p>This is especially important for building the right thing, as opposed to simply the <em>next</em> thing. A codebase becomes easier to steer when future work can see past decisions.</p><p>Read the full article here &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:195748040,&quot;url&quot;:&quot;https://refactoring.fm/p/the-compounding-software-factory&quot;,&quot;publication_id&quot;:64099,&quot;embedding_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;The Compounding Software Factory &#128200;&quot;,&quot;truncated_body_text&quot;:&quot;Hey there, Luca here!&quot;,&quot;date&quot;:&quot;2026-04-29T07:55:12.038Z&quot;,&quot;like_count&quot;:61,&quot;comment_count&quot;:2,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&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;Join 170,000+ engineers and managers getting practical ideas on engineering leadership, technical strategy and high-performing teams. Free, every week.&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;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/the-compounding-software-factory?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web&amp;embedding_publication_id=64099"><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">The Compounding Software Factory &#128200;</div></div><div class="embedded-post-body">Hey there, Luca here&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">6 months ago &#183; 61 likes &#183; 2 comments &#183; Luca Rossi</div></a></div><div><hr></div><h2>&#129309; Good engineering is an exercise in human relationships</h2><p>Two years ago I had Kent Beck on the podcast, and we talked about Extreme Programming and TDD. I rewatched that interview recently to figure out what has changed (and what has not) since then, and a part that stuck with me is when he said <strong>good engineering is an exercise in human relationships</strong>.</p><p>This is easy to miss because you may just treat XP as a bag of techniques: short cycles, tests, pairing, reviews, and so on. But all of these only work if people communicate and give each other feedback.</p><p>This ties in with Kent&#8217;s idea that Agile goes largely <em>against </em>traditional power structures. Waterfall represents a fatal attraction for many teams because it replaces grassroots communication with a plan that gets transmitted down through hierarchy.</p><p>If the human relationships are missing, you can install the practices and still not have the actual engineering.</p><p>You can find the full conversation with Kent here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;be4fc3ae-d066-4f49-8438-764117c25e29&quot;,&quot;caption&quot;:&quot;Today&#8217;s guest is Kent Beck, original signer of the Agile manifesto, creator of Extreme Programming, and all-round programming legend!&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The State of Software Engineering &#128296; &#8212; with Kent Beck&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000},{&quot;id&quot;:24333739,&quot;name&quot;:&quot;Kent Beck&quot;,&quot;bio&quot;:&quot;Programmer, artist, coach coach, singer/guitarist, peripatetic. Learning to be me. Full-time content producer. Mailto:kentlbeck@gmail.com&quot;,&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%2F000da410-0ed6-4a25-80b1-6a46e964ae0b_242x242.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:100,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://newsletter.kentbeck.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://newsletter.kentbeck.com&quot;,&quot;primaryPublicationName&quot;:&quot;Software Design: Tidy First?&quot;,&quot;primaryPublicationId&quot;:256838}],&quot;post_date&quot;:&quot;2024-02-16T06:35:03.454Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24ce821c-95bc-43cb-86a3-b5e8cb2d798b_2696x1516.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/the-state-of-software-engineering&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;bfc2c106-fb41-47db-bd5c-d902be14d264&quot;,&quot;id&quot;:141689319,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:42,&quot;comment_count&quot;:1,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128218; Weekly Readings</h2><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://franciscotrindade.me/blog/the-kids-are-alright">The Kids Are Alright</a></h4><h5>6 min &#8226; by Francisco Trindade</h5><p>Francisco takes on the question of whether we should still hire junior engineers, and his answer is a strong yes. If the job of a senior becomes leading a project by orchestrating agents, the job of a junior will be to lead simpler projects in the same way. And if juniors have nothing meaningful to do on your team, that probably says more about your process than about them. I loved this one.</p><div><hr></div><h4>&#129352; <a href="https://avivbenyosef.com/software-factories-are-a-local-maximum/">Software Factories Are a Local Maximum</a></h4><h5>3 min &#8226; by Aviv Ben-Yosef</h5><p>Aviv makes a great point: agents can make us lose the healthy friction that made us think about <em>why</em> we were building something. I have written a lot about software factories myself, and I 100% agree with him.</p><div><hr></div><h4>&#129353; <a href="https://refactoringenglish.com/excerpts/write-an-effective-design-doc/">How to Write an Effective Software Design Doc</a></h4><h5>15 min &#8226; by Michael Lynch</h5><p>Michael wrote design docs at Google and Microsoft, and this is his full playbook on when a doc is worth it, what belongs in it, and what doesn&#8217;t. I feel this is even more relevant today, since a good design doc is pretty much the context you want to give your agents (or have them help you write anyway).</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[Do You Need Staging in 2026? 🚚]]></title><description><![CDATA[Revisiting my classic 2022 article, after four years, and AI!]]></description><link>https://refactoring.fm/p/do-you-need-staging-in-2026</link><guid isPermaLink="false">https://refactoring.fm/p/do-you-need-staging-in-2026</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 07 Oct 2026 07:54:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!q-x4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there!</p><p>About four years ago I published <a href="https://refactoring.fm/p/do-you-need-staging">Do you really need a Staging environment?</a> &#8212; the first article of mine to really go viral. Front page of Hacker News, more than 2,000 likes on Linkedin, and hundreds of comments across social media.</p><p>Many of such comments were just... angry! In fact, even if the title was framed as a question, I argued that, in most cases, staging environments did more harm than good. And many people didn&#8217;t like that.</p><p>Fast forward to today a lot of things have changed. Teams ship more code, faster, and more often. Does this make staging (and/or equivalent intermediate envs) more or less valuable? I see you saying &#8220;it depends&#8221; &#8212; so it depends on what?</p><p>So today I want to revisit the original thesis, figure out what still holds, vs what needs to change.</p><p>Here is what we will cover:</p><ul><li><p>&#11013;&#65039; <strong>What I argued in 2022</strong> &#8212; a short callback to refresh our memory.</p></li><li><p>&#9989; <strong>What still holds</strong> &#8212; parity, batching, and when shared staging still pays off.</p></li><li><p>&#129302; <strong>What AI changes</strong> &#8212; more throughput, worse env lies, safety net in prod.</p></li><li><p>&#128737;&#65039; <strong>Guardrails for dev</strong> &#8212; guides, gates, and guards upstream of merge.</p></li><li><p>&#128674; <strong>Ephemeral preview envs</strong> &#8212; review on isolated, prod-shaped envs.</p></li><li><p>&#128300; <strong>Observability and controls</strong> &#8212; recover fast when something slips.</p></li><li><p>&#127919; <strong>Final checklist</strong> &#8212; what &#8220;good&#8221; looks like now, without the sermon.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><p><em>Disclaimer: I am thankful to</em> <em><a href="https://upsun.com/upsun.com/?utm_source=refactoring-club&amp;utm_medium=sponsored_newsletter&amp;utm_campaign=202610_GRWTH_AWARE_Do-you-need-staging-in-2026_BLOG_RFCTG">Upsun</a></em> <em>for partnering on this piece and for pushing me to revisit this topic properly in 2026. I am a fan of what they build around Git-native environments, and you should check them out.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://upsun.com/?utm_source=refactoring-club&amp;utm_medium=sponsored_newsletter&amp;utm_campaign=202610_GRWTH_AWARE_Do_you_need_staging_in_2026_BLOG_RFCTG&quot;,&quot;text&quot;:&quot;Learn more about Upsun&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://upsun.com/?utm_source=refactoring-club&amp;utm_medium=sponsored_newsletter&amp;utm_campaign=202610_GRWTH_AWARE_Do_you_need_staging_in_2026_BLOG_RFCTG"><span>Learn more about Upsun</span></a></p><p><em>However, as always I will only write my honest opinion on the practices and tools covered, Upsun included.</em></p><div><hr></div><h2>&#11013;&#65039; What I argued in 2022 (briefly)</h2><p>The original piece tried to get clear about when a shared staging / pre-prod environment helps, vs when it mostly adds cost and delay.</p><p>The two problems I saw (and still see) the most often are:</p><ol><li><p><strong>Staging is often unreliable</strong> &#8212; because keeping it at parity with prod (i.e. data and infra) is hard and expensive. So most teams cut corners: a fraction of the database, different instance sizes, and just some of the services.</p></li><li><p><strong>It makes releases many times slower</strong> &#8212; an extra release level means waiting for the env, batching several features &#8220;because we are releasing anyway,&#8221; deploys that become morning-only (or only &#8220;at the start of the week&#8221;), and the classic &#8220;<em>whose change broke staging?&#8221;</em> moments.</p></li></ol><p>The way out already existed in 2022: small diffs, strong automated tests, feature flags, canary / progressive delivery, and real investment in observability in production. This way problems in prod are smaller, and you are fast at catching them anyway, even without staging.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q-x4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q-x4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q-x4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q-x4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q-x4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!q-x4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg" width="1456" height="974" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:974,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115664,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/218773833?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.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_!q-x4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q-x4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q-x4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q-x4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aff5793-1350-4009-b5a1-192529ad0f15_1686x1128.jpeg 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The original pic from 2022 &#8212; still pretty much true!</figcaption></figure></div><p>On top of this, bonus points if you setup two of my favorite things:</p><ul><li><p><strong>Preview links for QA</strong> &#8212; envs that spawn on the fly for features that need dedicated product review.</p></li><li><p><strong>Remote dev environments</strong> &#8212; that live in the cloud and can inherently be closer to prod than a developer laptop.</p></li></ul><p>This is the gist of what I wrote back then &#8212; if you want the longer version (including when staging still earns its keep), here is the original:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d54cef76-8407-4185-9cb0-493b0eae031e&quot;,&quot;caption&quot;:&quot;Most companies I know use staging or pre-production environments to test recent changes before they are released to real users.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Do you really need a Staging environment? &#128674;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2022-05-19T05:35:39.638Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fde9e275a-7d23-46d6-b628-01322a4b881d_1686x1128.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/do-you-need-staging&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:55432182,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:55,&quot;comment_count&quot;:7,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#9989; What still holds</h2>
      <p>
          <a href="https://refactoring.fm/p/do-you-need-staging-in-2026">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[High agency, personal growth, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #228]]></description><link>https://refactoring.fm/p/high-agency-personal-growth-and-weekly</link><guid isPermaLink="false">https://refactoring.fm/p/high-agency-personal-growth-and-weekly</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 05 Oct 2026 10:00:57 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><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right foot.</em></p><p><em>I also publish an original essay every Wednesday. Here is the one from last week in case you missed it:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b98bd593-b60a-4ddf-b0ad-6cf234172367&quot;,&quot;caption&quot;:&quot;Hey, Luca here! Welcome to a new &#128274; weekly essay &#128274; from Refactoring.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Run Good Agents in Production &#128678;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-09-30T10:03:51.439Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14c008a1-9712-4759-ab77-8fbe367b4948_1762x1166.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/how-to-run-good-agents-in-production&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:218024608,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:36,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128421;&#65039; <a href="https://www.linkedin.com/events/7508580324667465728/?viewAsMember=true">Coding agents need more than a fast loop</a></h2><p><em>This week&#8217;s newsletter is brought to you by our friends at <a href="https://www.linkedin.com/events/7508580324667465728/?viewAsMember=true">Blitzy</a>!</em></p><p>Coding agents have sped up individual tasks, but they haven&#8217;t solved the coordination, validation, and handoffs that determine how quickly software ships, especially the enterprise one!</p><p>Tomorrow join <a href="https://www.linkedin.com/in/sid-pardeshi">Sid</a>, CTO and co-founder of Blitzy, for a live session on what changes when a system can hold context across an entire codebase&#8212;not just a single file or function.</p><p>He&#8217;ll walk through a real project in Blitzy, covering reverse engineering, tech spec generation, the Agent Action Plan, code generation, and PR Review, including where human review gates the process. There will also be a Q&amp;A at the end &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.linkedin.com/events/7508580324667465728/?viewAsMember=true&quot;,&quot;text&quot;:&quot;Save your seat!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.linkedin.com/events/7508580324667465728/?viewAsMember=true"><span>Save your seat!</span></a></p><div><hr></div><h2>&#128640; Create high-agency engineers</h2><p>Out of the various interviews / case studies we did last year, one of those that aged better is the one with Greg from Graphite.</p><p>I think it&#8217;s because we talked very little about tech, and more about values and culture. In particular, Graphite is obsessed with building a team where engineers have high agency.</p><p>What does a high-agency engineer look like? For Greg, it&#8217;s someone who owns problems end-to-end, which allows for:</p><ul><li><p><strong>More productivity</strong> &#8212; less back-and-forth, less waiting, less &#8220;that&#8217;s not my job&#8221;.</p></li><li><p><strong>More fulfillment</strong> &#8212; people who have real impact stay engaged, grow faster, and stick around longer.</p></li></ul><p>High agency, though, it&#8217;s not (only) a personal trait &#8212; it needs to be <em>enabled</em> by your team environment. For Greg, at a team level, agency comes from three things:</p><ol><li><p><strong>Purpose</strong> &#8212; a clear vision of where you are going and why it matters.</p></li><li><p><strong>Permission</strong> &#8212; freedom to go after big things, make decisions, and occasionally get things wrong.</p></li><li><p><strong>Simplicity</strong> &#8212; cognitive load low enough that ownership feels like a superpower, not a burden.</p></li></ol><p>To make this happen, for example, Graphite is extremely light on product management: a couple of PMs for 30+ engineers. Engineers need to fill the gaps: talk to stakeholders, prototype, dogfood, and push work forward without waiting to be unblocked.</p><p>To be honest, they also have an <em>unfair</em> advantage: they build a dev tool, so their engineers <em>are</em> their users. Which means product intuition comes for free.</p><p>But for everyone else, the principle holds: get engineers closer to customers. The difference is you have to invest more intentionally about it:</p><ul><li><p><strong>Bring engineers to customers</strong> &#8212; sales calls, user interviews, support escalations. First-hand experience and empathy beats summaries.</p></li><li><p><strong>Make context accessible</strong> &#8212; record calls, share clips, pipe tickets into Slack.</p></li><li><p><strong>Dogfood relentlessly</strong> &#8212; even if the product is not &#8220;for&#8221; engineers, find ways to make them use it.</p></li></ul><p>I wrote a full case study about how Graphite ships &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:180384931,&quot;url&quot;:&quot;https://refactoring.fm/p/how-graphite-ships&quot;,&quot;publication_id&quot;:64099,&quot;embedding_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;How Graphite Ships &#128674;&quot;,&quot;truncated_body_text&quot;:&quot;It&#8217;s a weird time for engineering teams.&quot;,&quot;date&quot;:&quot;2025-12-03T08:02:10.246Z&quot;,&quot;like_count&quot;:19,&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;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;Join 170,000+ engineers and managers getting practical ideas on engineering leadership, technical strategy and high-performing teams. Free, every week.&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;subscriber&quot;:null}},{&quot;id&quot;:7119536,&quot;name&quot;:&quot;Greg Foster&quot;,&quot;handle&quot;:&quot;gmfoster&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2eb87cb-299b-478a-8378-d1b6de848cf0_709x709.png&quot;,&quot;bio&quot;:&quot;Cofounder of graphite.dev - building the future of code review&quot;,&quot;profile_set_up_at&quot;:&quot;2022-07-28T12:10:27.981Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-06-11T22:49:23.940Z&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;subscriber&quot;:null},&quot;primaryPublicationId&quot;:1019304,&quot;primaryPublicationName&quot;:&quot;Small Diffs - by Greg Foster&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://smalldiffs.gmfoster.com&quot;,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://smalldiffs.gmfoster.com/subscribe?&quot;}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/how-graphite-ships?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web&amp;embedding_publication_id=64099"><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">How Graphite Ships &#128674;</div></div><div class="embedded-post-body">It&#8217;s a weird time for engineering teams&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">a year ago &#183; 19 likes &#183; Luca Rossi and Greg Foster</div></a></div><div><hr></div><h2>&#129517; Growth trajectory &gt;&gt; AI fluency</h2><p>Greg&#8217;s story made me think about my interview with <strong>Austen McDonald</strong>, former hiring committee chair at Meta, and author of <em>Mastering Behavioral Interviews</em>, where we discussed how AI is reshaping how engineers get assessed.</p><p>Austen recommends evaluating AI skills in <em>both</em> technical and behavioral rounds, but the questions should be different. In behavioral interviews, stories are king. So you may ask something like <em>&#8220;Tell me about a time you used AI and it didn&#8217;t work out.&#8221;</em>, instead of abstract prompts like <em>&#8220;How do you think about AI?&#8221;</em></p><p>But the strongest predictor is not current AI usage at all. It is <strong>growth signal</strong>: is this person staying on top of industry trends, running side projects, adapting when the ground moves? This has always been important, but now more than ever.</p><blockquote><p><em>&#8220;The most important thing about this person is not how they use AI right now, but how they are going to be adapting to using AI as the landscape changes.&#8221;</em></p></blockquote><p>Austen particularly focuses on <strong>ownership</strong>. As AI handles more of the stack, &#8220;full stack&#8221; expands toward more areas of the business: customers, go-to-market. Does the candidate reach for more end-to-end ownership? Are they willing to do so?</p><p>You can find the full conversation with Austen here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d553be7c-1aab-41d1-a170-d2e357f642d4&quot;,&quot;caption&quot;:&quot;Today&#8217;s sponsor is Intent by Augment.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Master Behavioral Interviews &#127908; &#8212; with Austen McDonald&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-02-20T08:02:15.756Z&quot;,&quot;cover_image&quot;:&quot;https://substack-video.s3.amazonaws.com/video_upload/post/188513236/e843a4d8-46f5-4636-8662-eedc0f84a672/transcoded-03602.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/how-to-master-behavioral-interviews-e75&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;e843a4d8-46f5-4636-8662-eedc0f84a672&quot;,&quot;id&quot;:188513236,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:24,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128218; Weekly Readings</h2><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://blog.codinghorror.com/if-we-do-not-stop-to-help-each-other-what-do-we-become/">If We Do Not Stop to Help Each Other, What Do We Become?</a></h4><h5>3 min &#8226; by Jeff Atwood</h5><p>Jeff shares a great message from a developer who once got through a dangerous deployment because strangers on Stack Overflow chose to help him. An LLM could have provided the same (or a better?!) answer, but not the feeling that somebody cared. We need that reminder!</p><div><hr></div><h4>&#129352; <a href="https://www.aicelabs.com/articles/dishwasher-mode-for-ai-tasks">Dishwasher Mode for AI Tasks</a></h4><h5>1 min &#8226; by Clemens Adolphs</h5><p>A dishwasher is slower than washing plates by hand, but we don&#8217;t care, because it still frees up our time. Clemens uses the same frame for AI: give it small, annoying tasks off the critical path, then care more about reliable completion than raw speed. I liked this a lot.</p><div><hr></div><h4>&#129353; <a href="https://www.thoughtworks.com/insights/topic/sensible-defaults">The Sensible Defaults Playbook</a></h4><h5>2 min &#8226; by Thoughtworks</h5><p>Thoughtworks shares its collection of good defaults. Their approach is to have defaults remove recurring friction, but without becoming dogma. Start with practices that usually work, adapt them to the context, and review them as the environment changes.</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[Refactoring Street Fighter With AI 🕹️ — with Adam Tornhill]]></title><description><![CDATA[Watch now (54 mins) | Refactoring Podcast &#8226; Episode 73]]></description><link>https://refactoring.fm/p/refactoring-street-fighter-with-ai</link><guid isPermaLink="false">https://refactoring.fm/p/refactoring-street-fighter-with-ai</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 02 Oct 2026 07:02:02 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/218141135/6513910531f4a444ba4f8c245e49db8b.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-stJEJ-Ug4tM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;stJEJ-Ug4tM&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/stJEJ-Ug4tM?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><blockquote><p><em>Today&#8217;s episode is brought to you by: <strong><a href="https://ntn.so/refactoring">Notion</a></strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://ntn.so/refactoring" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jgfe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 424w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 848w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1272w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png" width="312" height="108.42" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:278,&quot;width&quot;:800,&quot;resizeWidth&quot;:312,&quot;bytes&quot;:31046,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://ntn.so/refactoring&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/209980935?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Jgfe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 424w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 848w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1272w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><em>Learn more about<strong> Notion&#8217;s Developer Platform </strong>today at<strong> <a href="https://ntn.so/refactoring">https://ntn.so/refactoring</a></strong></em></p></blockquote><div><hr></div><p>Today's guest is <strong><a href="https://www.linkedin.com/in/adam-tornhill-71759b48/">Adam Tornhill</a></strong>, founder of CodeScene and author of Your Code as a Crime Scene.</p><p>With Adam, we talked about how his team <strong>refactored the whole Street Fighter 3 codebase</strong>, which is more than 300K lines of code, in just a few days and spending a few thousand dollars in tokens, and measured how that led to better and cheaper AI development of new features.</p><p>And then we discussed <strong>how the CodeScene team does agentic development</strong>, what the process looks like, what the bottlenecks are, and what are the crucial parts that Adam believes we still need to do as humans. </p><p>Show notes:</p><ul><li><p><a href="https://codescene.com/blog/case-study-refactoring-at-scale-with-agents">The Street Fighter case study</a></p></li><li><p><a href="https://adamtornhill.substack.com/p/controlling-the-uncertainty-machine">Controlling the uncertainty machine: do you still need to read the code?</a></p></li><li><p><a href="https://codescene.com/blog/making-legacy-code-ai-ready-benchmarks-on-agentic-refactoring">Making legacy code AI-ready</a></p></li></ul><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 5-minute, handcrafted takeaways 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>&#128377;&#65039; <strong>Refactoring Street Fighter with AI agents</strong></p></li><li><p>&#128214; <strong>The refactoring playbook</strong></p></li><li><p>&#129514; <strong>Testing, docs, and the new fundamentals</strong></p></li><li><p>&#129302; <strong>CodeScene&#8217;s agentic development process</strong></p></li><li><p>&#128302; <strong>Bottlenecks and the future of the developer role</strong></p></li></ol><p>Let&#8217;s dive in &#128071;</p><div><hr></div><h2>1) &#128377;&#65039; Refactoring Street Fighter with AI agents</h2><p>Adam&#8217;s team at CodeScene, in collaboration with researcher Marcus Borg, set out to explore large-scale refactoring using AI agents. They needed a code base that was non-trivial, legacy, and universally understandable, so they picked a decompiled version of Street Fighter 3, a 25-year-old game with 300,000 lines of C code.</p><p>When they first analyzed the code base with CodeScene&#8217;s own metrics, it scored a 5.4 on a 10-point scale, roughly the industry average for enterprise code and very far from what Adam calls &#8220;AI-optimal code&#8221; (9.5 or higher). The team had two goals: uplift the code health as much as possible, and preserve the existing behavior of the game.</p><blockquote><p><em><strong>&#8220;I&#8217;ve never ever seen anything close to this before. A rewrite at that scale would have been a 12-to-18-month project. And now that can be automated for a fraction of the cost at a fraction of the time.&#8221;</strong></em></p></blockquote><p>Street Fighter turned out to be a particularly good target because the game already had a clever test approach: computing the hash of each rendered frame and comparing them. This gave the agents a reliable way to verify that refactoring didn&#8217;t break anything. </p><p>The preparation phase took about two weeks (as a side project), with the team exploring different models and patterns. The actual uplift then took just a few days and cost roughly $4,000 in API tokens. They primarily used Claude Code with Opus, because while GPT models were competent at refactoring, they weren&#8217;t as good at documenting and extending the playbook.</p><div><hr></div><h2>2) &#128214; The refactoring playbook</h2>
      <p>
          <a href="https://refactoring.fm/p/refactoring-street-fighter-with-ai">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Run Good Agents in Production 🚦]]></title><description><![CDATA[The third part of our series about orchestration and governance]]></description><link>https://refactoring.fm/p/how-to-run-good-agents-in-production</link><guid isPermaLink="false">https://refactoring.fm/p/how-to-run-good-agents-in-production</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 30 Sep 2026 10:03:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/14c008a1-9712-4759-ab77-8fbe367b4948_1762x1166.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here! Welcome to a new </em>&#128274;<em> <strong>weekly essay</strong></em> &#128274;<em> from Refactoring.</em></p><p><em>Every week I <a href="https://refactoring.fm/s/essays?sort=top">write an article</a> to 170K+ engineers about how to make good software together. To get access to all our articles, resources, and our <a href="https://refactoring.fm/p/refactoring-community">private community</a>, subscribe to the <a href="http://refactoring.fm/subscribe?">full version</a>. </em></p><div><hr></div><p>Lately, I have become more and more interested in how teams are using AI inside real production workflows.</p><p>Sure, your Claude skills are cool, and so is your AGENTS.md, but I want to see how this tech graduates into stuff we run on our servers, reliably, all the time, and creating value.</p><p>This is also not the first time I have written about this:</p><ul><li><p>In May, I published <a href="https://refactoring.fm/p/how-to-orchestrate-ai-workflows">How to Orchestrate AI Workflows</a>, which is a primer for moving from AI loops to more structured orchestration.</p></li><li><p>Earlier this month I published <a href="https://refactoring.fm/p/getting-started-with-ai-governance">Getting Started with AI Governance</a>, to talk about security, control, and how &#8220;<em>if you want the car to go fast, you need brakes!</em>&#8221;</p></li></ul><p>So today I want to go deeper into what it means to <strong>create good AI workflows at scale</strong>, based on conversations I had with the people who are doing this for real. I took a lot from my recent <a href="https://refactoring.fm/p/the-best-ideas-from-ldx3-and-productlab">chat with Jan</a>, from friends I met during recent travels, and especially from <a href="https://fr.linkedin.com/in/ludovic-dehon">Ludovic</a> and the guys at <a href="https://kestra.io/two-zero">Kestra</a>, that I am looping in again after the huge success of the first piece we wrote together!</p><p>Here is the agenda:</p><ul><li><p>&#128065;&#65039; <strong>Observability</strong> &#8212; what to watch on agentic runs, plus a practical checklist.</p></li><li><p>&#128737;&#65039; <strong>Boundaries</strong> &#8212; how keep sensitive data where it lives, and separating workers from orchestration.</p></li><li><p>&#129489;&#8205;&#9992;&#65039; <strong>Human in the loop</strong> &#8212; when to put a gate, and how to resume without replaying an hour of work.</p></li><li><p>&#128268; <strong>How to get started</strong> &#8212; prefer governed flows as tools for the agents you already trust.</p></li><li><p>&#128218; <strong>Resources</strong> &#8212; a few places to go deeper on the practices above.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><p><em>Disclaimer: I am thankful to <a href="https://fandf.co/4Axy8bX">Kestra</a> for partnering on this and providing ideas and insights about the orchestration industry. I am a fan of what they build and you should check it out.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://fandf.co/4Axy8bX&quot;,&quot;text&quot;:&quot;Learn more about Kestra&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://fandf.co/4Axy8bX"><span>Learn more about Kestra</span></a></p><p><em>However, as always, I will only write my honest opinion on the practices and tools covered, Kestra included.</em></p><div><hr></div><h2>&#128065;&#65039; Observability</h2><p>A surprisingly high number of the teams I spoke with built some AI observability tools in-house.</p><p>To me this feels like when, around 2022, I ran the first surveys about what tools teams used to measure engineering metrics, and about ~50% of respondents had patched something together themselves, e.g. pulling numbers from Github and putting them on Grafana.</p><p>Likewise, today many teams are logging basic info themselves. For every run, this is typically token spend and the final answer of the agent. This is good! You get your hands dirty, learn what you really need, and wrap your head around the idea of measuring this stuff.</p><p>However, just like with engineering metrics, these setups fail as soon as you need to drill down into specific steps of the agent runs. Which, as long as your runs are <em>short</em>, might not be a big deal, but as soon as you have a long (and expensive!) recurring job failing halfway through, you may want more control over what happened and why.</p><p>In my experience, good observability for such workflows means you can reliably get the following information, ideally from the same system:</p><ol><li><p><strong>Intermediate step outputs</strong> &#8212; not only the final blob. Each meaningful step should leave something inspectable: a fetched record, a classification, a draft that was about to be sent.</p></li><li><p><strong>Tokens and cost per run</strong> &#8212; these are the basics everyone measures, and for good reason. This should be ideally broken down per step / model / tool.</p></li><li><p><strong>Tool and MCP calls</strong> &#8212; which servers, which tools, with what inputs and outputs.</p></li><li><p><strong>Who or what triggered the run</strong> &#8212; a human (manual trigger), a schedule, a webhook, or another agent session. Origin and session tags matter when you audit later.</p></li><li><p><strong>State at failure</strong> &#8212; which step failed, what was already committed, what is safe to retry.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MOAM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MOAM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png 424w, https://substackcdn.com/image/fetch/$s_!MOAM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png 848w, https://substackcdn.com/image/fetch/$s_!MOAM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png 1272w, https://substackcdn.com/image/fetch/$s_!MOAM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!MOAM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png" width="1456" height="903" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:903,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152042,&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/218024608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.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_!MOAM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png 424w, https://substackcdn.com/image/fetch/$s_!MOAM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png 848w, https://substackcdn.com/image/fetch/$s_!MOAM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png 1272w, https://substackcdn.com/image/fetch/$s_!MOAM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F193a4e4d-4cb5-46cc-a47d-49ff32670af5_1722x1068.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The five main things you want to observe in an AI workflow</figcaption></figure></div><p>If these still feel a bit abstract, here are a few questions you can ask yourself (or your team!) about your setup:</p>
      <p>
          <a href="https://refactoring.fm/p/how-to-run-good-agents-in-production">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Outer loop, gaming tests, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #227]]></description><link>https://refactoring.fm/p/outer-loop-gaming-tests-and-weekly</link><guid isPermaLink="false">https://refactoring.fm/p/outer-loop-gaming-tests-and-weekly</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 28 Sep 2026 08:23:11 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><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right foot.</em></p><p><em>I also publish an original essay every Wednesday. Here is the one from last week in case you missed it:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9277a4c4-003c-40bb-860e-fe995b97cd54&quot;,&quot;caption&quot;:&quot;Hey, Luca here! Welcome to a &#128274; weekly essay &#128274; from Refactoring.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Best Ideas from LDX3 and ProductLab &#127942;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-09-23T07:02:44.672Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!vjuo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/the-best-ideas-from-ldx3-and-productlab&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:216741812,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:36,&quot;comment_count&quot;:2,&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;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128218; <a href="https://fandf.co/3TnGYZ1">Master production-grade orchestration, for free</a>!</h2><p><em>This week&#8217;s newsletter is brought to you by our friends at <a href="https://fandf.co/3TnGYZ1">Kestra</a>!</em></p><p>A few months ago we published an article about <a href="https://refactoring.fm/p/how-to-orchestrate-ai-workflows?utm_source=publication-search">how to orchestrate AI workflows</a>, together with the team at Kestra, an awesome open source project used by the teams at Apple, JPMorgan, and more.</p><p>Today I am happy to help them spread the word about the <a href="https://fandf.co/3TnGYZ1">Kestra Academ</a>y, where you can find self-paced courses on infrastructure automation, AI workflows, and standardizing orchestration across your engineering org.</p><p>In the academy, you can learn how to govern complex workflows and start running production pipelines the same week.</p><p>You should check it out! &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://fandf.co/3TnGYZ1&quot;,&quot;text&quot;:&quot;Learn how to run orchestration&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://fandf.co/3TnGYZ1"><span>Learn how to run orchestration</span></a></p><div><hr></div><h2>&#127937; Faster coding vs faster delivery</h2><p>Most AI coding tools optimize the <strong>inner loop</strong>: you describe a feature, watch the agent write the code, and get something working a few minutes later.</p><p>This is where AI has delivered the most visible improvements, but it is just a small part of how software gets shipped. There is an <strong>outer loop</strong> too: deciding what is worth doing, shaping and reviewing the solution, releasing it, and learning from production.</p><p>If you don&#8217;t improve both, the constraints move elsewhere:</p><ul><li><p><strong>Reviews</strong> &#8212; agents create more PRs than people can reasonably inspect.</p></li><li><p><strong>Shaping product</strong> &#8212; the team can build faster than it can decide what good work looks like.</p></li><li><p><strong>Customer signal</strong> &#8212; shipping the wrong thing faster is still waste.</p></li></ul><p>At a small scale, this is the same <a href="https://refactoring.fm/p/acceleration-whiplash">acceleration whiplash</a> I have experienced with <a href="https://tolaria.md/">Tolaria</a>. Starting work is cheap, but my ability to review it, decide what is good enough, and create the next piece of work does not scale at the same rate.</p><p>So the goal should be end-to-end throughput, which requires a workflow<em> </em>that encompasses both the inner and the outer loop.</p><p>I wrote a full case study about how the guys at TRM are doing this &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;39d4fe82-118c-4a79-9cbb-c0160a7aaa24&quot;,&quot;caption&quot;:&quot;Hey there, Luca here!&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A Case Study in AI Product Development &#128300;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-07-29T07:31:16.597Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!sCNl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdf5bd1-2bce-4b88-ae47-2e5e43c373b9_1274x1154.png&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/a-case-study-in-ai-product-development&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:208835589,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:56,&quot;comment_count&quot;:3,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#129514; Agents will game your tests</h2><p>When I spoke with <strong>Anush Elangovan</strong>, VP of AI Software at AMD, he described a funnel where creativity is allowed to run wild at the top, but progressively more human judgment is needed as code moves toward production.</p><p>He also shared an entertaining story about building <a href="https://rocm.blogs.amd.com/software-tools-optimization/spur-gpu-job/README.html">Spur</a>, an AI-native job scheduler. The agents writing the code were so &#8220;smart&#8221; that they found a shortcut: instead of actually running unit tests on hardware, they simulated the hardware and reported success.</p><blockquote><p><em>&#8220;The agents were so smart that they would simulate the hardware and pass the unit test and say &#8216;yes, success.&#8217; We had to say no, no, no &#8212; you never simulate the hardware. You have to actually run the test on hardware before you can promote a PR.&#8221;</em></p></blockquote><p>That forced the team to build a <em>superset</em> of the guardrails they previously had for humans. Test harnesses now need to account for <strong>adversarial agent behavior</strong>. The result, Anush said, is a quality system roughly 10x more comprehensive than what was needed when humans were the only contributors.</p><p>I have found this to be a useful posture: assume agents will optimize for passing the tests, not necessarily respecting their <em>spirit,</em> and design accordingly.</p><p>You can find the full conversation with Anush here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;236e79ed-af40-4e1f-b222-1553547e8c71&quot;,&quot;caption&quot;:&quot;Listen now:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Speed is the Only Moat &#127950;&#65039; &#8212; with Anush Elangovan&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-07-17T07:00:22.613Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/w2F-u0kJllA&quot;,&quot;cover_image_alt&quot;:null,&quot;cover_image_crop&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/speed-is-the-only-moat-with-anush&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;18e4722b-3fa6-492d-a5a0-5383a03f33da&quot;,&quot;id&quot;:206247034,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:24,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128218; Weekly Readings</h2><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://skamille.medium.com/the-managers-path-in-the-age-of-ai-279cb6611d66">The Manager&#8217;s Path in the Age of AI</a></h4><h5>13 min &#8226; by Camille Fournier</h5><p>Camille asks what still belongs to managers when AI raises individual output and eats the small day-to-day interactions that build trust and rapport across an org. This is the written version of the talk I heard at LDX3. I loved 100% of it and it gave me a lot to think about.</p><div><hr></div><h4>&#129352; <a href="https://theengineeringmanager.substack.com/p/code-yellow-code-red">Code Yellow, Code Red</a></h4><h5>11 min &#8226; by James Stanier</h5><p>James walks through declaring a Code Yellow after months of instability eroded some customer trust. Running it well means clear communication, defined goals, and company-wide support to fix problems, without blame.</p><div><hr></div><h4>&#129353; <a href="https://lethain.com/software-factory-experiment/">Trying the Software Factory Pattern</a></h4><h5>3 min &#8226; by Will Larson</h5><p>Will is trying a &#8220;software factory&#8221; loop: agents audit the project&#8217;s goals and metrics, keep track of state on Linear, work on the non-blocked tasks, and re-check when the description goes stale. This was short and practical, and a good read.</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;Run a better engineering team&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://refactoring.fm/subscribe?"><span>Run a better engineering team</span></a></p><p>See you next week!<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Community wisdom: developer productivity, AI wins, and next events! 💬]]></title><description><![CDATA[Our monthly edition focused on our community updates!]]></description><link>https://refactoring.fm/p/community-wisdom-developer-productivity</link><guid isPermaLink="false">https://refactoring.fm/p/community-wisdom-developer-productivity</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 25 Sep 2026 12:00:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HT18!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there! Following a very successful <a href="https://refactoring.fm/p/community-updates-taking-time-off">first edition</a>, I am publishing a new round of updates from our community, which may now turn into a monthly routine!</p><p>The <strong><a href="https://refactoring.fm/p/refactoring-community">Refactoring Community</a></strong> hosts a ton of great conversations in threads, but, most of all, every month we run two live sessions, hosted by our awesome Community Lead <a href="https://www.seckington.com/">Melinda Seckington</a>, and always joined by yours truly. These sessions are:</p><ul><li><p><strong>Mastermind</strong> &#8212; leaders bring a real problem and we work on it.</p></li><li><p><strong>AI Club</strong> &#8212; people show what they learned about AI that month, including the parts that did not work.</p></li></ul><p>This monthly recap makes sure the good stuff doesn&#8217;t stay confined to Zoom. So here is the agenda for today:</p><ul><li><p>&#129504; <strong>How to think about productivity now</strong> &#8212; what we discussed in the September Mastermind.</p></li><li><p>&#129668; <strong>September AI Club</strong> &#8212; terminal personal OSes, picking the right models, and agents that live in the cloud.</p></li><li><p>&#128197; <strong>What&#8217;s next</strong> &#8212; AI Club on 2 Oct, Mastermind on 19 Oct.</p></li><li><p>&#128172; <strong>How this works</strong> &#8212; and how to join.</p></li></ul><p>Let&#8217;s dive in!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HT18!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HT18!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png 424w, https://substackcdn.com/image/fetch/$s_!HT18!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png 848w, https://substackcdn.com/image/fetch/$s_!HT18!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!HT18!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HT18!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png" width="1456" height="834" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:834,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3096884,&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/212989588?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.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_!HT18!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png 424w, https://substackcdn.com/image/fetch/$s_!HT18!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png 848w, https://substackcdn.com/image/fetch/$s_!HT18!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!HT18!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1487b493-0bd5-4569-99e1-991693da9261_2396x1372.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A screenshot from our AI Club! &#129668;</figcaption></figure></div><div><hr></div><h2>&#129504; Redefining developer productivity</h2><p>In this month&#8217;s Mastermind, we talked about what &#8220;good&#8221; looks like when most of the volume metrics (PRs, commits, lines of code) feel worse as proxies than they used to. Btw, have they ever been good? Probably not, but they are arguably worse now because of AI.</p><p>One of the biggest points of discussion was the tension between:</p><ul><li><p><strong>Investing in automation</strong> &#8212; making the &#8220;harness&#8221; and overall pipeline better, versus</p></li><li><p><strong>Just shipping things</strong> &#8212; with familiar human-in-the-loop tools, especially under a short deadline.</p></li></ul><p>Why is there a tension? Because with engineers increasingly acting like <strong>engineering managers of agents</strong>, there is often higher leverage in using their time to improve the system, rather than closing the ticket in front of them. But it&#8217;s still tricky to balance the two</p><p>Personally, I have found that, before digging into a task, it&#8217;s worth asking yourself whether this is a <em>system problem</em>, worth fixing for posterity once and for all, or just an immediate, one-off ask.</p><p>My rule of thumb is: as soon as you find yourself <strong>doing something twice</strong>, make sure you don&#8217;t do it three times.</p><p>We also talked about <strong>what to measure instead</strong>. Some people pointed at the team actually delivering on their cycle (or Sprint) goal, while others discussed the amount of features shipped, or cycle time. I think a very good leading signal is simply to directly ask engineers how they feel about work, and where they felt they were wasting time that week. Good conversations always deliver an incredible amount of signal.</p><p>There is also a ton of work that is hard to measure, aka <strong>invisible work</strong>. Things like mentoring, &#8220;insurance&#8221; maintenance, and the informal chats that keep teams moving do not show up well under hard metrics, and they get squeezed when people optimize for numbers. It&#8217;s also unclear how to score that work cleanly. No one had an answer here!</p><p>As always, you will find the full writeup in the <a href="https://community.refactoring.club/c/mastermind">Mastermind</a> space (if you are in the community).</p><div><hr></div><h2>&#129668; September AI Club</h2><p>In this month&#8217;s AI Club, four people shared their AI wins for five minutes each, then we did the quickfire round again. Melinda wrote it up properly <a href="https://community.refactoring.club/c/ai-club/notes-from-the-september-ai-club">here</a>. I liked a few threads in particular:</p><ul><li><p><strong>AI as an accountability partner</strong> &#8212; Kishan has built something like a personal OS that mostly runs from the terminal: daily check-ins that read journals and plans, a weekly retro on what energized / drained him, and a folder structure so ideas (notes, photos, voice memos) get filed without conscious sorting. He also shifts models by task (heavier for planning, lighter for execution) and periodically audits the core memory file itself, because instructions written in one place do not always get pulled into the right context.</p></li><li><p><strong>The same prompt, very different outputs</strong> &#8212; Julie ran the same reflection prompt across a chat interface and a coding CLI on the newest model family. The chat version came back quite readable, while CLI version needed a lot of correction. Several people in the room had noticed the same split: this generation of models can be stronger at one-shot coding and weaker at other things, like&#8230; clear writing! So, do not assume &#8220;newer&#8221; means better across the board.</p></li><li><p><strong>Moving the operation to the cloud</strong> &#8212; I shared my own migration of agents off the Mac Mini onto cloud machines (after a power outage and too many agents fighting over one box). Coding stays local on a kanban, while everything upstream moved. I wrote the longer version in <a href="https://refactoring.fm/p/my-agents-are-moving-to-the-cloud">My agents are moving to the cloud</a>.</p></li><li><p><strong>Working solo on something that cannot fail</strong> &#8212; Andrea is deep in a high-stakes embedded / security project, mostly alone after the rest of the team went on leave. He walked us through how he set up two tiers of docs: customer-facing ones, reviewed manually line by line, and internal brainstorming ones, mostly for AI consumption and not reviewed directly. Autonomy helps a lot, but every now and then it does funny things, like fabricating a citation that doesn&#8217;t exist, so he keeps the high-stakes parts of the ops on a tight leash.</p></li></ul><p>All in all, a very practical session. Less about shiny demos, more about how people actually run their week with these tools.</p><div><hr></div><h2>&#128197; What&#8217;s next</h2><p>Both the Mastermind and the AI Club, like all community activities, are for paid members of Refactoring. Here are the next editions &#128071; RSVP on the event page to help us size the room:</p><ul><li><p><strong>AI Club</strong> &#8226; <strong>Fri 2 Oct, 14:00 CEST</strong> &#8212; five-minute shares, questions, and the one-sentence fireside round at the end.</p></li><li><p><strong>Mastermind</strong> &#8226; <strong>Mon 19 Oct, 18:00 CEST</strong> &#8212; third Monday of the month, as usual!</p></li></ul><p>Bring your questions! These sessions work because of the members, not because someone gives a talk.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j6ch!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j6ch!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png 424w, https://substackcdn.com/image/fetch/$s_!j6ch!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png 848w, https://substackcdn.com/image/fetch/$s_!j6ch!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png 1272w, https://substackcdn.com/image/fetch/$s_!j6ch!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!j6ch!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png" width="1456" height="548" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:548,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:889735,&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/212989588?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.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_!j6ch!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png 424w, https://substackcdn.com/image/fetch/$s_!j6ch!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png 848w, https://substackcdn.com/image/fetch/$s_!j6ch!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png 1272w, https://substackcdn.com/image/fetch/$s_!j6ch!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c4bcd8-e085-4515-8fdd-ba188e936f6e_2094x788.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>&#128172; How this works</h2><p>The <a href="https://community.refactoring.club/">Refactoring Community</a> is a private space for paid subscribers of Refactoring: it hosts async threads, Q&amp;A, and monthly live rooms like these.</p><p>It is home to more than 1500 engineers and managers, and it&#8217;s my favorite place on the internet!</p><p>To join it, subscribe to the full version of Refactoring! </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Join the full Refactoring &#128588;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://refactoring.fm/subscribe?"><span>Join the full Refactoring &#128588;</span></a></p><p>That&#8217;s it for today! See you on the next events!</p><p>I wish you a great weekend &#128075;<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[The Best Ideas from LDX3 and ProductLab 🏆]]></title><description><![CDATA[My personal highlights from attending two big conferences last month]]></description><link>https://refactoring.fm/p/the-best-ideas-from-ldx3-and-productlab</link><guid isPermaLink="false">https://refactoring.fm/p/the-best-ideas-from-ldx3-and-productlab</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 23 Sep 2026 07:02:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vjuo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here! Welcome to a </em>&#128274;<em> <strong>weekly essay</strong></em> &#128274;<em> from Refactoring.</em></p><p><em>Every week I <a href="https://refactoring.fm/s/essays?sort=top">write an article</a> to 170K+ engineers about how to make good software together. To get access to all our articles, resources, and our <a href="https://refactoring.fm/p/refactoring-community">private community</a>, subscribe to the full version below: </em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;http://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Run better engineering teams&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="http://refactoring.fm/subscribe?"><span>Run better engineering teams</span></a></p><div><hr></div><p>I am back from two weeks of travel, during which I took some time off but also attended two great conferences: <a href="https://leaddev.com/leaddev-new-york/">LDX3</a> in New York, and <a href="https://productlab.app/">ProductLab</a> in Berlin.</p><p>Conferences, for me, are a great way to say hi to friends and to check the pulse on the trends and sentiment in tech. This time made no exception: I learned a lot by attending talks and workshops, and simply by talking with people.</p><p>So this week&#8217;s edition covers my personal highlights from such talks and conversations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vjuo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vjuo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png 424w, https://substackcdn.com/image/fetch/$s_!vjuo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png 848w, https://substackcdn.com/image/fetch/$s_!vjuo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!vjuo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vjuo!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png" width="1200" height="798.6263736263736" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:969,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:2427015,&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/216741812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.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_!vjuo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png 424w, https://substackcdn.com/image/fetch/$s_!vjuo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png 848w, https://substackcdn.com/image/fetch/$s_!vjuo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!vjuo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bb3db9-9ace-4170-b536-1881a7e6025f_2110x1404.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here is the agenda for today:</p><ul><li><p>&#128666; <strong>Doing migrations right</strong> &#8212; Will Larson on Imprint&#8217;s delivery journey, framed as a set of migrations.</p></li><li><p>&#128483;&#65039; <strong>Guiding people through change</strong> &#8212; Meg Adams&#8217; diagnostic tools for having hard conversations.</p></li><li><p>&#129517; <strong>The Manager&#8217;s Path in the Age of AI</strong> &#8212; Camille Fournier on what still belongs to managers in 2026.</p></li><li><p>&#128202; <strong>DX quarterly numbers</strong> &#8212; Justin Reock&#8217;s latest AI impact data, plus how I think about these metrics.</p></li><li><p>&#127897;&#65039; <strong>How n8n is embracing AI</strong> &#8212; highlights from my conversation with Jan Oberhauser, founder of n8n, in Berlin.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><h2>1) &#128666; Doing migrations right</h2><p>LDX3 opened with a great keynote by <a href="http://lethain.com/">Will Larson</a>, who described the <em>delivery</em> journey of his team at Imprint: from manual gates everywhere, to CI/CD, to agentic workflows.</p><p>Will&#8217;s talk was extremely practical (we need more stories like this), and framed these steps as <strong>migrations</strong>. We know a lot about migrating code, and most of the same logic can be applied to processes and workflows.</p><p>Here are the parts of Will&#8217;s approach that stuck with me:</p><ul><li><p><strong>Understanding people&#8217;s problems</strong> &#8212; there&#8217;s a reason why people do things the current way, even if it looks flawed. To build something better, you need to understand current problems deeply, which is hard!</p></li><li><p><strong>Getting buy-in</strong> &#8212; Will stressed how, even if there was clear top-down input about the direction, the implementation was a collaborative effort where people were involved at all stages. At some point, Will wanted to migrate from Jira to Linear, and started by involving the people who were the biggest Jira fans. He knew that if he could address their concerns, the rest of the team would be easier to migrate to.</p></li><li><p><strong>Draw hard lines</strong> &#8212; inclusion and collaboration matters, but once a direction is taken, resources need to go to supporting that direction. In picking AI coding agents, Will settled on making Claude Code the recommended coding tool: people who wanted to use something else could do it, but would not receive support from the platform team.</p></li><li><p><strong>Sweat the details</strong> &#8212; with any migration there is always a long tail of stuff to be fixed and edges to be smoothed until things truly work for everyone. Keep working on it even when it seems that &#8220;most of the work is done&#8221;.</p></li></ul><div><hr></div><h2>2) &#128483;&#65039; Guiding people through change</h2><p>During LDX3, I attended a workshop by my friend <a href="http://megkadams.com/">Meg Adams</a>, who I also <a href="https://refactoring.fm/p/building-psychologically-safe-teams">interviewed last year</a>, about having good conversations with people and guiding them through change.</p>
      <p>
          <a href="https://refactoring.fm/p/the-best-ideas-from-ldx3-and-productlab">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Growing juniors, native AI products, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #225]]></description><link>https://refactoring.fm/p/growing-juniors-native-ai-products</link><guid isPermaLink="false">https://refactoring.fm/p/growing-juniors-native-ai-products</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 21 Sep 2026 07:02:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!O-mJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right foot.</em></p><p><em>I also publish an original essay every Wednesday. Here is the one from last week in case you missed it:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b1377770-357e-439b-b4bb-b805d65cc1a7&quot;,&quot;caption&quot;:&quot;Hey there, Luca here!&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Getting started with AI governance &#128274;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-09-16T13:03:30.670Z&quot;,&quot;cover_image&quot;:null,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/getting-started-with-ai-governance&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:215418545,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:27,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h3>&#128296; <a href="https://blitzy.com/sandbox?utm_medium=paid_media&amp;utm_source=newsletter_refactoring&amp;utm_campaign=sandbox">Autonomous Software Dev for the Enterprise</a></h3><p><em>This week&#8217;s newsletter is brought to you by our friends at <a href="https://blitzy.com/sandbox?utm_medium=paid_media&amp;utm_source=newsletter_refactoring&amp;utm_campaign=sandbox">Blitzy</a>!</em></p><p><span>Blitzy is built for large, </span><strong><span>complex software projects</span></strong><span> that other coding agents cannot handle: large-scale refactors, scaled vulnerability remediation, and undocumented legacy systems.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O-mJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O-mJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png 424w, https://substackcdn.com/image/fetch/$s_!O-mJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png 848w, https://substackcdn.com/image/fetch/$s_!O-mJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!O-mJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O-mJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png" width="462" height="241.78846153846155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:762,&quot;width&quot;:1456,&quot;resizeWidth&quot;:462,&quot;bytes&quot;:2058069,&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/215421733?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.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_!O-mJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png 424w, https://substackcdn.com/image/fetch/$s_!O-mJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png 848w, https://substackcdn.com/image/fetch/$s_!O-mJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!O-mJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76b65a43-4019-498d-ab8d-aafd90ce76f9_2048x1072.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Blitzy&#8217;s Sandbox lets engineers evaluate Bitzy on their own software estate, at their own pace. Eligible organizations can connect real applications, </span><strong><span>reverse-engineer up to 1 million lines of code</span></strong><span>, generate up to 25,000 lines of E2E tested code, and surface prioritized security vulnerabilities across their software estate.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blitzy.com/sandbox?utm_medium=paid_media&amp;utm_source=newsletter_refactoring&amp;utm_campaign=sandbox&quot;,&quot;text&quot;:&quot;Try Blitzy on your codebase&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blitzy.com/sandbox?utm_medium=paid_media&amp;utm_source=newsletter_refactoring&amp;utm_campaign=sandbox"><span>Try Blitzy on your codebase</span></a></p><div><hr></div><h2>&#127793; Grow juniors with guardrails and judgment</h2><p>One of the most important qualities of junior engineers is that they can turn into senior engineers. But that does not happen automatically.</p><p>There is a dream scenario where juniors grow, become senior, and <strong>help rotate headcount</strong> when seniors leave. But there is also a nightmarish one where juniors are thrown in the trenches, abuse AI in ways they do not understand, nobody checks on them, and the product eventually goes to shit.</p><p>When the growth cycle breaks, it is usually because juniors do not have a tight enough feedback loop: 1) one that keeps the work high quality, and 2) one that helps them learn from doing it.</p><p>To me, the loop looks two-fold:</p><ul><li><p><strong>Invest in an amazing harness</strong> &#8212; create <a href="https://refactoring.fm/p/my-ai-coding-workflow-b09?utm_source=publication-search">guardrails, rules, and gates</a>, and encode everything that can ensure quality automatically. This helps everyone: seniors, AI, and juniors who can learn from the same rules.</p></li><li><p><strong>Pair juniors with seniors</strong> &#8212; let young folks experiment and move fast, but keep seniors close enough to provide judgment and supply systems thinking.</p></li></ul><p>There is no way around the fact that AI makes the junior path harder in some ways, because more judgment is needed earlier. But that is also why freezing junior hiring is such a fragile bet: you optimize for today&#8217;s output, at the expense of starving the pipeline that should produce tomorrow&#8217;s seniors.</p><p>I wrote more about this in the full piece &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;13919b30-a69c-49ef-a661-78e605da4f57&quot;,&quot;caption&quot;:&quot;One of the dominant narratives in software today is that AI is making junior engineers redundant.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Case for Hiring Junior Engineers &#127793;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-08-12T07:19:52.213Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!iy_0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe769dbfe-186f-440f-b11a-6c0a37004fbf_1888x1280.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/the-case-for-hiring-junior-engineers&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:210602503,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:53,&quot;comment_count&quot;:1,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128241; Most AI products are still &#8220;m.google.com&#8221;</h2><p>When I spoke with <strong>Charlie Guo</strong>, developer experience engineer at OpenAI, we walked through three eras of AI-assisted development.</p><p>First came models that could autocomplete snippets, which became tools like GitHub Copilot. Then came AI-native IDEs like Cursor, where the model sat inside the editor. Now we are entering a third phase: standalone apps that orchestrate agents, and move beyond the text editor entirely.</p><p>Charlie believes most products are still stuck in the middle of that transition:</p><blockquote><p><em>The m.google.com of AI was (or is): take this product and cram a chat box on the sidebar, and then chat with it on the side while you&#8217;re doing stuff in the app.</em></p></blockquote><p>That&#8217;s similar to when the iPhone arrived: companies took desktop websites and mostly squeezed them into a vertical layout. It took nearly a decade to invent native mobile products: Uber, DoorDash, things that could not really exist on a desktop.</p><p>We are in that same messy middle with AI. A chat sidebar is not necessarily bad, but it&#8217;s just an easy retrofit. Native agent experiences are still being invented.</p><p>You can find the full conversation with Charlie here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;488f1888-cb98-4715-9e56-35bef47c8328&quot;,&quot;caption&quot;:&quot;Listen now:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building With Agents Today &#129302; &#8212; with Charlie Guo&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&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;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-08-07T07:00:53.190Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/JHAm58YZPIE&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/building-with-agents-today-with-charlie&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;92387196-e8f4-46de-a335-b56e984dc3e1&quot;,&quot;id&quot;:209980935,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:32,&quot;comment_count&quot;:0,&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;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128218; Weekly Readings</h2><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://rdel.substack.com/p/rdel-160-what-psychological-costs">What psychological costs does AI adoption create for engineers?</a></h4><h5>4 min &#8226; by Lizzie Matusov</h5><p>Lizzie covers a case study from a large Danish software company, one year into an org-wide AI rollout. Regular engineers feel &#8220;accountability anxiety&#8221; and &#8220;craft identity disruption&#8221; as tools take over work, while architects (more augmented than replaced) barely show the same costs. Interesting research, worth looking into.</p><div><hr></div><h4>&#129352; <a href="https://devz.cl/posts/i-spent-my-vacations-de-brainrotting/">De-Brainrot Vacations</a></h4><h5>4 min &#8226; by Daniel V.</h5><p>This piece by Daniel really resonated with me. He noticed that after years of engineering, plus AI and phone dopamine, his thinking got slower and lazier. So he used a countryside vacation to reset his brain by reading hard books and doing math and physics as a hobby. This is peak <a href="https://refactoring.fm/p/mental-marathoners">mental marathoners</a>!</p><div><hr></div><h4>&#129353; <a href="https://www.stephendiehl.com/posts/internet_predatory_cesspit/">The Internet Is Kind of a Predatory Cesspit Now</a></h4><h5>8 min &#8226; by Stephen Diehl</h5><p>Stephen argues that, over the years, &#8220;predation&#8221; moved from the periphery of the internet to its very core, and that a lot of ordinary people have been (often unwillingly) conscripted into it. I have less of a bleak view about this, but I see where Stephen is coming from and I don&#8217;t necessarily disagree. Worth reading!</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[Building Tools for Defenders 🛡️ — with Rahul Raina]]></title><description><![CDATA[Watch now (61 mins) | Refactoring Podcast &#8226; Episode 72]]></description><link>https://refactoring.fm/p/building-tools-for-defenders-with</link><guid isPermaLink="false">https://refactoring.fm/p/building-tools-for-defenders-with</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 18 Sep 2026 07:03:36 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/215788206/058a6f7bf038369cabd6980577b48a58.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-IOHvz58PwyU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;IOHvz58PwyU&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/IOHvz58PwyU?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><blockquote><p><em>Today&#8217;s episode is brought to you by: <strong><a href="https://ntn.so/refactoring">Notion</a></strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://ntn.so/refactoring" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jgfe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 424w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 848w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1272w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png" width="312" height="108.42" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:278,&quot;width&quot;:800,&quot;resizeWidth&quot;:312,&quot;bytes&quot;:31046,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://ntn.so/refactoring&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/209980935?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Jgfe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 424w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 848w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1272w, https://substackcdn.com/image/fetch/$s_!Jgfe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fad759a-737a-4bf9-9c08-cf4861d0a9af_800x278.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><em>Learn more about<strong> Notion&#8217;s Developer Platform </strong>today at<strong> <a href="https://ntn.so/refactoring">https://ntn.so/refactoring</a></strong></em></p></blockquote><div><hr></div><p><span>Today's guest is </span><strong><a href="https://www.linkedin.com/in/rahulr0609/"><span>Rahul Raina</span></a></strong><span>, co-founder of TRM Labs, which is a YC-backed company that works on solutions and products for security, fighting criminal networks, AI attackers, and more. <br><br>With Rahul, we had a great chat that covered a lot of ground, starting with the tough reality of cyber defense today, and why attackers by default always have the upper hand when AI and technology improves. And then we moved to a deep dive into how the TRM team works and how they rebuild their whole product development workflow for AI, including reshuffling all the technical roles, compressing the developer process steps, and creating dedicated artifacts for human reviews.</span></p><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 5-minute, handcrafted takeaways 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>&#128737;&#65039; The asymmetry of cyber defense</strong></p></li><li><p><strong>&#128260; Inner loop vs. outer loop</strong></p></li><li><p><strong>&#127959;&#65039; Redesigning the shipping framework</strong></p></li><li><p><strong>&#129514; Building a culture of experimentation</strong></p></li><li><p><strong>&#128269; Human review in an AI-driven workflow</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/building-tools-for-defenders-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Getting started with AI governance 🔒]]></title><description><![CDATA[A primer on how you should think about governing people, agents, tools, and actions.]]></description><link>https://refactoring.fm/p/getting-started-with-ai-governance</link><guid isPermaLink="false">https://refactoring.fm/p/getting-started-with-ai-governance</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 16 Sep 2026 13:03:30 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><span>Hey there, Luca here!</span></p><p><span>Lately I have been talking with both software engineers </span><em><span>and</span></em><span> security people about this moment in </span><strong><span>AI rollout</span></strong><span>, and it&#8217;s interesting how they feel it from opposite ends.</span></p><p><span>At first glance, there seems to be a real tradeoff between making AI useful, and keeping it safe:</span></p><ul><li><p><span>On one side, the best stories about AI impact always involve </span><strong><span>connecting it to pretty much everything</span></strong><span> you got: tickets, docs, CRM, Slack, telemetry, and more.</span></p></li><li><p><span>On the other side, this creates a </span><strong><span>big surface for threat</span></strong><span> that </span><a href="https://embracethered.com/blog/posts/2026/breaking-claude-code-opus-5-and-automode/"><span>even the latest models are extremely vulnerable to</span></a><span>.</span></p></li></ul><p><span>As of today, most agent setups I see are still completely ungoverned. What can this agent touch (MCP servers, browser, data, ...)? Who connected it? What customer data can actually leave the building?</span></p><p><span>Many teams are conflicted about putting real governance in place because that&#8217;s </span><strong><span>perceived as a </span></strong><em><strong><span>brake</span></strong></em><span>, in a moment in time where you are expected to </span><em><span>accelerate</span></em><span> instead.</span></p><p><span>I have a contrarian take on this, that I want to discuss today.</span></p><p><span>In 2006, Peter Summerlin, a professor in Landscape Architecture in Mississippi, ran </span><a href="https://web.archive.org/web/20060928021844/http://www.asla.org/awards/2006/studentawards/282.html"><span>a simple study</span></a><span> about kids&#8217; behavior in playgrounds:</span></p><blockquote><p><em><span>A simple study was conducted to discover </span><strong><span>the effects of a fence around a playground</span></strong><span> and the consequent impact it would have on preschool children. Teachers were to take their children to a local playground in which there was no fence during their normal recess hour. The kids were to play as normal. The same group was to be taken to a comparable playground in which there was a defined border designated by a fence.</span></em></p><p><em><span>In the first scenario, the children remained huddled around their teacher, fearful of leaving out of her sight. The later scenario exhibited drastically different results, with the children feeling free to explore within the given boundaries.</span></em></p></blockquote><p><span>So, in playgrounds with fences, </span><strong><span>kids actually used </span></strong><em><strong><span>more</span></strong></em><strong><span> space</span></strong><span>.</span></p><p><span>I believe good governance </span><em><span>can</span></em><span> be an accelerant. Like kids, once people know where fences are, people can be empowered to do more </span><em><span>within</span></em><span> them. But that&#8217;s only if governance is </span><em><span>good, </span></em><span>which is a big if!</span></p><p><span>Today I will try to explore what this looks like, in the context of AI. Here is what we will cover:</span></p><ul><li><p><span>&#128737;&#65039; </span><strong><span>Bounded freedom</span></strong><span> &#8212; why governance speeds AI rollout, instead of killing it.</span></p></li><li><p><span>&#129521; </span><strong><span>What you should actually govern</span></strong><span> &#8212; people, agents, data, tools, and actions.</span></p></li><li><p><span>&#128274; </span><strong><span>AI operates on a subset of human trust</span></strong><span> &#8212; the analogy between human and AI governance only goes so far.</span></p></li></ul><p><span>Let&#8217;s dive in!</span></p><div><hr></div><p><em><span>To explore this, today I am also bringing in Becky Brooks from</span></em><span> </span><em><a href="https://mcpmanager.ai/?utm_source=refactoring&amp;utm_medium=newsletter&amp;utm_campaign=sept_article"><span>MCP Manager</span></a>. They work at the forefront of this topic, and have helped<span> me a lot in making my mind up.</span></em></p><p><em><span>I am grateful to have them as a partner on this piece, and you should check out their </span><a href="https://mcpmanager.ai/?utm_source=refactoring&amp;utm_medium=newsletter&amp;utm_campaign=sept_article"><span>MCP gateway</span></a><span>, which companies use to manage how data and tools flow to and from AI.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://mcpmanager.ai/?utm_source=refactoring&amp;utm_medium=newsletter&amp;utm_campaign=sept_article&quot;,&quot;text&quot;:&quot;Learn more about MCP Manager&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://mcpmanager.ai/?utm_source=refactoring&amp;utm_medium=newsletter&amp;utm_campaign=sept_article"><span>Learn more about MCP Manager</span></a></p><p><em><span>In any case, I will only write my unbiased opinion about the practices and tools covered, MCP Manager included.</span></em></p><div><hr></div><h2><span>&#128737;&#65039; Bounded freedom</span></h2><p><span>A lot of ambitious teams that I know </span><em><span>delay</span></em><span> governance and compliance, with the idea of going AI-native first, and cleaning up later. In my experience, this order is backwards.</span></p><p><span>Without clarity, people react in two possible ways:</span></p><ul><li><p><strong><span>They freeze</span></strong><span> &#8212; they are unsure about being punished for this or that, and they just go the safe route, doing with AI much less than they would be able to.</span></p></li><li><p><strong><span>They go underground</span></strong><span> &#8212; I was on a train once, and a guy in the seat in front of me was using his company laptop with one hand, and ChatGPT on his personal phone with the other hand, copy-pasting stuff between the two. You don&#8217;t want that to happen, obviously.</span></p></li></ul><p><span>There is a </span><a href="https://cloudsecurityalliance.org/artifacts/the-state-of-ai-security-and-governance"><span>study by Google Cloud</span></a><span> from late 2025 that confirms this. Teams with clear governance in place get much farther, and faster, on agentic adoption than those without:</span></p><ul><li><p><span>Teams with </span><strong><span>full governance</span></strong><span> &#8594; 46% adoption</span></p></li><li><p><span>Teams with </span><strong><span>partial governance</span></strong><span> &#8594; 25% adoption</span></p></li><li><p><span>Teams with </span><strong><span>&#8220;still in development&#8221;</span></strong><span> governance &#8594; 12% adoption</span></p></li></ul><p><span>Of course, correlation is not causation, but it still makes it hard to look at governance as only a tax.</span></p><p><span>And when you think about it, that&#8217;s already what happens in specific domains, like coding. We talk about </span><em><span>guardrails</span></em><span> for AI coding all the time, and I even published my own approach with </span><a href="https://refactoring.fm/i/200102476/guides-gates-and-guards"><span>guides, gates, and guards</span></a><span>, which is, admittedly, quite strict.</span></p><p><span>Having strict guardrails is what allows me to be </span><strong><span>more liberal</span></strong><span> with the tasks I give to my agents, and what they can ship.</span></p><p><span>So if good governance is guardrails for data, tools, and people, what does this look like? Let&#8217;s try to figure out.</span></p><div><hr></div><h2><span>&#129521; What you should actually govern</span></h2><p><span>Working from first principles, what is it that you should actually govern? To me, it looks like four things:</span></p><ol><li><p><strong><span>People</span></strong><span> &#8212; who may use which AI client or gateway (by role, team, seniority). E.g. engineers get the coding setup, interns do not get production CRM tools, etc.</span></p></li><li><p><strong><span>Agents / clients</span></strong><span> &#8212; which AI surfaces are approved at all. Company Claude yes, personal ChatGPT no, and so on.</span></p></li><li><p><strong><span>Data &amp; tools</span></strong><span> &#8212; what the agent can see (and call). Drive folders, Slack channels, Jira projects, databases, CRM, MCP servers.</span></p></li><li><p><strong><span>Actions</span></strong><span> &#8212; what it may </span><em><span>do</span></em><span> once it is connected. Read, write, delete, open a PR, message a customer.</span></p></li></ol><p><span>It&#8217;s interesting to note that this looks exactly like the same line of reasoning we should apply to people, even without AI. And I would argue that we should start with </span><strong><span>governance for people first</span></strong><span>, and address AI later, because the opposite is impossible.</span></p>
      <p>
          <a href="https://refactoring.fm/p/getting-started-with-ai-governance">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>