<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Refactoring]]></title><description><![CDATA[Learn how to make your engineering team ship faster and better. Read weekly by 170,000+ engineers and managers]]></description><link>https://refactoring.fm</link><image><url>https://substackcdn.com/image/fetch/$s_!CR5A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png</url><title>Refactoring</title><link>https://refactoring.fm</link></image><generator>Substack</generator><lastBuildDate>Fri, 29 May 2026 16:05:15 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[The Future of Engineering 🔮 — with James Stanier]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 64]]></description><link>https://refactoring.fm/p/the-future-of-engineering-with-james</link><guid isPermaLink="false">https://refactoring.fm/p/the-future-of-engineering-with-james</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 29 May 2026 07:01:38 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/199059871/d53227acfaa2efc593433a259f6db309.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-fedmoQDDrcM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;fedmoQDDrcM&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/fedmoQDDrcM?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:</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="http://getunblocked.com/refactoring" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eEtG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 424w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 848w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 1272w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eEtG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png" width="152" height="32.78021978021978" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:314,&quot;width&quot;:1456,&quot;resizeWidth&quot;:152,&quot;bytes&quot;:174076,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;http://getunblocked.com/refactoring&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/197536623?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!eEtG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 424w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 848w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 1272w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><em><strong><a href="http://getunblocked.com/refactoring">Unblocked</a></strong> is the context layer for modern engineering teams. Get a free three-week trial at</em> <em><strong><a href="http://getunblocked.com/refactoring">getunblocked.com/refactoring</a></strong></em></p></blockquote><div><hr></div><p>Today's guest is <strong><a href="https://www.linkedin.com/in/jstanier/">James Stanier</a></strong>, CTO at Nordhealth, former director at Shopify, an author of several books about engineering management, remote work, and more.<br><br>With James, we talked about what senior engineers will look like in the future, taking from a great article he wrote just recently, and then regarding how engineering management is changing, what's expected of managers today, and what you need to thrive.<br>We also talked about AI adoption in his team, in our personal lives, and discussed the state of remote work in 2026.</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 <strong>5-minute takeaways</strong> of what we talked about, with timestamps to the relevant video moments, for those who don&#8217;t have time to sit through the 1-hour chat.</p><p>Here is the agenda for today:</p><ol><li><p><strong>&#128302; The senior engineer of 2035</strong></p></li><li><p><strong>&#129489;&#8205;&#128188; How engineering management is changing</strong></p></li><li><p><strong>&#129302; AI adoption: from chaos to creativity</strong></p></li><li><p><strong>&#127968; The state of remote work in 2026</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/the-future-of-engineering-with-james">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Insights from our first AI Club 🪄]]></title><description><![CDATA[Five stories from real-world engineering leaders]]></description><link>https://refactoring.fm/p/insights-from-our-first-ai-club</link><guid isPermaLink="false">https://refactoring.fm/p/insights-from-our-first-ai-club</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 27 May 2026 07:02:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!agkJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> 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> about how to ship fast and make good software, and <a href="https://refactoring.fm/podcast">interview a world-class tech leader</a>. I also build and maintain <a href="https://refactoring.fm/p/introducing-tolaria">Tolaria</a> in the open, publishing my workflows and learnings here.</em></p><p><em>Refactoring is read every week by 170,000+ engineers and managers from all over the world</em>!</p><div><hr></div><p>Two weeks ago we came together in the Refactoring Community for our very first monthly <strong><a href="https://refactoring.fm/p/introducing-the-ai-club">AI Club</a> </strong>session!</p><p>More than 30 people joined, and 5 volunteered to share recent learnings about using AI at work. Then everyone got the opportunity to ask questions and build on their ideas.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!agkJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!agkJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png 424w, https://substackcdn.com/image/fetch/$s_!agkJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png 848w, https://substackcdn.com/image/fetch/$s_!agkJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png 1272w, https://substackcdn.com/image/fetch/$s_!agkJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!agkJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png" width="1080" height="386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:386,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1042610,&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/199175726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.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_!agkJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png 424w, https://substackcdn.com/image/fetch/$s_!agkJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png 848w, https://substackcdn.com/image/fetch/$s_!agkJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png 1272w, https://substackcdn.com/image/fetch/$s_!agkJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b14ea68-9d64-4e6f-9f68-8bc37edf277a_1080x386.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A partial screenshot of the group call for our first AI Club!</figcaption></figure></div><p>In this edition I will post a recap of the awesome ideas that were shared!</p><ol><li><p>&#128668; <strong>The &#8220;combine harvester&#8221; pattern for long AI tasks</strong></p></li><li><p>&#127769; <strong>Overnight procedures that catch what rules can&#8217;t enforce</strong></p></li><li><p>&#128211; <strong>A daily rhythm for noticing what we&#8217;re learning</strong></p></li><li><p>&#127915; <strong>Using AI to make sense of messy stakeholder tickets</strong></p></li><li><p>&#128256; <strong>Staged automation of a complex upstream merge</strong></p></li></ol><p>Let&#8217;s dive in!</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5SP_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5SP_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp 424w, https://substackcdn.com/image/fetch/$s_!5SP_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp 848w, https://substackcdn.com/image/fetch/$s_!5SP_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp 1272w, https://substackcdn.com/image/fetch/$s_!5SP_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5SP_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp" width="1456" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:74296,&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/199175726?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5SP_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp 424w, https://substackcdn.com/image/fetch/$s_!5SP_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp 848w, https://substackcdn.com/image/fetch/$s_!5SP_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp 1272w, https://substackcdn.com/image/fetch/$s_!5SP_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb68cd32b-57c4-44ae-b811-52f28b7dea74_1456x490.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The AI Club is run monthly and facilitated by professional coaches. It is exclusive for paid members of Refactoring, who get access to our private community.</em></p><p><em>Get the full version of Refactoring to join the next AI Club, on <strong>Jun 5th</strong>!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://refactoring.fm/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>1) &#128668; The <em>combine harvester</em> pattern for long AI tasks</h2><p><strong><a href="https://www.linkedin.com/in/vektor/">Matej Vitasek</a></strong>, CTO, shared how he has been successful at having agents run through long, multi-hour tasks, by having them <strong>maintain their state in a markdown file</strong> that gets updated as the task goes on.</p><p>The markdown file holds:</p><ul><li><p>The instructions</p></li><li><p>The progress so far</p></li><li><p>What should happen next</p></li></ul><p>As the task evolves, the file evolves too. You can also make the agent stop after a batch of work, reflect on what could have been done better, and update the process before continuing.</p><p>The benefit, as Matej described it, is that the work doesn&#8217;t have to happen in one sitting. </p><p>Anyone can pick the task back up at a later time and the agent can resume from the markdown file rather than starting over or losing context. For tasks that are too big to fit in a single session &#8212; or that you want to step away from and come back to &#8212; the markdown becomes a simple working memory.</p><p>It&#8217;s a small, low-tech pattern, but it works and it&#8217;s portable across multiple models and agents.</p><div><hr></div><h2>2) &#127769; Overnight procedures to catch what rules can&#8217;t enforce</h2><p>I personally shared something that is working well for me and I don&#8217;t see talked about often: running daily, often overnight, procedures that look back at what happened during the day and try to catch judgment-based things that wouldn&#8217;t have been picked up by rules in the moment.</p><p>I call these <strong>guards</strong>.</p><p>My starting point is&#8212;I believe&#8212;the same as everyone: I write rules in the AGENTS.md / CLAUDE.md file, and try to enforce some things via CI and hooks: test coverage, static analysis, code health, and so on.</p><p>But there are things that are hard to gate:</p><ul><li><p><em>Did this change need an architecture decision record?</em></p></li><li><p><em>Has an opportunity to refactor been missed?</em></p></li><li><p><em>Is performance drifting over time?</em></p></li></ul><p>These are judgment calls, and agents will sometimes ignore rules about them, or simply make mistakes.</p><p>So I have set up various procedures that run once a day, each focused on a specific concern. Like, in the cases above:</p>
      <p>
          <a href="https://refactoring.fm/p/insights-from-our-first-ai-club">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Reviewable ADRs, AI by default, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #209]]></description><link>https://refactoring.fm/p/reviewable-adrs-ai-by-default-and</link><guid isPermaLink="false">https://refactoring.fm/p/reviewable-adrs-ai-by-default-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 25 May 2026 08:09:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/msEjXJhL0HM" 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><div><hr></div><h2>&#128256; Open-source workflow orchestration</h2><p><em>This newsletter is brought to you by our friends at <a href="https://kestra.io/">Kestra</a>!</em></p><p>Last week I published <a href="https://refactoring.fm/p/how-to-orchestrate-ai-workflows">this primer about workflow orchestration</a>, together with the team at Kestra, which builds a great open source platform to <em>scale </em>AI agents into more deterministic and observable workflows.</p><p>I have been playing with it to replace some of my OpenClaw <s>chaos</s> cron jobs, and I am pretty happy with the result so far! Will probably write more about it in the future.</p><p>You can learn more about Kestra below &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://kestra.io/&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://kestra.io/"><span>Learn more about Kestra</span></a></p><div><hr></div><h2>&#128161; ADRs are the reviewable artifacts of AI coding</h2><p>Last month I wrote that the most recent and most valuable addition to my AI coding workflow have been <a href="https://adr.github.io/">ADRs</a>.</p><p>Since then, I realized they are especially valuable because they help turn design judgment into <strong>reviewable artifacts</strong>. What does it mean?!</p><p>I don&#8217;t want to inspect every line of code an agent writes, but I can definitely review a short decision record that explains the chosen approach, alternatives, consequences, and what would trigger reconsideration. This gives me a way better control point than reviewing code details in isolation.</p><p>ADRs also improve future agent work. Before making a structural choice, the agent can read past decisions, reuse the system&#8217;s current principles, and avoid debates that were already settled.</p><p>I especially like that ADRs are immutable. When a decision changes, the agent creates a new record that supersedes the old one, instead of rewriting history.</p><p>As of today, Tolaria has <a href="https://github.com/refactoringhq/tolaria/tree/main/docs/adr">120+ ADRs</a>. Are they perfect? Not at all &#8212; but they don&#8217;t have to be. They are good enough to 1) make me understand key design choices, and 2) steer agent behavior to make it compliant with what exists.</p><p>You can find the full article below:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:193368488,&quot;url&quot;:&quot;https://refactoring.fm/p/updates-to-my-ai-coding-workflow&quot;,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;title&quot;:&quot;Updates to my AI Coding Workflow&quot;,&quot;truncated_body_text&quot;:&quot;About a month ago I wrote an article about my AI coding workflow, and it instantly became the most popular Refactoring article of all time.&quot;,&quot;date&quot;:&quot;2026-04-08T07:12:58.916Z&quot;,&quot;like_count&quot;:55,&quot;comment_count&quot;:6,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-06-04T06:23:53.965Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-11-15T17:35:42.775Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:247311,&quot;user_id&quot;:6835984,&quot;publication_id&quot;:64099,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:64099,&quot;name&quot;:&quot;Refactoring&quot;,&quot;subdomain&quot;:&quot;refactoring&quot;,&quot;custom_domain&quot;:&quot;refactoring.fm&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Learn how to make your engineering team ship faster and better. Read weekly by 170,000+ engineers and managers&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;author_id&quot;:6835984,&quot;primary_user_id&quot;:6835984,&quot;theme_var_background_pop&quot;:&quot;#2096ff&quot;,&quot;created_at&quot;:&quot;2020-07-06T14:20:40.525Z&quot;,&quot;email_from_name&quot;:&quot;&#127744; Refactoring&quot;,&quot;copyright&quot;:&quot;Refactoring ETS&quot;,&quot;founding_plan_name&quot;:&quot;&#127942; Community plan&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79ab7b78-71cf-42d2-a607-3aa18960cb64_2400x572.png&quot;}}],&quot;twitter_screen_name&quot;:&quot;lucaronin&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000,&quot;status&quot;:{&quot;bestsellerTier&quot;:1000,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:1000},&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/updates-to-my-ai-coding-workflow?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CR5A!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" loading="lazy"><span class="embedded-post-publication-name">Refactoring</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Updates to my AI Coding Workflow</div></div><div class="embedded-post-body">About a month ago I wrote an article about my AI coding workflow, and it instantly became the most popular Refactoring article of all time&#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; 55 likes &#183; 6 comments &#183; Luca Rossi</div></a></div><div><hr></div><h2>&#127897;&#65039; Use AI by default to learn its failure modes</h2><p>Speaking of AI coding, last month <a href="https://refactoring.fm/p/ai-coding-meets-code-health-with">I interviewed Stuart Caborn</a>, Distinguished Engineer at loveholidays, and one of the few tech leaders I know that is really doing it <em>at scale</em>, documenting the process.</p><p>One of the things he told me is that teams do not learn how AI works by <strong>waiting for perfect use cases</strong>.</p><p>They learn by using it <em>by default</em>, even in moments where typing the code directly would be faster. This sounds inefficient locally, but the point is building the feedback loop, rather than optimizing the single task.</p><p>Stuart explains that every failed AI attempt teaches the team something: which instructions are missing, which docs are unclear, which conventions are invisible, where the agent needs guardrails, and so on.</p><p>Stuart cares about making failures <em>public</em>, instead of private, and for this, he creates pressure for the failures to surface. The team runs showcases, shares patterns, and even forces engineers to go through AI before asking for human support &#128071;</p><blockquote><p><em><strong>&#8220;At one of the platform showcases, the core engineering team said: we&#8217;re not going to support you if you have a problem with your Terraform, if you haven&#8217;t asked Claude to do it first. That was bold &#8212; but the reasoning was: we need the feedback now.&#8221;</strong></em></p></blockquote><p>You can find the full interview here:</p><div id="youtube2-msEjXJhL0HM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;msEjXJhL0HM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/msEjXJhL0HM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><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://martinfowler.com/articles/sensors-for-coding-agents.html">Sensors for Coding Agents</a></h4><h5>15 min &#8226; by Birgitta B&#246;ckeler</h5><p>Great primer on using<em> sensors</em> &#8212; like ESLint rules and static analysis &#8212; as feedback loops for coding agents. The idea is that agents need guardrails to maintain code quality, and these automated checks act as their &#8220;senses&#8221; on the path to production.</p><div><hr></div><h4>&#129352; <a href="https://www.williamangel.net/blog/2026/05/17/offline-llm-energy-use.html">Apple Silicon Costs more than OpenRouter</a></h4><h5>5 min &#8226; by William Angel</h5><p>Yet another reminder that, for 99% of us, running LLMs locally makes absolutely zero sense. This time backed by numbers.</p><div><hr></div><h4>&#129353; <a href="https://simonwillison.net/2026/May/14/not-so-locked-in/#atom-everything">Not So Locked In</a></h4><h5>2 min &#8226; by Simon Willison</h5><p>Programming languages <em>used to be</em> lock-in &#8212; they&#8217;re increasingly not. LLMs are making it feasible to port entire codebases across languages and frameworks, which changes how you think about tech choices, risks you can take, and more.</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[Introducing Portent ☘️]]></title><description><![CDATA[An open spec for knowledge bases, for work and life.]]></description><link>https://refactoring.fm/p/introducing-portent</link><guid isPermaLink="false">https://refactoring.fm/p/introducing-portent</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 20 May 2026 07:44:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0fCQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today it&#8217;s almost one month since I released <a href="http://tolaria.md/">Tolaria</a>, and during this time I have spoken with many people and teams that are trying to use it to create and manage internal knowledge bases.</p><p>During these chats, the most recurring questions I receive are not about the tool itself, but about <strong>how to organize information</strong>.</p><p>People understand the tool: types, relationships, views, etc &#8212; but are not sure about what types to create, how to connect them together, and what the regular maintenance of all of this looks like.</p><p>To help with this, today I am introducing <strong><a href="http://portent.md/">Portent</a></strong> &#8212; an open spec for organizing knowledge bases, for work and life.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0fCQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0fCQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png 424w, https://substackcdn.com/image/fetch/$s_!0fCQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png 848w, https://substackcdn.com/image/fetch/$s_!0fCQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png 1272w, https://substackcdn.com/image/fetch/$s_!0fCQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0fCQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png" width="1456" height="771" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:771,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3096792,&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/198376374?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.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_!0fCQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png 424w, https://substackcdn.com/image/fetch/$s_!0fCQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png 848w, https://substackcdn.com/image/fetch/$s_!0fCQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png 1272w, https://substackcdn.com/image/fetch/$s_!0fCQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6679e5f1-651b-43e1-b21e-d2bb636e3455_3112x1648.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Brand new website on <a href="http://portent.md/">portent.md</a>!</figcaption></figure></div><p>Portent provides strong defaults for the three key aspects of a knowledge base:</p><ul><li><p><strong>Structures</strong> &#8212; how information is organized into different buckets, whether it&#8217;s types, folders, or else.</p></li><li><p><strong>Relationships </strong>&#8212; how such structures are connected and related to one another.</p></li><li><p><strong>Lifecycle </strong>&#8212; how information flows and is operated.</p></li></ul><p>Portent was built with a few goals in mind:</p><ul><li><p><strong>Convention over configuration</strong> &#8212; Portent is like the Rails of knowledge bases. Gives you sane defaults, but keeps you free to extend / change whatever you like.</p></li><li><p><strong>Usable with any tool</strong> &#8212; while Portent concepts are first-class citizens in Tolaria, they can be easily implemented in any knowledge mgmt tool.</p></li><li><p><strong>Combine life and work</strong> &#8212; create knowledge bases that <em>blend</em> personal and work data, over the same underlying type system.</p></li><li><p><strong>Flexible and extensible</strong> &#8212; Portent is easy to change and extend, and does not corner users into rigid schemas.</p></li></ul><p>So let&#8217;s dive into this. Here is the agenda:</p><ul><li><p>&#128214; <strong>Backstory</strong> &#8212; or why you should trust me on this</p></li><li><p>&#127857; <strong>Types</strong> &#8212; the eight main types</p></li><li><p>&#128256; <strong>Relationships</strong> &#8212; for knowledge, think graph instead of relational</p></li><li><p>&#128260; <strong>Lifecycle</strong> &#8212; capture &#8594; organize &#8594; archive</p></li><li><p>&#128268; <strong>Extending Portent</strong> &#8212; how to add more things, and what you may add.</p></li><li><p>&#128296; <strong>Tolaria implementation</strong> &#8212; how to do this in Tolaria. Spoiler: there is a template.</p></li></ul><div><hr></div><blockquote><p><em>Quick heads up! On June 2nd and 3rd I will be at <strong><a href="https://leaddev.com/leaddev-london/">LDX3 in London</a></strong>, where I will interview the one and only <a href="https://www.google.com/search?q=michael+lopp">Rands</a>, live on stage.</em></p><p><em>I love LeadDev conferences and I go every year. If you are thinking of coming, you can <strong><a href="https://leaddev.com/leaddev-london/">use the code</a></strong><a href="https://leaddev.com/leaddev-london/"> </a><strong><a href="https://leaddev.com/leaddev-london/">LUCA15</a></strong> to get 15% off the tickets! No affiliation &#8212; I don&#8217;t get any money from this.</em></p><p><em>Hope to see many friends there and say hi!</em></p></blockquote><div><hr></div><h2>&#128249; Walkthrough</h2><p>If you prefer watching instead of reading, here is my walkthrough of the <a href="https://github.com/refactoringhq/portent-vault-template">Portent template</a> &#128071;</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;0d72cdb8-ffa6-4cf4-b252-7ca51b247eee&quot;,&quot;duration&quot;:null}"></div><div><hr></div><h2>&#128214; Backstory</h2><p>Portent is the result of many years of work, and, just like with Tolaria, it feels that a lot of what I have done in my life has led to this:</p><ul><li><p><strong>2011: PhD</strong> &#8212; in 2011 I started a PhD to study non-relational databases and how their data models could be mapped one onto another. That started my obsession with organizing information. I later dropped out of my PhD to start a startup &#128071;</p></li><li><p><strong>2017: Startup </strong>&#8212; we had one of the very first Notion workspaces in Italy, back in 2017. As CTO I created templates about how to organize work that were later adopted by many others, and personally coached several startups about how to organize work.</p></li><li><p><strong>2020: Building a Second Brain</strong> &#8212; in 2020 I got in touch with the ideas from Tiago Forte, Sonke Ahrens, all the personal knowledge management <em>literature</em>, and started trying to take the best of it and applying to actual <em>work </em>knowledge.</p></li><li><p><strong>2021: Refactoring </strong>&#8212; my creator work <em>stressed</em> these ideas to the limit and led to a substantial revision to allow 1) more productivity (write 3 newsletters / week), and 2) blend of personal and work data.</p></li><li><p><strong>2025: AI &amp; Tolaria </strong>&#8212; as I started working on Tolaria, I further revised how these concepts could be mapped cleanly into Types and Relationships, and optimized for AI collaboration.</p></li></ul><p>So I am very opinionated about all of this, but I am also wary that this is a very personal topic, so any system should be:</p><ul><li><p><strong>Small</strong> &#8212; only include what I am 100% sure it&#8217;s good, and not more.</p></li><li><p><strong>Flexible</strong> &#8212; to accommodate for personal tweaks and preferences.</p></li></ul><p>The best analogy I can find is that Portent is like <strong>Rails for knowledge bases</strong>: turnkey if you want to, but infinitely customizable if you want to get your hands dirty.</p><div><hr></div><h2>&#127857; Types</h2><p>Portent recommends organizing data into eight main types:</p><ol><li><p><strong>Projects</strong></p></li><li><p><strong>Operations</strong></p></li><li><p><strong>Responsibilities</strong></p></li><li><p><strong>Tasks</strong></p></li><li><p><strong>Events</strong></p></li><li><p><strong>Notes</strong></p></li><li><p><strong>Topics</strong></p></li><li><p><strong>People</strong></p></li></ol><p>The name Portent itself is an acronym for the first seven types. Plus there&#8217;s <em>people</em> at the end, so it&#8217;s technically <em>PORTENTP</em> &#8212; but bear with me!</p><p>These types are grouped into two clean categories:</p><ul><li><p><strong>PORT</strong> &#8212; the <strong>actionable</strong> types: <em>Projects</em>, <em>Operations</em>, <em>Responsibilities</em>, <em>Tasks</em>.</p></li><li><p><strong>ENT(P)</strong> &#8212; the <strong>non-actionable</strong> types: <em>Events</em>, <em>Notes</em>, <em>Topics</em>, <em>People</em>.</p></li></ul><p>PORT organizes <em>things to do</em>, while ENTP organizes <em>inert</em>, non-actionable things.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vTzN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vTzN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png 424w, https://substackcdn.com/image/fetch/$s_!vTzN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png 848w, https://substackcdn.com/image/fetch/$s_!vTzN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png 1272w, https://substackcdn.com/image/fetch/$s_!vTzN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vTzN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png" width="1456" height="731" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:731,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111835,&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/198376374?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.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_!vTzN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png 424w, https://substackcdn.com/image/fetch/$s_!vTzN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png 848w, https://substackcdn.com/image/fetch/$s_!vTzN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png 1272w, https://substackcdn.com/image/fetch/$s_!vTzN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27a48a2c-0aa1-473e-9807-defd6039ad71_1590x798.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">PORT and ENTP are the two big type groups in PORTENT</figcaption></figure></div><h2>&#128293; PORT</h2><p>PORT is <em>by far</em> the most important part of Portent. I believe the best way to organize a piece of information is downstream of asking: <strong>what should I do with it?</strong></p><p>You are going to ask yourself this question <em>all the time</em>, so in order to give good answers, you need a good way to organize things to do. And when I say &#8220;things to do&#8221; it&#8217;s not necessarily work &#8212; it&#8217;s also personal life. The mental model is the same.</p><p>The most useful way I have found to categorize work is to do so along two axes:</p><ul><li><p>&#128207; <strong>Size</strong> &#8212; whether work can be completed in one sitting or not.</p></li><li><p>&#128260;<strong> Recurrence</strong> &#8212; whether work is one-and-done, or recurring.</p></li></ul><p>Based on this, we can have four types of 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_!3zHB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3zHB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png 424w, https://substackcdn.com/image/fetch/$s_!3zHB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png 848w, https://substackcdn.com/image/fetch/$s_!3zHB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png 1272w, https://substackcdn.com/image/fetch/$s_!3zHB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3zHB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png" width="1456" height="862" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:862,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135589,&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/198376374?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.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_!3zHB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png 424w, https://substackcdn.com/image/fetch/$s_!3zHB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png 848w, https://substackcdn.com/image/fetch/$s_!3zHB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png 1272w, https://substackcdn.com/image/fetch/$s_!3zHB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef4d7e29-f069-4722-b425-f07a52f05aae_2010x1190.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">You can organize anything you need to do based on size and recurrence</figcaption></figure></div><h3>Responsibilities</h3><p>Responsibilities are recurring work that can&#8217;t be completed in one sitting.</p><p>They are good for modeling long-running <em>areas</em> for which you need to keep a standard.</p><p>Responsibilities don&#8217;t usually have fixed <em>goals,</em> because they are long-running &#8212; they rather have metrics or KPIs that tell you you are going in the right direction.</p><p>Examples: &#8220;stay in good shape&#8221;, or &#8220;ensure good product retention&#8221;.</p><h3>Projects</h3><p>Projects are one-and-done work that can&#8217;t be completed in one sitting. They have a beginning and an end, and a clear definition of done.</p><p>They can <em>belong to</em> a responsibility. E.g. if your &#8220;ensure good product retention&#8221; responsibility measures the NPS of your product, a quarter project might be about a beloved feature that people have been asking since forever, that is expected to improve that.</p><p>Or if you measure &#8220;stay in good shape&#8221; with your VO2 max, a quarter project might be to start playing Padel twice a week, and get your VO2 max from X to Y.</p><h3>Operations</h3><p>Operations are recurring work that <em>can</em> be completed in one sitting. They are <em>procedures</em> that are repeated always the same way, for which there is ideally a set of instructions.</p><p>Operations can <em>belong to</em> Responsibilities and Projects. E.g. in your &#8220;stay in good shape&#8221; responsibility, you might have an operation that describes your weight-lifting routine.</p><p>Or for a Project that is about a new product feature, you might have an Operation for the &#8220;Weekly Review&#8221; of how the development is going.</p><p>Operations are also, as of today, the biggest surface of collaboration with AI agents. Agents deliver a ton of value by <em>owning</em> procedures, that is, performing the same set of actions on a recurring basis.</p><h3>Tasks</h3><p>Tasks are one-and-done work that can be completed in one sitting. These are important to be defined this way and to be included in the general framework, but I actually do not encourage storing them in the knowledge base.</p><p>I am not completely against it either, but I generally believe tasks are better suited to being managed by a dedicated separate tool. For two reasons:</p><ul><li><p><strong>Ephemeral</strong> &#8212; once a task is done, there is no big value in keeping it in the base. Any learning coming from the task should be stored in a separate note anyway.</p></li><li><p><strong>Specialized </strong>&#8212; tasks often require specialized interaction: due dates, status, kanban boards &#8212; all things that are better served by dedicated tools.</p></li></ul><p>So yeah, it&#8217;s not bad to store tasks in a Portent base per se, but you are probably not going to get a lot out of it either.</p><div><hr></div><h2>&#127793; ENTP</h2><p>ENTP types are for information that doesn&#8217;t need action. Litmus test is: if it needs a <em>status</em>, it&#8217;s probably a PORT, otherwise, it&#8217;s an ENTP.</p><p>Let&#8217;s look at them one by one:</p><h3>Topics</h3><p>Topics are <em>categories</em> that have no expectations of action. They are simply topics of interest, that may or may not be useful in the future.</p><p>E.g. I like sim racing, and I often save links with gear or tutorials, but I have no projects or responsibilities about it, so it&#8217;s just a topic for me.</p><p>Or, at work, I may want to save useful resources about <em>databases</em>, but it&#8217;s not like I have a <em>responsibility</em> about that. Could just be useful in the future, so I create notes and set them as related to the databases topic.</p><h3>Events</h3><p>Events are things that <em>happen</em>. They are useful for mapping meetings, achievements, and calendar things.</p><h3>People</h3><p>People are pretty self-explanatory. You can attach people to pretty much any of the types above, and when done well, it&#8217;s like building a CRM.</p><h3>Notes</h3><p>Finally, Note is simply the <em>default</em> type. When you create a new item, it&#8217;s a Note first &#8212; and it stays so in absence of a better type for it. </p><p>Now, once you have the types in place, how do you connect them together?</p><div><hr></div><h2>&#128256; Relationships</h2><p>I believe the best way to model information relationships in a knowledge base is via a very small set of <strong>graph-style </strong>connections.</p><p>Portent encourages two in particular:</p><ul><li><p><strong>Belongs to</strong> &#8212; <em>strong </em>relationship: owner, composition, usually in a one-to-many fashion.</p></li><li><p><strong>Related to</strong> &#8212; <em>weak</em> relationship: many-to-many, does not demand action.</p></li></ul><p>Based on how you implement these, you can also compute the inverted versions, whose default names in Portent are:</p><ul><li><p>Belongs to &#8594; <em>Has</em>, or <em>Children</em></p></li><li><p>Related to &#8594; <em>Referred By</em></p></li></ul><p>The way you assign these relationships is up to you, but I have found that a good default mental model is:</p><ul><li><p>Use <strong>belongs to</strong> for relationships <em>towards </em>or <em>between</em> PORT items &#8212; e.g. an Operation <em>belongs to</em> a broader Responsibility<em>, </em>a meeting (Event) or a Note <em>belongs to</em> a Project.   </p></li><li><p>Use <strong>related to</strong> for relationships between ENTP items &#8212; e.g. an Event is <em>related to</em> a Person<em>, </em>a Note is <em>related to</em> a Topic, and so on.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F9BU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F9BU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png 424w, https://substackcdn.com/image/fetch/$s_!F9BU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png 848w, https://substackcdn.com/image/fetch/$s_!F9BU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png 1272w, https://substackcdn.com/image/fetch/$s_!F9BU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F9BU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png" width="1456" height="883" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:156984,&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/198376374?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.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_!F9BU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png 424w, https://substackcdn.com/image/fetch/$s_!F9BU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png 848w, https://substackcdn.com/image/fetch/$s_!F9BU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png 1272w, https://substackcdn.com/image/fetch/$s_!F9BU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0d7f58e-9760-4550-a2a5-27afca7721db_1734x1052.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">PORT items tend to express ownership / composition, while ENTP express relatedness</figcaption></figure></div><p>An important upside of a relationships (and not only type) system, is that relationships stay the same across the whole knowledge base.</p><p>To understand why this matters, let&#8217;s look at alternative ways to model relationships, via the two most common ways: relational databases (tabular data), and folders (hierarchical data).</p><h3>1) Relational DBs (tabular data)</h3><p>In a relational model, like Postgres, or Notion databases, you need to define explicit relationships between each couple of tables you want to connect.</p><p>These relationships create a schema that is:</p><ul><li><p><strong>Big</strong> &#8212; you end up recreating the same concepts across tables even if they semantically mean the same thing, and</p></li><li><p><strong>Rigid</strong> &#8212; enforced and hard to change once data is in place.</p></li></ul><p>The upside is that data always stays strongly consistent and adherent to the schema.</p><h3>2) Folders (hierarchical data)</h3><p>With folders, every item (folder or note) can only <em>belong </em>to one folder. This massively limits the semantics that you can express via folder structures, which basically can only model strong, <em>exclusive ownership</em> relationships.</p><p>E.g. if you want meeting notes to sit in a &#8220;meeting notes&#8221; folder but also be included in the respective project folders, you can&#8217;t.</p><p>The upside of folders is that they make traversal extremely easy &#8212; as long as it&#8217;s done along the intended path.</p><h3>3) Graph relationships</h3><p>Portent&#8217;s take is that the upsides of relational and hierarchical models don&#8217;t matter nearly as much as in the past now that we have AI.</p><p>In fact:</p><ol><li><p>Once most information can be organized by AI agents, consistency can be enforced easily even in the absence of a <em>deterministic</em> way to do it with software.</p></li><li><p>Folder traversal simply doesn&#8217;t matter in a world where agents can grep and fetch anything.</p></li></ol><p>If we agree on this, simple default relationships work and scale better than anything else, because they create:</p><ul><li><p><strong>Less semantic surface</strong> &#8212; easier to understand for both humans and AI, because it&#8217;s the same concepts everywhere.</p></li><li><p><strong>Cross-type meaning</strong> &#8212; easier to work across multiple types (e.g. <em>find all &#8220;orphaned&#8221; notes == those that have no belongs_to and no related_to</em>)</p></li></ul><p>None of this is exactly new: graph DBs have been doing this since forever &#8212; I only argue this is the best way to build knowledge bases, especially now that we have AI.</p><p>Next, let&#8217;s talk of lifecycle &#128071;</p><div><hr></div><h2>&#128260; Lifecycle</h2><p>A common problem with knowledge bases is that it&#8217;s hard to keep them clean, understandable, and up to date. Portent encourages users to manage notes in three steps: <strong>Capture</strong>, <strong>Organize</strong>, and <strong>Archive</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_!fiqd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fiqd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png 424w, https://substackcdn.com/image/fetch/$s_!fiqd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png 848w, https://substackcdn.com/image/fetch/$s_!fiqd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png 1272w, https://substackcdn.com/image/fetch/$s_!fiqd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fiqd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png" width="1456" height="470" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:470,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119418,&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/198376374?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.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_!fiqd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png 424w, https://substackcdn.com/image/fetch/$s_!fiqd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png 848w, https://substackcdn.com/image/fetch/$s_!fiqd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png 1272w, https://substackcdn.com/image/fetch/$s_!fiqd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ce98f42-9873-4d3a-b923-8934818c97a3_2002x646.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These can be implemented as a status property for every note, and are meant to be enforced by your workflow somehow. </p><p>More on each:</p><h3>1) Capture</h3><p>The capture stage is only meant to make information <em>available</em>. Save that link for later, store those meetings notes, write down that thought in a random note.</p><p><em>Captured</em> notes are not clean nor tidy: they are a mess, and intentionally so. The capture stage is optimized for <em>speed</em>: just capture <em>everything</em>, and then we&#8217;ll see.</p><h3>2) Organize</h3><p>Once a note is captured, you have to ask yourself two questions about it:</p><ul><li><p><strong>What is this?</strong></p></li><li><p><strong>What should I do with it?</strong></p></li></ul><p>The first question drives <em>type</em> selection, while the second drives what relationships to create for it.</p><p>If you can&#8217;t attach any Project, Responsibility, Operation, or Topic to a note, then it means you can probably trash it. It&#8217;s totally fine to capture things and then realize it was a mistake: capture things optimistically, and organize pessimistically.</p><p>I organize my captured notes once a week, and I implemented this workflow directly in Tolaria, where the default section is the &#8220;Inbox&#8221; (aka not organized) list of notes, and you can flag any note as &#8220;organized&#8221; with cmd+E.</p><h3>3) Archive</h3><p>An underrated part of what makes for a good knowledge base is separating <em>current</em> from <em>obsolete</em> information. The latter can <em>still </em>be useful &#8212; think past projects, old meeting notes, etc &#8212; but you don&#8217;t want them to show up in your regular usage.</p><p>You should have a clear way to mark notes as &#8220;archived&#8221;, so that humans and AI can ignore them by default.</p><div><hr></div><h2>&#128268; Extending Portent</h2><p>These are the basic concepts in Portent, but are not meant to be the <em>only</em> ones that live in your knowledge base.</p><p>Once you have understood the basics (organization based on actionability, simple relationships, capture vs organize, etc), it&#8217;s easy to extend them and add more concepts.</p><p>Common ones in my experience are:</p><ul><li><p><strong>Calendar types</strong> &#8212; like years, quarters, and months. These are extremely clear concepts that will not pollute your base, and can be used to anchor and group things like projects, events, and more.</p></li><li><p><strong>Teams / areas </strong>&#8212; it&#8217;s useful sometimes to create larger groupings that represent domain or ownership areas, and attach PORT items to those.</p></li><li><p><strong>Note types</strong> &#8212; you may want to &#8220;split&#8221; the Note type into more ones: videos, resources, articles, etc. I am a fan of doing that with tag properties, instead of &#8220;root&#8221; Types, but you can do it either way.</p></li><li><p><strong>Specialized relationships </strong>&#8212; once you are sure about your model, it can be great to create a few specific relationships to <em>disambiguate </em>the use of the default ones. </p></li></ul><p>And of course it&#8217;s useful to create types that map to the domain language of your use cases. E.g. I write a newsletter and I have types for the Essays I write, Evergreen notes, Podcast interviews, and more.</p><div><hr></div><h2>&#128296; Tolaria implementation</h2><p>Portent can be implemented in any note taking system, but has special support in Tolaria.</p><p>I created a Portent <a href="https://github.com/refactoringhq/portent-vault-template">template vault here</a>, that you can clone and use in Tolaria.</p><p>Tolaria is good for Portent because:</p><h3>1) Lifecycle management</h3><p>Capture &#8594; Organize &#8594; Archive is directly supported in Tolaria:</p><ul><li><p>The Inbox section shows all notes that haven&#8217;t been organized yet</p></li><li><p>You can <em>organize</em> a note with cmd+E or the organize button in the editor bar</p></li><li><p>You can <em>archive</em> a note with the archive button, and it will hide from the default sections.</p></li></ul><h3>2) Types &amp; Relationships</h3><p>Tolaria is natively organized into Types and Relationships, and it suggests default relationships that are exactly the Portent ones.</p><h3>3) Multiple vaults</h3><p>If you want to use the same type system (Portent) for both life and work, you can create separate vaults and <em>mount </em>them together inside Tolaria for you to see, while maintaining separate access control for e.g. your co-workers.</p><div><hr></div><p>And that&#8217;s it for today! As always, let me know your thoughts on all of this!</p><p>I wish you a great week</p><p>Sincerely &#128075;<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Questions to rate your team, business impact on unhealthy code, and weekly readings 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #208]]></description><link>https://refactoring.fm/p/questions-to-rate-your-team-business</link><guid isPermaLink="false">https://refactoring.fm/p/questions-to-rate-your-team-business</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 18 May 2026 07:01:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oljK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.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>Every week I also <a href="https://refactoring.fm/s/essays?sort=top">write an article</a> about how to ship good software fast, and <a href="https://refactoring.fm/podcast">interview a world-class tech leader</a> on the podcast.</em></p><p><em>I also build and maintain <a href="https://refactoring.fm/p/introducing-tolaria">Tolaria</a> in the open, publishing my workflows and learnings here.</em></p><div><hr></div><h2>&#128203; <a href="https://getunblocked.com/?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=contextengine">Unblocked is the context layer for modern teams</a></h2><p><em>This newsletter is brought to you by <a href="https://getunblocked.com/?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=contextengine">Unblocked</a>!</em></p><p>Agents can generate code, but getting it right for your system, team conventions, and past decisions is the hard part. MCPs give agents access to information but not understanding &#8211; so you end up wasting time and tokens in correction loops.</p><p>For this reason, the teams pulling ahead <strong>use a context layer</strong> to give agents exactly what they need.</p><p>Unblocked is the context layer that turns <strong>code, docs, tickets, and conversations</strong> into actionable context, so engineers move faster and agents stay on track &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://getunblocked.com/?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=contextengine&quot;,&quot;text&quot;:&quot;Book a demo today&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://getunblocked.com/?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=contextengine"><span>Book a demo today</span></a></p><div><hr></div><h1>&#128269; Rate your team on the pyramid of engineering</h1><p>A couple of months ago I argued <a href="https://refactoring.fm/p/the-new-pyramid-of-software-engineering">there is a new </a><em><a href="https://refactoring.fm/p/the-new-pyramid-of-software-engineering">pyramid</a></em><a href="https://refactoring.fm/p/the-new-pyramid-of-software-engineering"> in software engineering</a>, made up of the areas you should take care of to get your team to their best potential.</p><p>These areas are <strong>Developer Experience</strong>, <strong>AI</strong>, and <strong>Product Engineering</strong>, and need to be <em>nurtured</em> exactly in this order.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oljK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oljK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png 424w, https://substackcdn.com/image/fetch/$s_!oljK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png 848w, https://substackcdn.com/image/fetch/$s_!oljK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png 1272w, https://substackcdn.com/image/fetch/$s_!oljK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oljK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png" width="1246" height="590" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:1246,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:146098,&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/197830947?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.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_!oljK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png 424w, https://substackcdn.com/image/fetch/$s_!oljK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png 848w, https://substackcdn.com/image/fetch/$s_!oljK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png 1272w, https://substackcdn.com/image/fetch/$s_!oljK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d76c1e-4942-4206-b9fd-524ca36f9947_1246x590.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To understand how you are doing about each of these, here is a short self-assessment you can run on yourself. Rate how much you agree, from 1 to 5:</p><h4>1) Developer Experience</h4><ul><li><p>1.1 &#8212; <em>It is easy to do work as a developer on my team</em></p></li><li><p>1.2 &#8212; <em>Engineers on my team get enough focus time</em></p></li><li><p>1.3 &#8212; <em>My team ships fast and often</em></p></li><li><p>1.4 &#8212; <em>I have a good strategy to improve the developer experience of my team</em></p></li></ul><h4>2) Artificial Intelligence</h4><ul><li><p>2.1 &#8212; <em>Engineers on my team make good use of AI</em></p></li><li><p>2.2 &#8212; <em>We have a shared understanding of how to use AI as a team</em></p></li><li><p>2.3 &#8212; <em>I have a good strategy to improve the impact of AI on my team</em></p></li></ul><h4>3) Product Engineering</h4><ul><li><p>3.1 &#8212; <em>I am happy with the level of autonomy the engineers on my team work with</em></p></li><li><p>3.2 &#8212; <em>Engineers on my team know what our customers&#8217; problems are</em></p></li><li><p>3.3 &#8212; <em>Engineers on my team know if a feature is successful or not</em></p></li><li><p>3.4 &#8212; <em>I have a good strategy to make the engineers on my team more autonomous over time</em></p></li></ul><p>You can find the full article below: </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:189655863,&quot;url&quot;:&quot;https://refactoring.fm/p/the-new-pyramid-of-software-engineering&quot;,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;title&quot;:&quot;The New Pyramid of Software Engineering &#127956;&#65039;&quot;,&quot;truncated_body_text&quot;:&quot;There are a lot of opinions around these days about the future of software, including of course my own.&quot;,&quot;date&quot;:&quot;2026-03-04T08:01:19.283Z&quot;,&quot;like_count&quot;:50,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-06-04T06:23:53.965Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-11-15T17:35:42.775Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:247311,&quot;user_id&quot;:6835984,&quot;publication_id&quot;:64099,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:64099,&quot;name&quot;:&quot;Refactoring&quot;,&quot;subdomain&quot;:&quot;refactoring&quot;,&quot;custom_domain&quot;:&quot;refactoring.fm&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Learn how to make your engineering team ship faster and better. Read weekly by 170,000+ engineers and managers&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;author_id&quot;:6835984,&quot;primary_user_id&quot;:6835984,&quot;theme_var_background_pop&quot;:&quot;#2096ff&quot;,&quot;created_at&quot;:&quot;2020-07-06T14:20:40.525Z&quot;,&quot;email_from_name&quot;:&quot;&#127744; Refactoring&quot;,&quot;copyright&quot;:&quot;Refactoring ETS&quot;,&quot;founding_plan_name&quot;:&quot;&#127942; Community plan&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79ab7b78-71cf-42d2-a607-3aa18960cb64_2400x572.png&quot;}}],&quot;twitter_screen_name&quot;:&quot;lucaronin&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000,&quot;status&quot;:{&quot;bestsellerTier&quot;:1000,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:1000},&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/the-new-pyramid-of-software-engineering?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CR5A!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" loading="lazy"><span class="embedded-post-publication-name">Refactoring</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The New Pyramid of Software Engineering &#127956;&#65039;</div></div><div class="embedded-post-body">There are a lot of opinions around these days about the future of software, including of course my own&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; 50 likes &#183; Luca Rossi</div></a></div><div><hr></div><h1>&#127897;&#65039; The business impact of code quality</h1><p>One of the interviews I keep coming back to is <a href="https://refactoring.fm/p/technical-debt-as-crime-scene-with">the one I did last year with Adam Tornhill</a>.</p><p>Adam is the founder of CodeScene and one of the sharpest thinkers on software quality: he combines behavioral data analysis with code metrics to identify the parts of a codebase that actually hurt you.</p><p>The conversation centered on a question most engineering leaders struggle with: <em>how do you make the business case for refactoring?</em></p><p>Adam&#8217;s team tackled it head-on with the <a href="https://codescene.com/hubfs/web_docs/Business-impact-of-code-quality.pdf">Code Red</a> study &#8212; a large-scale analysis of the correlation between code health and real development performance.</p><p>Their findings confirmed what many engineers know by heart:</p><ul><li><p>&#9889; <strong>Development Speed</strong> &#8212; healthy code enables teams to develop features more than <em>2x as fast</em> as unhealthy code.</p></li><li><p>&#128201; <strong>Predictability</strong> &#8212; unhealthy code creates <em>massive</em> <em>variance</em> in task completion times, making estimation extremely hard.</p></li><li><p>&#128184; <strong>Hidden Costs</strong> &#8212; some tasks in unhealthy code can take up to <em>10 times longer</em> than expected.</p></li></ul><blockquote><p><em>&#8220;Doing a task in unhealthy code can actually take up to an order of magnitude longer &#8212; 9 times, 10 times longer. And that translates into a bunch of undesirable side effects for the business.&#8221;</em></p></blockquote><p>One finding that stuck with me is also that <em>who makes the change</em> matters enormously. Developers unfamiliar with the codebase take twice as long to work in unhealthy code. This is a hidden onboarding cost that nobody ever budgets for, but that compounds every time a team grows or rotates.</p><p>Here is the full interview with Adam &#128071;</p><div id="youtube2-PhWtlhfrsWI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;PhWtlhfrsWI&quot;,&quot;startTime&quot;:&quot;5s&quot;,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/PhWtlhfrsWI?start=5s&amp;rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>You can also find it on <a href="https://open.spotify.com/episode/43w7PeVAdGpSTqnRQz7EeV">Spotify</a> and <a href="https://refactoring.fm/p/technical-debt-as-crime-scene-with">Substack</a></p><div><hr></div><h1>&#128218; Weekly Readings</h1><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://www.seangoedecke.com/software-engineering-may-no-longer-be-a-lifetime-career/">Software Engineering May No Longer Be a Lifetime Career</a></h4><h5>6 min &#8226; by Sean Goedecke</h5><p>Using AI to code means you don&#8217;t learn as much about coding itself, but refusing to use it puts you at a disadvantage <em>today</em>. So, is software engineering becoming more like professional sports? That is, a career with a finite window rather than a lifetime of compounding skill accumulation.</p><div><hr></div><h4>&#129352; <a href="https://about.gitlab.com/blog/gitlab-act-2/">GitLab Act 2</a></h4><h5>19 min &#8226; by Bill Staples</h5><p>GitLab&#8217;s CEO lays out their vision and plan for a major restructuring of the company around agentic AI and the future of software delivery. Interesting both as a product vision and as a case study in leading a public company through a platform shift.</p><div><hr></div><h4>&#129353; <a href="https://x.com/garrytan/status/2042925773300908103/">Thin Harness, Fat Skills</a></h4><h5>6 min &#8226; by Garry Tan</h5><p>By now we know that AI agents become far more productive by using purpose-built skills. It&#8217;s still unclear how all of this scales, but Garry&#8217;s mental model about growing <em>skills</em> instead of the general harness is solid, and I agree with him.</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[The State of Product Development 🔍 — with Doug Peete]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 63]]></description><link>https://refactoring.fm/p/the-state-of-product-development-22a</link><guid isPermaLink="false">https://refactoring.fm/p/the-state-of-product-development-22a</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 15 May 2026 07:02:44 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/197536623/6e5b5b7218ca632601411b630c6f222d.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-lt6R720G2sw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;lt6R720G2sw&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/lt6R720G2sw?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:</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="http://getunblocked.com/refactoring" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eEtG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 424w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 848w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 1272w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eEtG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png" width="152" height="32.78021978021978" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:314,&quot;width&quot;:1456,&quot;resizeWidth&quot;:152,&quot;bytes&quot;:174076,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;http://getunblocked.com/refactoring&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/197536623?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!eEtG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 424w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 848w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 1272w, https://substackcdn.com/image/fetch/$s_!eEtG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F303c8adb-e06a-4879-bd48-0d62d3bc0467_8042x1737.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><em><strong><a href="http://getunblocked.com/refactoring">Unblocked</a></strong> is the context layer for modern engineering teams. Get a free three-week trial at</em> <em><strong><a href="http://getunblocked.com/refactoring">getunblocked.com/refactoring</a></strong></em></p></blockquote><div><hr></div><p>Today&#8217;s guest is <strong><a href="https://www.linkedin.com/in/doug-peete-95230b/">Doug Peete</a></strong>, Chief Product Officer at <a href="https://atono.io/">Atono</a>, with whom over the last few months we have developed a deep industry report about the state of product development.</p><p>In this chat we&#8217;ll go through the main findings of the report, match them to our respective experience and explore ideas about how teams can do better with product development and AI.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;7d2e5172-9ecc-4895-8dae-654fcb511ad4&quot;,&quot;caption&quot;:&quot;Once or twice a year we run a deep research survey in our newsletter to better understand trends in software development. We do this to collect broad, quantitative data, that complements the qualitative opinions we already get from podcast interviews, from our private community, and from my own 1:1 conversations.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The State of Product Development 2026&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-03-11T09:49:05.392Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1dc5892c-24ee-4531-9e82-ae4584df99f0_2302x1534.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/the-state-of-product-development&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:190368764,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:58,&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>&#129351; Interview Summary</h2><p>If you are a <strong>&#128274; paid subscriber &#128274;</strong> you will find my own <em>summary</em> of the interview below.</p><p>It&#8217;s the <strong>5-minute takeaways</strong> of what we talked about, with timestamps to the relevant video moments, for those who don&#8217;t have time to sit through the 1-hour chat.</p><p>Here is the agenda for today:</p><ol><li><p><strong>&#128203; Why planning is so fragile</strong></p></li><li><p><strong>&#128221; The requirements problem</strong></p></li><li><p><strong>&#129504; Knowledge sharing and tribal knowledge</strong></p></li><li><p><strong>&#129302; AI adoption: individual vs. team</strong></p></li><li><p><strong>&#9999;&#65039; AI for product specs, the untapped opportunity</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/the-state-of-product-development-22a">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Orchestrate AI Workflows]]></title><description><![CDATA[Navigating tradeoffs between pure AI and deterministic software]]></description><link>https://refactoring.fm/p/how-to-orchestrate-ai-workflows</link><guid isPermaLink="false">https://refactoring.fm/p/how-to-orchestrate-ai-workflows</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 13 May 2026 07:15:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/49db2463-e225-45ef-b6b9-333a935beb35_2478x1634.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a <strong>weekly essay</strong> from Refactoring.</em></p><p><em>Every week I <a href="https://refactoring.fm/s/essays?sort=top">write an article</a> about how to ship fast and make good software, and <a href="https://refactoring.fm/podcast">interview a world-class tech leader</a>. I also build and maintain <a href="https://refactoring.fm/p/introducing-tolaria">Tolaria</a> in the open, publishing my workflows and learnings here.</em></p><p><em>Refactoring is read every week by 170,000+ engineers and managers from all over the world </em>&#128591;&#128583;&#8205;&#9794;&#65039;</p><div><hr></div><p>Hey there! Last week&#8217;s article about <a href="https://refactoring.fm/p/how-i-run-the-tolaria-project">my workflows for Tolaria</a> went incredibly well, and I got a ton of replies and questions via email.</p><p>One of the most recurring ones was: what&#8217;s next? How would you improve this?</p><p>Happy to answer. I have been building AI workflows for a while now, and, for the most part, I have done so in &#8220;100% AI mode&#8221; &#8212; that is, I tell an agent to do something recurringly, in natural language, and they do it.</p><p>These workflows are fast to ship and *mostly* work, but also have pretty obvious drawbacks, that I would love to discuss today.</p><p>I believe this is relevant because these days we are inundated by stories like: &#8220;n8n is dead!&#8221;, &#8220;it&#8217;s all agents calling agents!&#8221;, and so on, while reality is more complicated.</p><p>I also bounced a lot of ideas off with the team at <a href="https://kestra.io/">Kestra</a>, who runs an awesome open source platform for orchestrating workflows. Their help came at the perfect time, and we basically wrote this piece together.</p><p>So here is the agenda:</p><ul><li><p><strong>&#129529; Cleaning up releases</strong> &#8212; starting from a real-world example.</p></li><li><p><strong>&#9878;&#65039; AI vs Orchestration</strong> &#8212; mapping pros and cons of how to run workflows.</p></li><li><p><strong>&#127959;&#65039; Agents as scaffolding</strong> &#8212; a useful mental model about going AI first, but gradually <em>replacing</em> it with code.</p></li><li><p><strong>&#128506;&#65039; Workflow engineering journey</strong> &#8212; a maturity model for developing your workflows.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><p><em>Disclaimer: I am thankful to <a href="https://kestra.io/">Kestra</a> for partnering on this piece 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://kestra.io/&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://kestra.io/"><span>Learn more about Kestra</span></a></p><p><em>However, as always I will only write my unbiased opinion on the practices and tools covered, Kestra included.</em></p><div><hr></div><h2><strong>&#129529;</strong> Cleaning up releases</h2><p>To stay grounded and make you understand what I mean when I say <em>workflows</em>, let&#8217;s take a practical example. Whenever I create a new stable release for Tolaria, I have an automation to take care of the release&#8217;s <em>aftermath</em>.</p><p>This includes fetching all the bug fixes and feature requests that were <em>shipped</em> in the release, and update/close them in the respective channels, notifying the relevant users.</p><p>This is not rocket science by any means, but it involves a number of steps:</p><ol><li><p>Fetch Github commits shipped with release</p></li><li><p>Match commits to the associated tasks on Todoist</p></li><li><p>For each task, retrieve the <em>original</em> entry either on Github Issues, or the Canny <a href="https://tolaria.canny.io/">product board</a></p></li><li><p>For each Github issue, leave a comment saying this is fixed in the latest release, and close the issue</p></li><li><p>For each Canny item, leave a comment explaining how this was implemented in the latest release, and close the item</p></li><li><p>Finally, create short descriptive release notes to be attached to the <a href="https://refactoringhq.github.io/tolaria/">release page</a>.</p></li></ol><p>The first version of this was entirely run by AI. No scripts &#8212; just a few high-level skills about how to access Github Issues, Canny, and Todoist &#8212; and natural language instructions about what needed to happen.</p><p>This mostly works. Sure, it is slow and expensive, but that&#8217;s forgivable given that I need to run it at most once per day. The problems come when it <em>doesn&#8217;t</em> work for any reason.</p><p>Say Github issues are not available at that specific time (ofc fantasy example given Github&#8217;s <a href="https://mrshu.github.io/github-statuses/">immaculate availability</a> lately), or the run times out, or your favorite AI provider rate limits you in that very moment.</p><p>At that point the workflow fails, and it typically does so in the worst possible way: 1) silently, 2) leaving things in a dirty state, and 3) without any retry or recovery.</p><p>Of course you may <em>build</em> all of these into the procedure somehow, but if you find yourself manually plumbing standard ideas about how we have been running workflows since... forever, you should probably stop and ask yourself if there is a better way.</p><p>So let&#8217;s take a step back and think through this from first principles.</p><div><hr></div><h2><strong>&#9878;&#65039;</strong> Pure AI vs Orchestration</h2><p>The tradeoffs between pure AI workflows (e.g. cron jobs on OpenClaw) and orchestration platforms a-la Kestra, resemble a lot those between AI and deterministic software.</p><p>AI is incredibly smart, but also incredibly expensive and slow. A lot of work just doesn&#8217;t need those <em>smarts</em>. Routing, retries, conditionals, scheduling &#8212; there is just a lot of plumbing that can be done in a purely deterministic way, saving time &amp; money.</p><p>Also, traditional orchestration doesn&#8217;t only win on time and money: it is often a better choice <em>full stop</em> when you account for:</p><ul><li><p><strong>Observability</strong> &#8212; you can&#8217;t debug pure LLM reasoning, as you can instead with workflow steps that are explicit and isolated. Also you get execution history, stats, and much more.</p></li><li><p><strong>Reliability</strong> &#8212; scheduling, resiliency, recovery from failures. This should be all built-in.</p></li><li><p><strong>Scalability</strong> &#8212; this is probably not a factor on its own, but more the result of all of the above combined. Being able to scale requires reliability, observability, low latency, and so on.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OZfE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OZfE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png 424w, https://substackcdn.com/image/fetch/$s_!OZfE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png 848w, https://substackcdn.com/image/fetch/$s_!OZfE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!OZfE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OZfE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png" width="728" height="412.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:825,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:256292,&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/197106828?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.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_!OZfE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png 424w, https://substackcdn.com/image/fetch/$s_!OZfE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png 848w, https://substackcdn.com/image/fetch/$s_!OZfE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!OZfE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b240d20-18d6-4292-a2fc-2c43fb8c8e64_2008x1138.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So where do we go from here?</p><div><hr></div><h2>&#127959;&#65039; Agents as scaffolding</h2><p>A few weeks ago, Will Larson published an <a href="https://lethain.com/agents-as-scaffolding/">awesome piece</a> about using agents as <em>scaffolding</em> for recurring tasks, which means: a useful <em>first pass</em> to discover what the workflow should be.</p><p>Then, once the pattern is known, you should <em>extract</em> and <em>harden</em> as much as you can into deterministic code. So agentic steps are largely used as &#8204;prototyping tools, not permanent infrastructure.</p><p>This doesn&#8217;t mean eventually replacing <em>all</em> of the AI, but rather only using AI for the right things. With some degree of simplification:</p><ul><li><p><strong>Orchestration wins at all-things-infra</strong> &#8212; observability, reliability, human-in-the-loop approvals, structured output validation, and so on.</p></li><li><p><strong>AI wins at the</strong> <em><strong>messy</strong></em> <strong>stuff</strong> &#8212; classification, summarization, judgment calls, and all the things you can&#8217;t write code for.</p></li></ul><p>I love this take, and I think we can <em>expand</em> it into an actual maturity journey &#128071;</p><div><hr></div><h2><strong>&#128506;&#65039;</strong> Workflow engineering journey</h2><p>Based on this, a natural progression may look like this:</p><ol><li><p><strong>Agent-first</strong> &#8212; everything in a loop, fast to prototype, but opaque to debug.</p></li><li><p><strong>Isolate the deterministic parts</strong> &#8212; pull out the boring steps (fetch, validate, store, etc) into explicit code. Keep AI for judgment calls.</p></li><li><p><strong>Structured orchestration</strong> &#8212; proper DAG / event-driven layer with retries, lineage, observability. AI becomes one task type among many.</p></li><li><p><strong>AI-driven composability</strong> &#8212; LLMs generate or modify the workflow definitions themselves. The orchestration layer is stable enough to be a target for code generation.</p></li></ol><p>I am particularly bullish about #4 because, when you think about it, it is a way to get the best of both worlds: you prompt the AI in natural language as you would for normal agentic workflows, but the AI actually turns that into structured, semi-deterministic 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_!Ppb9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ppb9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png 424w, https://substackcdn.com/image/fetch/$s_!Ppb9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png 848w, https://substackcdn.com/image/fetch/$s_!Ppb9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png 1272w, https://substackcdn.com/image/fetch/$s_!Ppb9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ppb9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png" width="1456" height="426" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:426,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131722,&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/197106828?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.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_!Ppb9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png 424w, https://substackcdn.com/image/fetch/$s_!Ppb9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png 848w, https://substackcdn.com/image/fetch/$s_!Ppb9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png 1272w, https://substackcdn.com/image/fetch/$s_!Ppb9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8c546d1-241f-4e91-9df0-9faa549aaff4_1854x542.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A quick plug to <a href="https://kestra.io/">Kestra</a> on this, which I am a big fan of. Because if you <em>agree</em> with these steps, a natural question becomes: what should an orchestration platform look like to enable AI to operate it? Kestra checks a lot of my boxes:</p><ul><li><p><strong>Code-first</strong> &#8212; the AI should be able to write workflows in a declarative fashion, with code, because that&#8217;s what it&#8217;s best at (as opposed to e.g. GUIs).</p></li><li><p><strong>API/CLI first</strong> &#8212; trigger executions and manage workflows through API</p></li><li><p><strong>Open source</strong> &#8212; these days, considering the speed tech is moving at, I put a lot of value on the tools I use being open source, so we can evolve them faster as a community, in the open, and there is less lock-in.</p></li></ul><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[Blank pages, decisions, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #207]]></description><link>https://refactoring.fm/p/blank-pages-decisions-and-weekly</link><guid isPermaLink="false">https://refactoring.fm/p/blank-pages-decisions-and-weekly</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 11 May 2026 07:01:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ymRD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a></em></p><div><hr></div><blockquote><h2>Become an investor in AI infra startups! &#10024;</h2><p><em>Today&#8217;s sponsor is <a href="https://www.av.vc/ai-tools-syndicate?utm_medium=email&amp;utm_source=tofu&amp;utm_content=partner-follow-up&amp;utm_campaign=RefactoringMayASend#easyvest">Alumni Ventures</a>!</em></p><p>If you ever thought about doing some angel investing in AI products you like, you can do so via our friends at Alumni Ventures, that give you <a href="https://d5w9-p04.na1.hs-sales-engage.com/Ctc/L3+23284/d5W9-p04/JlY3pr4cW95jsWP6lZ3lCW4fXfmr8VCyLDN5wjD5YHtbdmW39fMnp6fm55QW1vkDkG5jTCMGMgHSJFFxb7cVMPJmS5pgTLPN304H72Mywh8N53XDCcgy-J-VBmqD63MbKrvW6kBQj12n3v_sW7CT43d5s1thWW2RKLTd5qqWrsW7bVZZw8Ch7F8W43X0Nd2Tvzc9W8QKLPX2jQZKvW7q_ZHB95gD52W9hb7w-5xH4hJW5-stdH7kvW1dW7XgGpy5Mz_bfW55bGXx2cMjLcW7jpTNC7nLHVZW3J0y2c7_YvdsW4g5Gn_67_s-sW7SqkRw3xMfQBW7bNVM_7bfbYpW6ThQ051M1lTgW6rn-G865jT2XW4cXtks6zcm8tW3qXHRp1q7XCgW8ryst55knr1Mf8cCqkF04">access to high-growth startup opportunities</a>, co-invested alongside top VC firms like Andreessen Horowitz (a16z), Bessemer, &amp; YCombinator.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ymRD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ymRD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png 424w, https://substackcdn.com/image/fetch/$s_!ymRD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png 848w, https://substackcdn.com/image/fetch/$s_!ymRD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!ymRD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ymRD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png" width="684" height="342" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:684,&quot;bytes&quot;:140499,&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/196796659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.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_!ymRD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png 424w, https://substackcdn.com/image/fetch/$s_!ymRD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png 848w, https://substackcdn.com/image/fetch/$s_!ymRD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!ymRD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf754e5d-f2ee-4225-b0bf-c97c2a6218ad_2600x1300.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can signup for free and get:</p><ul><li><p>A curated deal flow of high-potential AI infrastructure startups</p></li><li><p>Deals in which AV is already investing alongside elite lead venture firms</p></li><li><p>No cost to see deals, and no obligation to invest</p></li></ul><p><strong><a href="https://www.av.vc/ai-tools-syndicate?utm_campaign=RefactoringMayASend&amp;utm_medium=email&amp;utm_content=partner-follow-up&amp;utm_source=tofu#easyvest">Join Alumni Ventures AI Infrastructure Syndicate Today &#8594;</a></strong> </p></blockquote><div><hr></div><h1>&#128161; Never start from a blank page</h1><p>A lot of people ask me how I take notes and write articles &#8212; even more so recently, since I <a href="https://refactoring.fm/p/how-i-run-the-tolaria-project">shipped Tolaria</a>.</p><p>I have often talked about this in the newsletter. I am quite opinionated about it, and a lot of these opinions made it into Tolaria. </p><p>One of these is about the (in)famous <strong>blank page</strong>.</p><p>There is this romantic view of writers sitting in front of a blank page and crafting their work through sheer inspiration. In reality, if you&#8217;re starting from nil, you&#8217;re doing it wrong.</p><p>About this, I love a famous quote from an Italian singer-songwriter, who once was asked how long it takes to write a song. He said:</p><blockquote><p><em>&#8220;It takes me about 10 minutes &#8212; but only if I spend the rest of my life making sure that eventually it takes me 10 minutes.&#8221;</em></p></blockquote><p>This applies to all knowledge work. Good writing is about <em>connecting</em> and <em>refining</em> ideas you already captured, rather than creating from scratch. The prep work <em>is</em> the work.</p><p>To make prep work easier, I am a big believer in dividing it into multiple steps:</p><ul><li><p><strong>Capture</strong> &#8212; store the thought on a durable support.</p></li><li><p><strong>Organize</strong> &#8212; refine it, place it where you&#8217;ll need it, and connect it to other thoughts.</p></li><li><p><strong>Express</strong> &#8212; use it to do something larger.</p></li></ul><p>These are <em>different tasks</em>, and are best done at different times. Conflating them leads to predictable failure modes:</p><ul><li><p>Capture + Organize leads to <em>exhaustion</em> (every note becomes a chore).</p></li><li><p>Organize + Express leads to <em>chaos</em> (missed insights, no scalability).</p></li><li><p>All three at once leads to <em>writer&#8217;s block</em>.</p></li></ul><p>Luhmann&#8217;s Zettelkasten and Tiago Forte&#8217;s CODE system are both built around this separation. You don&#8217;t need to follow either to the letter, but the principle matters.</p><p>I wrote a full piece about note taking a while back &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:170699182,&quot;url&quot;:&quot;https://refactoring.fm/p/how-to-take-notes&quot;,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;title&quot;:&quot;How To Take Notes &#127793;&quot;,&quot;truncated_body_text&quot;:&quot;Hey there! Last week we had our book club review of How to Take Smart Notes, by S&#246;nke Ahrens.&quot;,&quot;date&quot;:&quot;2025-08-13T07:02:05.589Z&quot;,&quot;like_count&quot;:53,&quot;comment_count&quot;:3,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-06-04T06:23:53.965Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-11-15T17:35:42.775Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:247311,&quot;user_id&quot;:6835984,&quot;publication_id&quot;:64099,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:64099,&quot;name&quot;:&quot;Refactoring&quot;,&quot;subdomain&quot;:&quot;refactoring&quot;,&quot;custom_domain&quot;:&quot;refactoring.fm&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Learn how to make your engineering team ship faster and better. Read weekly by 170,000+ engineers and managers&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;author_id&quot;:6835984,&quot;primary_user_id&quot;:6835984,&quot;theme_var_background_pop&quot;:&quot;#2096ff&quot;,&quot;created_at&quot;:&quot;2020-07-06T14:20:40.525Z&quot;,&quot;email_from_name&quot;:&quot;&#127744; Refactoring&quot;,&quot;copyright&quot;:&quot;Refactoring ETS&quot;,&quot;founding_plan_name&quot;:&quot;&#127942; Community plan&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79ab7b78-71cf-42d2-a607-3aa18960cb64_2400x572.png&quot;}}],&quot;twitter_screen_name&quot;:&quot;lucaronin&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000,&quot;status&quot;:{&quot;bestsellerTier&quot;:1000,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:1000},&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/how-to-take-notes?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CR5A!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" loading="lazy"><span class="embedded-post-publication-name">Refactoring</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">How To Take Notes &#127793;</div></div><div class="embedded-post-body">Hey there! Last week we had our book club review of How to Take Smart Notes, by S&#246;nke Ahrens&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">10 months ago &#183; 53 likes &#183; 3 comments &#183; Luca Rossi</div></a></div><div><hr></div><h1>&#127897;&#65039; Principles for better decisions</h1><p>One of the interviews I go back to the most often is the one I did last year with Annie Duke. </p><p>Annie is a former world-class poker player, author of <em>Thinking in Bets</em>, and one of the clearest thinkers on decision-making.</p><p>The conversation was packed with useful frameworks, and one that stuck with me was her four-principle checklist for high-quality decisions:</p><ul><li><p><strong>Speed assessment</strong> &#8212; before anything else, decide how much time this decision deserves. Ask: how long-term is the impact, and how reversible is it? Spend time and effort accordingly.</p></li><li><p><strong>Make the implicit explicit</strong> &#8212; we often decide by &#8220;feel.&#8221; Annie&#8217;s view, instead, is to articulate what that gut feeling actually is. What are the real criteria? Making reasoning explicit helps you catch flawed logic before you commit, and makes it harder to rationalize a bad choice after the fact.</p></li><li><p><strong>Quantify qualitative opinions</strong> &#8212; instead of calling a market &#8220;great,&#8221; rate it. Even in a shallow way, e.g. on a scale from 1 to 10. This forces precision and, in teams, surfaces hidden disagreements otherwise masked by vague language.</p></li><li><p><strong>Collect opinions independently</strong> &#8212; never gather important input in a group setting. Anchoring bias and groupthink are real. Collect individual perspectives first, then compare differences without forcing consensus.</p></li></ul><p>Here is the full interview with Annie:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b937e090-d377-4987-be17-5ce1f38e5216&quot;,&quot;caption&quot;:&quot;Today's guest is Annie Duke, who is a former world-class professional poker player and one of the world's top experts on decision-making. She's a bestseller author and coach of many tech founders and teams.&quot;,&quot;cta&quot;:&quot;Watch now&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Thinking in Bets for Engineers &#127922;&#8212; with Annie Duke&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;2025-08-01T06:02:15.453Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/p8HAJh52DaE&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/thinking-in-bets-for-engineers-with&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;7755b2e2-da54-4316-82ff-24d3fd49836e&quot;,&quot;id&quot;:169735574,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:22,&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><h1>&#128218; Weekly Readings</h1><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://randsinrepose.com/archives/sometimes-your-job-is-to-get-in-the-way/">Sometimes Your Job Is to Get in the Way</a></h4><h5>5 min &#8226; by Rands</h5><p>Good leaders know when to stay out of the way &#8212; but <em>great</em> leaders also know when to step in and draw a hard line. Fantastic story by Rands, about how a major Slack outage led to a complete transformation of their development process, driven by strong leadership.</p><div><hr></div><h4>&#129352; <a href="https://larahogan.me/blog/why-cant-they-just-revisited/">Why Can&#8217;t They Just&#8230;</a></h4><h5>5 min &#8226; by Lara Hogan</h5><p>&#8220;Why can&#8217;t they just&#8230;&#8221; is a phrase we all use when frustrated with other teams or roles. Instead of dismissing it, Lara explains how to use it as a signal to dig into the <em>complexities</em> behind decisions you don&#8217;t understand, and turn frustration into collaborative problem-solving. Loved it.</p><div><hr></div><h4>&#129353; <a href="https://kristoff.it/blog/contributor-poker-and-ai/">Contributor Poker and AI</a></h4><h5>6 min &#8226; by Loris Cro</h5><p>Open source maintainers don&#8217;t bet on PRs, they bet on <em>contributors</em>. This is a great take by Zig and the best articulated thesis I have heard about banning AI-generated contributions. Worth a 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;Make your team ship faster!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://refactoring.fm/subscribe?"><span>Make your team ship faster!</span></a></p><p>See you next week!<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[How I Run the Tolaria Project]]></title><description><![CDATA[All the workflows I built to run a big open source project in 2026]]></description><link>https://refactoring.fm/p/how-i-run-the-tolaria-project</link><guid isPermaLink="false">https://refactoring.fm/p/how-i-run-the-tolaria-project</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 06 May 2026 07:02:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!l86n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54c9266c-bec7-4d92-b70a-f28872bf620b_4578x2906.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, Luca here! As you probably know by now, two weeks ago I launched <a href="https://github.com/refactoringhq/tolaria">Tolaria</a>, a desktop app for Mac, Linux, and Windows, to manage markdown knowledge bases &#8212; for humans and AI.</p><p>I did that to solve my own problems and to get my hands dirty with AI coding. In other words, I wanted to <em>walk the talk</em>, and then write about it here on Refactoring.</p><p>Little did I know this would feel more like <em>speedrunning</em> the talk.</p><p>Tolaria has now several thousand daily users, <strong>10K stars on Github</strong>, and last week it was the 10th fastest growing repo&#8230; in the world, as measured by <a href="https://www.star-history.com/">Star History</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wpw7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wpw7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wpw7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg" width="312" height="442.16883116883116" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:873,&quot;width&quot;:616,&quot;resizeWidth&quot;:312,&quot;bytes&quot;:324594,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/196524187?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wpw7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wpw7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04021c4d-c0c4-41e0-88c6-1bd68d69a8c6_616x873.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Last week&#8217;s chart on Star History</figcaption></figure></div><p>To put things in context, there are only about ~5K repos in the world with more than 10K stars, out of ~30M.</p><p>This is of course, incredibly flattering and energizing, but I also joked with friends that I have been glued to my chair non-stop for these two weeks, because all this interest also posed very real operational problems.</p><p>Users, in fact, who are mostly engineers, contributed <em>hard</em> &#8212; and I am glad they did! As of today, Tolaria has received:</p><ul><li><p>200+ issues on Github</p></li><li><p>150+ PRs</p></li><li><p>150+ feature requests on <a href="https://tolaria.canny.io/">Canny</a></p></li></ul><p>So I had to create workflows to help handle all of this: to ensure issues would be fixed fast and people would get feedback about ideas and contributions.</p><p>Fast forward to today, I am pretty happy with how it is going, and as I write this, we are down to:</p><ul><li><p>15 open issues</p></li><li><p>11 PRs</p></li><li><p>81 feature requests</p></li></ul><p>Today&#8217;s newsletter covers all these workflows and how I &#8220;survived&#8221; these two weeks, while only working part-time on Tolaria, and the rest of the time on Refactoring &#8212; in the meantime I also had to publish 4 newsletter editions and 2 podcast episodes.</p><p>So here is the agenda:</p><ul><li><p>&#128229; <strong>Inputs</strong> &#8212; mapping and normalizing sources and channels.</p></li><li><p>&#128451;&#65039; <strong>Backlog</strong> &#8212; turning everything into a single prioritized list from which agents can take work.</p></li><li><p>&#128269; <strong>Validation</strong> &#8212; is it the one true bottleneck, as everyone is fond of saying these days?</p></li><li><p>&#128640; <strong>Release</strong> &#8212; making work available to everyone and updating all the input sources.</p></li><li><p>&#128202; <strong>Analytics</strong> &#8212; tracing what happens in production.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><h2>&#128229; Inputs</h2><p>I have never maintained a sizable open source project before, so you&#8217;ll forgive me if some of what I am about to say will sound trivial to you.</p><p>At any given time, there are several types of inputs Tolaria receives, that can <em>spawn</em> work to be done:</p><ol><li><p>Bug reports from users</p></li><li><p>Feature requests from users</p></li><li><p>PRs from contributors</p></li><li><p>Crash reports from telemetry (Sentry)</p></li><li><p>My own ideas (hello &#128075;)</p></li></ol><p>These are all separate channels but, with some degree of simplification, they spawn two types of work: <em>bugs</em> and <em>features</em>.</p><p>More specifically:</p><ul><li><p>#1 and #4 spawn bugs</p></li><li><p>#2 and #5 spawn features.</p></li><li><p>#3 (PRs) can spawn either, but mostly features.</p></li></ul><p>#1, #2, and #3 originally all lived in Github Issues, but bugs and feature requests have different <em>needs</em> and deserve to live in separate places. In fact:</p><ul><li><p><strong>Bugs</strong> &#8212; only need to be replicated and squashed as soon as possible. I am a strong believer in a zero-bugs policy: catching bugs as soon as they are reported, and fixing them all ASAP. All in all, there is very little to decide about bugs.</p></li><li><p><strong>Feature requests</strong> &#8212; are another story. They benefit from being voted on (you want to see how many people want something), are generally <em>bigger,</em> so you may want to flag things as <em>planned</em> or <em>in progress</em> so users are notified, need to be <em>specced</em>, and, of course, you don&#8217;t want to build those that don&#8217;t match your vision. That&#8217;s a lot more to decide.</p></li></ul><p>From a workflow standpoint, bugs are easy, features are not &#8212; which is why today we are down to only 15 open bugs out of 200, but still 80+ open feature requests out of 150.</p><p>The way I manage this is by keeping bugs on <a href="https://github.com/refactoringhq/tolaria/issues">Github Issues</a>, and feature requests on a <a href="http://tolaria.canny.io/">separate product board</a> on Canny.</p><p>To make people understand this, I created a rich &#8220;contribute&#8221; panel inside Tolaria where you are <em>routed</em> to different places based on how you want to help:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zdac!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zdac!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 424w, https://substackcdn.com/image/fetch/$s_!zdac!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 848w, https://substackcdn.com/image/fetch/$s_!zdac!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 1272w, https://substackcdn.com/image/fetch/$s_!zdac!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zdac!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png" width="1456" height="1286" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1286,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1128079,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/196524187?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zdac!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 424w, https://substackcdn.com/image/fetch/$s_!zdac!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 848w, https://substackcdn.com/image/fetch/$s_!zdac!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 1272w, https://substackcdn.com/image/fetch/$s_!zdac!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa577ff8-ddaf-450d-94c9-9e1d1e892ee0_1884x1664.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Still a lot of things go wrong all the time:</p>
      <p>
          <a href="https://refactoring.fm/p/how-i-run-the-tolaria-project">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Personal leverage, junior engineers, and weekly reading 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #206]]></description><link>https://refactoring.fm/p/personal-leverage-junior-engineers</link><guid isPermaLink="false">https://refactoring.fm/p/personal-leverage-junior-engineers</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 04 May 2026 07:01:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vgH8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>.</em></p><div><hr></div><blockquote><h2><a href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Stop babysitting your agents!</a> &#128581;&#8205;&#9794;&#65039;</h2><p><em>Today&#8217;s newsletter is brought to you by <a href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">our friends at Unblocked</a>!</em></p><p>Agents can generate code, we know it.</p><p>But getting it right for our system, conventions, and past decisions is still the hard part &#8212; we waste time and tokens in correction loops. Patching many MCPs together may give agents access to <em>information</em>, but not necessarily <em>understanding</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vgH8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vgH8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vgH8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png" width="686" height="343" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:686,&quot;bytes&quot;:256566,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/196095778?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vgH8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!vgH8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71ddf9af-32fa-4c71-8d56-70516bfbfb84_1200x600.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That&#8217;s why I am a fan of what <a href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Unblocked</a> is building with their <strong>context engine</strong> &#8212; giving agents exactly what they need to <em>understand</em> things and succeed. <a href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Join their webinar on May 6th (free)</a> to see:</p><ul><li><p>Where teams get stuck on the AI maturity curve</p></li><li><p>How a context engine solves for quality, efficiency, and cost</p></li><li><p>Live demo: the same coding task with and without a context engine</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary&quot;,&quot;text&quot;:&quot;Learn more and register!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.getcontrast.io/register/unblocked-how-to-stop-babysitting-your-agents?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary"><span>Learn more and register!</span></a></p></blockquote><div><hr></div><h1>&#128161; Personal leverage is now unlimited</h1><p>A couple of months ago I wrote about <a href="https://refactoring.fm/p/my-experience-with-openclaw">my experience with OpenClaw</a> &#8212; what I do with it, what procedures it runs automatically, and so on.</p><p>I also argued that the story of OpenClaw itself seems to point to the idea that a good solo engineer can now achieve&#8230; pretty much anything. Look at the progression of AI assistants and coding tools:</p><ol><li><p>At first, it was VS Code + Copilot. Created by Github/Microsoft, which is a big tech.</p></li><li><p>Copilot was surpassed by Cursor, created by a team around 1/100th its size.</p></li><li><p>Cursor was then surpassed by Claude Code, which has been created literally by 2 engineers inside Anthropic, and whose team to this day is ~20 engineers.</p></li><li><p>OpenClaw has been created by Peter Steinberger. That&#8217;s it.</p></li></ol><p>In my (very small, comparably) experience with <a href="https://github.com/refactoringhq/tolaria">Tolaria</a>, I am seeing this as well. If you are equipped with the right set of ingredients, it&#8217;s hard now to see the limits of what a single engineer can do. But what are these ingredients? To me it&#8217;s:</p><ol><li><p><strong>&#128295; Tech skills</strong> &#8212; you still need these! Especially to steer a sizable project. E.g. Peter is first and foremost a world-class engineer.</p></li><li><p>&#129489;&#8205;&#127859; <strong>Taste</strong> &#8212; your personal taste for what good looks like, your domain expertise, how knowledgeable you are about the problem you want to solve, your <em>product</em> senses &#8212; these are the things that AI is not going to replace anytime soon, if ever.</p></li><li><p>&#127939; <strong>Drive</strong> &#8212; above all, the drive and discipline needed to put something out there. I know an awful lot of people who have the first two ingredients, but kinda miss this one.</p></li></ol><p>My OpenClaw article is one of the most popular pieces I have ever written, you can catch up with it below &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:187528754,&quot;url&quot;:&quot;https://refactoring.fm/p/my-experience-with-openclaw&quot;,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;title&quot;:&quot;My experience with OpenClaw &#129438;&quot;,&quot;truncated_body_text&quot;:&quot;Hey, Luca here! This is a &#128274; weekly essay &#128274; from Refactoring! To access all our articles, library, and community, subscribe to the full version:&quot;,&quot;date&quot;:&quot;2026-02-11T08:00:09.106Z&quot;,&quot;like_count&quot;:53,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-06-04T06:23:53.965Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-11-15T17:35:42.775Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:247311,&quot;user_id&quot;:6835984,&quot;publication_id&quot;:64099,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:64099,&quot;name&quot;:&quot;Refactoring&quot;,&quot;subdomain&quot;:&quot;refactoring&quot;,&quot;custom_domain&quot;:&quot;refactoring.fm&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Learn how to make your engineering team ship faster and better. Read weekly by 170,000+ engineers and managers&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;author_id&quot;:6835984,&quot;primary_user_id&quot;:6835984,&quot;theme_var_background_pop&quot;:&quot;#2096ff&quot;,&quot;created_at&quot;:&quot;2020-07-06T14:20:40.525Z&quot;,&quot;email_from_name&quot;:&quot;&#127744; Refactoring&quot;,&quot;copyright&quot;:&quot;Refactoring ETS&quot;,&quot;founding_plan_name&quot;:&quot;&#127942; Community plan&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79ab7b78-71cf-42d2-a607-3aa18960cb64_2400x572.png&quot;}}],&quot;twitter_screen_name&quot;:&quot;lucaronin&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000,&quot;status&quot;:{&quot;bestsellerTier&quot;:1000,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:1000},&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/my-experience-with-openclaw?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CR5A!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" loading="lazy"><span class="embedded-post-publication-name">Refactoring</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">My experience with OpenClaw &#129438;</div></div><div class="embedded-post-body">Hey, Luca here! This is a &#128274; weekly essay &#128274; from Refactoring! To access all our articles, library, and community, subscribe to the full version&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 months ago &#183; 53 likes &#183; Luca Rossi</div></a></div><div><hr></div><h1>&#127897;&#65039; Junior engineers will just be fine</h1><p>Last month I <a href="https://refactoring.fm/p/every-engineer-is-a-manager-now-with">interviewed the legendary Chris Lattner</a> on the podcast. Chris created LLVM, Swift, led Tesla autopilot, brought TPUs to the market at Google, and more! He is now the founder of Modular, where he creates portable infra to work with GPUs.</p><p>Chris told me that, despite the industry-wide narrative that AI favors senior engineers, Modular is actively <strong>hiring a ton of new college grads</strong> and interns. Chris&#8217; reasoning is based on two observations:</p><ul><li><p><strong>&#129504; AI-native thinking</strong> &#8212; junior engineers bring a completely different expertise. They are native to the tools and adapt faster than many experienced engineers.</p></li><li><p><strong>&#9878;&#65039; Team balance</strong> &#8212; good teams need people at multiple levels learning from each other. All-senior or all-junior teams both fail in different ways. (we wrote about this also <a href="https://refactoring.fm/p/in-praise-of-normal-engineers">here</a>!)</p></li></ul><p>You can find the full interview with Chris below:</p><div id="youtube2-PLQs_hHTzSk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;PLQs_hHTzSk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/PLQs_hHTzSk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>You can also find it on &#127911; <strong><a href="https://open.spotify.com/episode/7x5fP9l9veyl7VlGFBdoH3?si=ea44113412aa4fc9">Spotify</a></strong> and &#128236; <strong><a href="https://refactoring.fm/p/every-engineer-is-a-manager-now-with">Substack</a></strong></p><div><hr></div><h1>&#128218; Weekly Readings</h1><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://www.epicproduct.engineer/the-last-software-engineer">The Last Software Engineer</a></h4><h5>10 min &#8226; by Kent C. Dodds</h5><p>Fast forward to the moment <em>right before</em> AI takes over everything engineers do &#8212; what&#8217;s the last valuable thing left? I won&#8217;t spoiler! Fantastic article by Kent.</p><div><hr></div><h4>&#129352; <a href="https://www.aicelabs.com/articles/why-sell-software-if-anyone-can-make-it">Why Sell Software If Anyone Can Make It?</a></h4><h5>2 min &#8226; by Clemens Adolphs</h5><p>It&#8217;s not hard to make bread at home &#8212; even better than the one you buy at the bakery. Yet nobody really does it at scale. Don&#8217;t let the &#8220;everyone can code now&#8221; narrative scare you out of building a software business.</p><div><hr></div><h4>&#129353; <a href="https://www.chrismdp.com/coding-with-ai/">How I use AI to Code</a></h4><h5>19 min &#8226; by Chris Sherwood</h5><p>A thorough, opinionated guide on AI coding, updated to April 2026. Covers both the mindset and the practical tools. I liked it!</p><div><hr></div><p>And that&#8217;s it for today! If you are finding this newsletter valuable, <strong>subscribe to the full version</strong>!</p><p>1700+ engineers and managers have joined already, and they receive our flagship weekly long-form articles about <strong>how to ship faster</strong> and <strong>work better together</strong>! Learn more about the <a href="http://refactoring.fm/about">benefits of the paid plan here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Make your team ship faster!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://refactoring.fm/subscribe?"><span>Make your team ship faster!</span></a></p><p>See you next week!<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[How to Own Your Career 🦝 — with Jean Hsu and Cate Huston]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 62]]></description><link>https://refactoring.fm/p/how-to-own-your-career-with-jean</link><guid isPermaLink="false">https://refactoring.fm/p/how-to-own-your-career-with-jean</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 01 May 2026 08:37:21 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/195650521/a807e546679a56097c34c97af9b6f361.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-tb5wdmTJeuk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;tb5wdmTJeuk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/tb5wdmTJeuk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><blockquote><p><em>Today&#8217;s sponsor is <strong>Intent</strong> by <strong>Augment</strong>. <br>Intent is a developer workspace built for orchestrating agents: it starts with the living spec that updates as agents make progress, so every task stays aligned with no manual coordination. Try it for yourself at </em><a href="https://www.augmentcode.com/product/intent">https://www.augmentcode.com/product/intent</a></p></blockquote><div class="pullquote"><p style="text-align: center;"><em><strong>Listen now:<br><a href="https://www.youtube.com/@refactoringclub">YouTube</a> | <a href="https://podcasts.apple.com/us/podcast/refactoring-podcast/id1719137305">Apple</a> | <a href="https://open.spotify.com/show/7Luds9dmzZDoDC8Q7EMbSw">Spotify</a></strong></em></p></div><p>Today's guests are <strong>Jean Hsu</strong> and <strong>Cate Huston</strong>!<br><br>Jean and Cate are extremely experienced engineering leaders and coaches, accomplished authors, and have held leadership roles at companies like DuckDuckGo, Automattic, Medium and more.<br><br>They now run a program to help engineers and managers become <em>directly responsible individuals</em> for their careers, to navigate these complicated times.<br> <br>With Jean and Cate, we talked about exploring what you want from your career, how to be intentional about it, how to use feedback to assess how you're doing, and how AI is changing and not changing the picture.</p><p>Also check out <strong><a href="https://www.driyourcareer.com/">DRI Your Career</a></strong> &#8212; their course! If you use the code <strong>REFACTORING</strong> you get 15% off!</p><div><hr></div><blockquote><p><em><strong>If you like the podcast, please give us a rating on your platform of choice! It means a lot to us &#8212; that&#8217;s how other people discover the show! &#11088;&#11088;&#11088;&#11088;&#11088;</strong></em></p></blockquote><div><hr></div><h2>&#129351; Interview Summary</h2><p>If you are a <strong>&#128274; paid subscriber &#128274;</strong> you will find my own <em>summary</em> of the interview below.</p><p>It&#8217;s the <strong>5-minute takeaways</strong> of what we talked about, with timestamps to the relevant video moments, for those who don&#8217;t have time to sit through the 1-hour chat.</p><p>Here is the agenda for today:</p><ol><li><p>&#127786;&#65039; <strong>Why these times are uniquely challenging</strong></p></li><li><p>&#129517; <strong>Figuring out what you actually want</strong></p></li><li><p>&#128257; <strong>Feedback, accountability, and the power of coaching</strong></p></li><li><p>&#129302; <strong>AI: Identity shifts and finding your way</strong></p></li><li><p>&#128161; <strong>Minimizing emotional work, maximizing outcomes</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/how-to-own-your-career-with-jean">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Compounding Software Factory 📈]]></title><description><![CDATA[The third and final episode of our software factory series!]]></description><link>https://refactoring.fm/p/the-compounding-software-factory</link><guid isPermaLink="false">https://refactoring.fm/p/the-compounding-software-factory</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 29 Apr 2026 07:55:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/37242dce-5b57-4811-a3f2-6a21cd227153_2532x1680.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there, Luca here!</p><p>Today I am back with the third and last article in our <strong>Software Factory series</strong>, written together with my friend <a href="https://www.linkedin.com/in/robzuber">Rob Zuber</a>, CTO at <a href="https://circleci.com/">CircleCI</a>.</p><p>Before this one we published:</p><ol><li><p><a href="https://refactoring.fm/p/the-era-of-the-software-factory">The Era of the Software Factory</a></p></li><li><p><a href="https://refactoring.fm/p/growing-your-sofware-factory">How to Grow your Software Factory</a></p></li></ol><p>Why three articles? Because we like to work from first principles:</p><p>In the first article we established (with <a href="https://circleci.com/resources/2026-state-of-software-delivery/">actual data</a>) that teams that are getting far with AI are doing so thanks to good DX. The same teams that had good DX three years ago, are now winning the AI race: those at the 90th percentile are shipping &gt;2x faster than before.</p><p>In the second article we said: ok, but once you have good DX, how do you create leverage with AI? And we laid out a plan in three steps:</p><ol><li><p>&#128203; <strong>Specs</strong> &#8212; start by writing good, detailed instructions about things to be done. E.g. &#8220;<em>create a button that has the following specs [&#8230;]</em>&#8221;</p></li><li><p>&#128218; <strong>Rules</strong> &#8212; turn specs into reusable <em>rules</em> for the AI to follow. This is when you can say to the AI: &#8220;<em>create a button using our rules for creating buttons</em>&#8221;.</p></li><li><p>&#129513; <strong>Modules</strong> &#8212; is the final stage, when AI can reuse <em>code</em> directly, instead of rules, and you can simply say: &#8220;<em>create a primary button</em>&#8221;</p></li></ol><p>This seems <em>good enough</em>, so why a third article?</p><p>Because if you do all of the above right, your outcome will be: a solid dev process, in which AI produces <em>good</em> <em>enough </em>work to be shipped.</p><p>Now, while this seems like an ambitious target already, I still think <strong>we should aim higher</strong>.</p><p>To understand why this matters, we need to take a step back and reflect on engineering teams <em>before</em> AI. Here is the agenda for today:</p><ul><li><p>&#128201; <strong>The default path is degradation </strong>&#8212; the uncomfortable reality of engineering teams so far.</p></li><li><p>&#128027; <strong>What causes teams to degrade </strong>&#8212; talking about coding hygiene, capturing knowledge, and building the wrong things.</p></li><li><p><strong>&#128200; How to get better instead of worse </strong>&#8212; how to invert the trend on each of these dimensions.</p></li><li><p><strong>&#127933; Empowering managers </strong>&#8212; this is <em>peak</em> manager territory. Let&#8217;s talk about what managers should really do today in the age of AI.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><p><em>As always, I want to thank Rob and the great CircleCI folks for partnering on this piece. I loved bouncing ideas off with them, and I am a fan of how they are trying to reinvent software validation for the AI era. You can learn more below </em>&#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://circleci.com/&quot;,&quot;text&quot;:&quot;Learn more about CircleCI&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://circleci.com/"><span>Learn more about CircleCI</span></a></p><p><em>Disclaimer: in the article I only wrote my unbiased opinion about all practices and tools mentioned, CircleCI included</em><strong> </strong></p><div><hr></div><h2>&#128201; The default path is degradation</h2><p>Anyone who has worked in human software teams for years &#8212; teams that work on the same codebase over a long period of time, teams that grow, shrink, rotate, and do all the things that human teams do &#8212; knows that the default trajectory is not an <em>improving</em> one. It&#8217;s not even <em>staying put</em>.</p><p>Over time, the default is <strong>getting worse</strong>.</p><p>Codebases become a mess, large teams ship less than small teams (per engineer, but often as a whole), and products get shitty.</p><p>There are exceptions of course, but this is the reality of engineering for probably 90% of teams.</p><p>I think it&#8217;s exactly this bias, plus the fear of losing control over code, that makes us happy with AI <em>just</em> getting things right. Good enough. If we get moderately faster through this, and don&#8217;t degrade over time, that&#8217;s a victory already!</p><p>And that&#8217;s true, but what if we don&#8217;t stop there? What if the default becomes that <strong>things get better over time</strong>, instead of worse?</p><p>What if, for any change, instead of asking &#8220;<em>is this good enough to ship?</em>&#8221; we asked ourselves: &#8220;<em>does this change make the next easier/safer/cheaper</em>&#8221;?</p><p>In other words, a world in which, over time:</p><ul><li><p><strong>The team gets faster</strong> &#8212; both individually and as a whole.</p></li><li><p><strong>AI gets more accurate</strong> &#8212; because tech and product get better understood.</p></li><li><p><strong>The codebase gets better</strong> &#8212; because of the aggregated understanding of the problem, the continuous refinement of the abstractions, and the collective time spent on making things right.</p></li></ul><p>This has been discussed in recent times already, and often goes by the name of <a href="https://lethain.com/everyinc-compound-engineering/">compound engineering</a> &#8212; but it&#8217;s still unclear how to pull it off.</p><p>So today we are taking a stab at what <strong>real-world compound engineering</strong> might look like, based on the actual tools available, and our respective experience:</p><ul><li><p>Rob has the privileged vantage point of overseeing the workflows of tens of thousands of teams via <a href="https://circleci.com/">CircleCI</a>. CI is the <em>crossroads</em> through which most software activity <em>has</em> to go through, so it&#8217;s perfect to spot patterns, see what works, and what doesn&#8217;t.</p></li><li><p>On my end, <a href="https://refactoring.fm/p/introducing-tolaria">I have been building Tolaria</a> for several months now (p.s. we got to 8K stars on <a href="https://github.com/refactoringhq/tolaria">Github</a>!), have written 100K+ lines of code for it in over 2000 commits, and have developed strong opinions about the state of AI coding today.</p></li></ul><blockquote></blockquote><div><hr></div><h2>&#128027; What causes teams to degrade</h2><p>I like to address problems by <em>inversion</em>, so to figure out how to make things get better, I like to start by reflecting on what makes them worse &#8212; and then avoid that!</p><p>We could spend weeks just debating this, but I&#8217;ll keep things simple and give you my top three candidates for what makes engineering teams (and products) degrade over time:</p><h3>1) Coding hygiene</h3><p>There is an obvious baseline of coding hygiene that helps keep things maintainable, like:</p><ul><li><p><strong>&#128300; Good testing coverage</strong> &#8212; made of actual good tests (see <a href="https://medium.com/@kentbeck_7670/test-desiderata-94150638a4b3">Kent Beck&#8217;s desiderata</a>)</p></li><li><p><strong>&#129658; Good code health</strong> &#8212; high cohesion, low cyclomatic complexity, small files, no bumpy roads, etc.</p></li><li><p><strong>&#129521; Good basic abstractions</strong> &#8212; that encapsulate <em>domain language</em>, instead of using language primitives all the time.</p></li></ul><p>A key characteristic of coding hygiene is that it is largely domain agnostic. In fact, it can be easily evaluated by automatic tools that know nothing about your product.</p><p>It&#8217;s also, honestly, <strong>hard to maintain</strong>. Writing good tests is hard for a variety of reasons, they pose nasty tradeoffs and cause endless fights for time to market. Good code health is easier said than done, and even basic abstractions are often challenging.</p><p>So I empathize with teams that struggle with these &#8212; but nevertheless, these are the basics. What comes next is harder.</p><h3>2) Capturing knowledge</h3><p>If there is a single thing that <em>compounds</em> in life, it is knowledge. Knowledge is leverage, and teams are generally very bad at capturing and growing their collective knowledge.</p><p>First of all, they capture very little: no records of their decisions, no snapshots of what exists today (in whatever format), no vision/mission statements.</p><p>Also, most often no playbooks on how to do things: from designing features, to coding specific parts of the product, to operating systems in prod.</p><p>Again, I am not faulting anyone for this. Writing things down is hard, and keeping them updated is even harder.</p><h3>3) Building the wrong thing</h3><p>As a result of dubious knowledge + poor hygiene, we often end up <strong>building the wrong things</strong>.</p><p>And the more wrong things we build, the harder it becomes to steer a codebase, because of little residual design space (from bad abstractions), little confidence in changes (from little testing), and so on.</p><p>Again, these are all things that, <em>by default</em>, get worse with time. We know this from research. Large and old orgs, vs small and young ones, perform worse on all dimensions:</p><ul><li><p>Code health is worse.</p></li><li><p>Institutional knowledge is less shared.</p></li><li><p>Product moves slower.</p></li></ul><p>So how do we not only <em>stop</em> the trend, but invert it? Let&#8217;s take on these one by one &#128071;</p><div><hr></div><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!alN4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!alN4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 424w, https://substackcdn.com/image/fetch/$s_!alN4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 848w, https://substackcdn.com/image/fetch/$s_!alN4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 1272w, https://substackcdn.com/image/fetch/$s_!alN4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!alN4!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png" width="1200" height="429.3956043956044" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:200363,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/195748040?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!alN4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 424w, https://substackcdn.com/image/fetch/$s_!alN4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 848w, https://substackcdn.com/image/fetch/$s_!alN4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 1272w, https://substackcdn.com/image/fetch/$s_!alN4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2d97bf8-6be6-48af-9ff5-2196f8d60cee_2336x836.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>&#128300; Improving code hygiene</h2><p>As a result of AI writing the code, you can&#8212;and should&#8212;enforce it to write good code.</p><p>In my experience, you can do so by combining:</p><ul><li><p><strong>Rules and skills</strong> &#8212; about <em>what</em> the agent should do (e.g. always write tests) and <em>how</em> it should do it (e.g. what makes for a good test?)</p></li><li><p><strong>Gates</strong> &#8212; agents often simply <em>ignore</em> rules, so you need gates that enforce these rules. Code health above X, test coverage above Y, and so on.</p></li></ul><p>There are a ton of tools today that can automatically check for anything you can think of, and I am personally a fan of integrating them both in the CI (as usual), and as local hooks (e.g. with <a href="https://typicode.github.io/husky/">Husky</a>), to shift things <em>left</em> and let AI find problems earlier. Rob believes this is where <em>validation</em> infra needs to go: creating environments fast enough, real enough, and context-aware enough for agents to validate against before code reaches shared infrastructure.</p><p>There is also hygiene work that comes from regular maintenance, <em>after</em> the code is in prod. This is classic KTLO, from updating dependencies, to fixing small bugs, investigating failures in logs, and more.</p><p>This is all work where today AI can give you an incredible hand. What used to be recurring grunt work for your team, can turn into recurring automations that lead to PR drafts. You can create some for:</p><ul><li><p>Proposing dependency updates</p></li><li><p>Scanning for security vulnerabilities, from well-known online lists</p></li><li><p>Fetch insights from Sentry and your instrumentation to auto-fix bugs before you are even aware of them</p></li></ul><p>Personally, for Tolaria I have a hourly automation that:</p><ul><li><p>Scans Sentry logs and Github issues reported by users</p></li><li><p>Investigates and tries to reproduce them</p></li><li><p>When considered worth it, it creates tasks for the Codex/Claude queue</p></li><li><p>Bug tasks (as opposed to features) are automatically taken in charge and a fix is drafted for me to review.</p></li></ul><p>Is this perfect? No. Does it create duplicates, false positives, or simply interpret things wrong? Yes! But does it help reduce my cognitive load and effort on these? Absolutely!</p><blockquote></blockquote><div><hr></div><h2>&#128218; Capturing knowledge</h2><p>AI is fantastic at summarizing, expanding, moving, and overall <em>processing</em> content &#8212; but only if you capture it first!</p><p>And today, frankly, you should <strong>capture just about everything</strong>, exactly because of how cheap it is to process and maintain such information.</p><p>So you should capture:</p><ul><li><p><strong>Raw inputs</strong> &#8212; like meetings, brainstorming docs, things where you are <em>diverging</em>, not <em>converging.</em></p></li><li><p><strong>Decisions</strong> &#8212; e.g. ADRs in tech, but also product insights, directions you <em>decided</em> to go, and all the <em>whys</em> that the AI can&#8217;t figure out by itself by simply looking at the <em>what</em>.</p></li><li><p><strong>What exists today</strong> &#8212; I call these <em>recap</em> docs, because I believe they should be built as summaries of smaller, atomic things. You can put together a big ARCHITECTURE.md doc as a combination of the ADRs, or the product version of it by combining PRDs and specs. This is 100% AI territory today: you provide human input about single features, but leave the <em>plumbing</em> around content orchestration to the AI.</p></li></ul><p>All this stuff needs workflows to be created to capture data, process it, keep it in sync, and so on &#8212; but honestly, it&#8217;s all easy! We are engineers! And the leverage over time is incredible. So there is zero excuse not to do so.</p><blockquote></blockquote><div><hr></div><h2>&#128296; Building the right thing</h2><p>If you do the above right, the result will be building more <em>right</em> things, as opposed to <em>wrong</em> things:</p><ul><li><p>Things that build nicely on top of what already exists</p></li><li><p>Things that are coherent with past decisions</p></li><li><p>Things that work and do not degrade your codebase</p></li></ul><p>Above all, things that actually <em>improve</em> your codebase &#8212; because they record <em>more</em> decisions, say no to the things that are wrong, and yes to those that are right.</p><p>And those no&#8217;s and yeses stay there to help make better decisions in the future.</p><p>Also, such <em>compounding</em> can and should happen in all of your environment, not just the codebase: build history, pipeline patterns, team context, baked in and available over time, so agents can validate more, debug better, assess if code runs, and, most of all, if they are building the right things.</p><blockquote></blockquote><div><hr></div><h2>&#127933; Empowering managers</h2><p>I want to close by spending a few words about managers, who are often neglected in this AI conversation.</p><p>&#8220;Managers are in trouble&#8221;, &#8220;AI is for builders&#8221;, &#8220;everyone is back to coding&#8221;, and so on.</p><p>Guys, all the stuff we discussed is <em><strong>peak</strong></em><strong> manager work</strong>.</p><p>I have interviewed a lot of engineering managers on the podcast, and often asked them what&#8217;s the hardest part of their job. One of the common responses is: &#8220;<em>the feedback loop is slow</em>&#8221;.</p><p>Think about it. When you are an engineer, your feedback loop is: you write a feature, see that it works, if not you iterate, push it, possibly iterate on reviews, and it&#8217;s done. This is all extremely fast (even if it might not feel like so!).</p><p>Now compare it with the feedback loop of a manager who is trying to improve how sprint planning works. Or performance reviews. Or their team&#8217;s velocity. Any change you make to the process needs to be measured on a scale of several weeks, or months. And in many cases, what do you even measure?</p><p>Agent workflows are amazing for managers to operate because it&#8217;s like their normal work&#8230; <strong>on timelapse</strong>. Even if the agents are not that good, make mistakes, or trip over themselves, it doesn&#8217;t matter as long as they are <em>fast</em> and managers can course-correct quickly.</p><p>So if it is <em>true</em> that all engineers are becoming <em>kinda</em> like managers now, it&#8217;s also true that motivated managers can have some upper hand because, well, they are already managers!</p><blockquote></blockquote><div><hr></div><p>And that&#8217;s it for today! I wish you a great week</p><p>Sincerely &#128075;<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Bad code, progressive complexity, and weekly readings💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #205]]></description><link>https://refactoring.fm/p/bad-code-progressive-complexity-and</link><guid isPermaLink="false">https://refactoring.fm/p/bad-code-progressive-complexity-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 27 Apr 2026 07:01:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/5Q4FasJl0SA" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>.</em></p><div><hr></div><h2><a href="https://newsletter.chainofthought.show/p/inverting-the-innovators-dilemma">Reporting from Salesforce&#8217;s TDX event!</a> &#129489;&#8205;&#128187;</h2><p><em>This week&#8217;s sponsor is Salesforce!</em></p><p>Our friend <a href="https://newsletter.chainofthought.show/">Conor Bronsdon</a> was our eyes and ears on the floor at <a href="https://www.salesforce.com/tdx/">TDX</a> last week, and wrote a full breakdown on <a href="https://newsletter.chainofthought.show/p/inverting-the-innovators-dilemma">Chain of Thought</a>.</p><p>He says <a href="https://www.salesforce.com/eu/form/agentforce/maximizing-roi-with-agentforce/?d=701ed00000p99uMAAQ&amp;nc=701ed00000pCjLLAA0&amp;utm_content=701ed00000p99uMAAQ&amp;gclsrc=aw.ds&amp;gad_source=1&amp;gad_campaignid=22814410482&amp;gbraid=0AAAABAVtBhSz9uEfWIk83PbS9EjJJUZ2A&amp;gclid=CjwKCAjwqazPBhALEiwAOuXqdCdRf0LHVCkka--kPqK_4UWHYHr9LG1ow0N0iMmldmIcE-7kiaKfGRoCH6sQAvD_BwE">Agentforce</a> is now Salesforce's fastest-growing product, and the signs were everywhere at TDX:</p><ul><li><p>60+ new MCP tools in Headless 360</p></li><li><p>Agent Script open-sourced on GitHub</p></li><li><p>Agentforce Vibes 2.0 (their vibe coding tool),</p></li><li><p>plus new Slack agent capabilities.</p></li></ul><p>Salesforce went as far as publishing the full language spec, grammar, parser, and compiler for their agent-definition language. </p><p>They're betting an <strong>open agent ecosystem wins</strong> developer adoption, while enterprise-grade upgrade paths let businesses actually ship reliable agents to production.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.chainofthought.show/p/inverting-the-innovators-dilemma&quot;,&quot;text&quot;:&quot;Read the full TDX breakdown&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.chainofthought.show/p/inverting-the-innovators-dilemma"><span>Read the full TDX breakdown</span></a></p><div><hr></div><h1>&#128161; Coding is not solved, but bad code&#8230; kinda is</h1><p>Last week I launched <a href="https://refactoring.fm/p/introducing-tolaria">Tolaria</a>, which by now is one of the <a href="https://github.com/refactoringhq/tolaria">fastest growing repos</a> on the whole Github! It got <strong>6000+ stars</strong> in less than a week.</p><p>Tolaria is a lot of code: 100K+ LOCs, 2K+ commits, 3K+ tests, 70+ ADRs. I publicly said many times <a href="https://refactoring.fm/i/194609000/tolaria-refactoring">I didn&#8217;t write any of it</a>, which made some people think I believe coding is <em>solved</em>.</p><p>I don&#8217;t think coding is solved <em>at large</em>, but <em>bad code</em> feels solved. To understand what I mean by that, a useful way to think about tech debt is to split it into two kinds:</p><ul><li><p><strong>Bad code</strong></p></li><li><p><strong>Misaligned code</strong></p></li></ul><p><em>Bad code</em> is basic hygiene failure: lack of tests, high complexity, tight coupling, duplication, outdated libraries. It is bad regardless of business context, and we know it increases lead time, outages, and maintenance cost.</p><p>As of today this kind of debt is largely avoidable if you <strong>choose to enforce quality</strong>. On Tolaria, AI-generated code must meet three gates: high test coverage, strong CodeScene health scores, and current library/docs usage. These rules live both in CLAUDE.md and CI, because agents still forget or ignore instructions. Once those checks are in place, the basics can be trusted without manually reviewing every line.</p><p><em>Misaligned code</em> is harder, and is definitely not solved yet. Code may be clean, tested, and well-structured, but still wrong for the product direction you want. It&#8217;s code that is a good circle when you really needed a square: a leaky abstraction, an old design assumption, or a model that no longer matches intent.</p><p>Reviewing architecture and abstractions still feels supremely important, because they're the things that the AI model can&#8217;t figure out by itself, because they are about what you want to build in the future, and why.</p><p>I wrote more about this in my series of articles about my AI coding workflow:</p><ol><li><p><strong><a href="https://refactoring.fm/p/my-ai-coding-workflow">My AI Coding Workflow</a></strong> (Feb 2026)</p></li><li><p><strong><a href="https://refactoring.fm/p/updates-to-my-ai-coding-workflow">Updates to My AI Coding Workflow</a></strong> (Apr 2026)</p></li><li><p><strong><a href="https://refactoring.fm/p/introducing-tolaria">Introducing Tolaria</a></strong> (last week!)</p></li></ol><div><hr></div><h1>&#127897;&#65039; Progressive disclosure of complexity</h1><p>In May last year I interviewed Guillermo Rauch, founder and CEO of Vercel</p><p>Guillermo talked about the qualities of great technology, and one principle that stuck with me was what he called the <strong>progressive disclosure of complexity</strong>.</p><p>A defining feature of great tech is that&#8217;s approachable for beginners but powerful enough for enterprise needs.</p><p>This principle guides the design of Vercel, Next.js, and everything they do.</p><blockquote><p><em><strong>&#8220;I&#8217;m building a platform that should not be intimidating for your first line of code, and gives you the superpower that you could be one day a top 30 internet website with the same infrastructure, with the same tools, with the same access.&#8221;</strong></em></p></blockquote><p>Guillermo draws inspiration from products like the iPhone, which can be used by both children and the elderly while still serving business professionals with complex needs.</p><p>His approach to API design focuses on what he calls <em>token minimization</em> (not AI tokens!) &#8212; requiring minimal code to get started, then gradually introducing more sophisticated features as needed:</p><ul><li><p>&#127937; <strong>Low barrier to entry</strong> &#8212; a new Next.js project can be started with just a few lines of code.</p></li><li><p>&#127793; <strong>Growing with users</strong> &#8212; complexity is only introduced when needed for specific requirements.</p></li><li><p>&#128260; <strong>Same technology at all scales</strong> &#8212; the technology that powers a beginner&#8217;s first project is the same that can scale to handle millions of users.</p></li></ul><p>Here is the full interview with Guillermo:</p><div id="youtube2-5Q4FasJl0SA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;5Q4FasJl0SA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/5Q4FasJl0SA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>You can also find it on &#127911; <strong><a href="https://open.spotify.com/episode/2K73fsshI6PvWPsd0pPPHq?si=49224547d4b6431d">Spotify</a></strong> and &#128236; <strong><a href="https://refactoring.fm/p/the-vercel-journey-with-guillermo">Substack</a></strong></p><div><hr></div><h1>&#128218; Weekly Readings</h1><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://theengineeringmanager.substack.com/p/my-cto-daily-driver">My CTO Daily Driver</a></h4><h5>8 min &#8226; by James Stanier</h5><p>I basically recommend all of James&#8217; articles, and this makes no exception. He explains how he uses Claude Code to drive a personalized <em>CTO workspace</em> with memory. With custom slash commands tied to Linear, Notion, and BetterStack.</p><div><hr></div><h4>&#129352; <a href="https://bcantrill.dtrace.org/2026/04/12/the-peril-of-laziness-lost/">The Peril of Laziness Lost</a></h4><h5>12 min &#8226; by Bryan Cantrill</h5><p>Laziness has always been a programmer&#8217;s <em>virtue</em> &#8212; it&#8217;s what drives us to build abstractions instead of doing the same thing twice. LLMs don&#8217;t have that instinct: you have to <em>supply it</em> to them. If you don&#8217;t, you lose the elegance, efficiency, and maintainability that comes from human constraints.</p><div><hr></div><h4>&#129353; <a href="https://x.com/intuitiveml/status/2043545596699750791?s=46">99% of Our Production Code Is Written by AI</a></h4><h5>20 min &#8226; by Peter Pang</h5><p>Took a lot of ideas from this post. Feels a bit AI-generated at times, but the ideas around feature gates, self-healing feedback loop, and bug fixing are awesome. Peak &#8220;harness engineering&#8221;, as kids call it these days.</p><div><hr></div><p>And that&#8217;s it for today! If you are finding this newsletter valuable, <strong>subscribe to the full version</strong>!</p><p>1700+ engineers and managers have joined already, and they receive our flagship weekly long-form articles about <strong>how to ship faster</strong> and <strong>work better together</strong>! Learn more about the <a href="http://refactoring.fm/about">benefits of the paid plan here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Make your team ship faster!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://refactoring.fm/subscribe?"><span>Make your team ship faster!</span></a></p><p>See you next week!<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Tolaria is doing numbers! 🚀]]></title><description><![CDATA[Thank you so much for this &#128591;]]></description><link>https://refactoring.fm/p/tolaria-is-doing-numbers</link><guid isPermaLink="false">https://refactoring.fm/p/tolaria-is-doing-numbers</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Thu, 23 Apr 2026 07:46:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CR5A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey! <a href="https://refactoring.fm/p/introducing-tolaria">Tolaria&#8217;s launch</a> has been absolutely incredible so far!</p><p>It went <a href="https://x.com/lucaronin/status/2046877445748322418">viral on X</a>, got a ton of replies via email (sorry if I didn&#8217;t get back to everyone yet!) and an insane <a href="https://github.com/refactoringhq/tolaria">700 stars</a> on Github.</p><p>As a refresher, if you missed yesterday&#8217;s email, Tolaria is a <strong>free &amp; open source</strong> desktop macOS app for managing markdown knowledge bases. It&#8217;s similar to Obsidian, but:</p><ul><li><p>The look &amp; feel and editor is closer to Notion</p></li><li><p>Has opinionated ideas about how to organize notes into types and views</p></li><li><p>Has first-class git support for syncing files</p></li><li><p>Is 100% open source</p></li></ul><p>We have also been <a href="https://www.producthunt.com/products/tolaria">hunted on Product Hunt</a> and I would be incredibly grateful if you could <strong>upvote it</strong> &#128591;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.producthunt.com/products/tolaria&quot;,&quot;text&quot;:&quot;Upvote Tolaria on Product Hunt &#128591;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.producthunt.com/products/tolaria"><span>Upvote Tolaria on Product Hunt &#128591;</span></a></p><p>Thank you so much! Tell me your thoughts if you try it!</p><p>Luca</p>]]></content:encoded></item><item><title><![CDATA[Introducing Tolaria 💧]]></title><description><![CDATA[A free & open source macOS app for managing markdown knowledge bases.]]></description><link>https://refactoring.fm/p/introducing-tolaria</link><guid isPermaLink="false">https://refactoring.fm/p/introducing-tolaria</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 22 Apr 2026 08:06:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XRY5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, Luca here &#8212; the wait is over! After <a href="https://refactoring.fm/p/updates-to-my-ai-coding-workflow">teasing it</a> during the last month, today I am making <a href="http://tolaria.md/">Tolaria</a> available to everyone, free and open source. You can find it <a href="https://github.com/refactoringhq/tolaria">here</a> and download the latest release.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/refactoringhq/tolaria&quot;,&quot;text&quot;:&quot;Check out Tolaria &#128167;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/refactoringhq/tolaria"><span>Check out Tolaria &#128167;</span></a></p><h2>What is Tolaria?</h2><p>Tolaria is a desktop app for Mac for managing <strong>markdown knowledge bases</strong>. In a way, it&#8217;s my own version of <a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f">Karpathy&#8217;s LLM wiki</a>.</p><p>I have a close circle of friends who have been using it over the past few weeks, and they use it to operate:</p><ul><li><p>Second brains and personal knowledge</p></li><li><p>Company docs as context for AI</p></li><li><p>OpenClaw / assistants memory and procedures</p></li></ul><p>Personally, I use it to <strong>run my life and work</strong>.</p><p>I have a massive workspace of 10,000+ notes, which are the result of 6 years of Refactoring work + a ton of personal journaling and <em>second braining</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XRY5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XRY5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png 424w, https://substackcdn.com/image/fetch/$s_!XRY5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png 848w, https://substackcdn.com/image/fetch/$s_!XRY5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png 1272w, https://substackcdn.com/image/fetch/$s_!XRY5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XRY5!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png" width="1200" height="787.0879120879121" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:955,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:6315681,&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/194609000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.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_!XRY5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png 424w, https://substackcdn.com/image/fetch/$s_!XRY5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png 848w, https://substackcdn.com/image/fetch/$s_!XRY5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png 1272w, https://substackcdn.com/image/fetch/$s_!XRY5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c128f-2158-4eec-a282-d8c6cdb27137_3982x2612.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tolaria is the best app I have ever used for managing markdown knowledge bases.</figcaption></figure></div><p>Earlier this year I decided to migrate everything from Notion to markdown files for a variety of reasons (speed, control, better AI work), but I missed an app that allowed me to operate these files with a UX that fit my brain &#8212; so I built it! </p><p>So, this newsletter will explain a few things:</p><ul><li><p>&#128249; <strong>Walkthroughs </strong>&#8212; how I use Tolaria for various stuff.</p></li><li><p><strong>&#127744; Tolaria + Refactoring</strong> &#8212; how Tolaria fits the broader Refactoring picture, and my life.</p></li><li><p><strong>&#11088; Tolaria Principles</strong> &#8212; things I believe in, on top of which Tolaria is built.</p></li><li><p><strong>&#128295; How Tolaria works</strong> &#8212; the main parts.</p></li><li><p><strong>&#128300; What you will find in the repo</strong> &#8212; interesting stuff you may look at.</p></li></ul><p>Also, as I wrote before, I commit to keeping you posted about my AI coding workflow, and I will use Tolaria and its repo as a <em>living artifact</em> of how I create software with AI, trying to staying on the frontier of what&#8217;s possible, trying new things, and so on.</p><p>Tolaria will stay free forever, but if you want to <strong>stay posted with these explorations</strong> and support my work, consider subscribing to the paid version of Refactoring &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://refactoring.fm/subscribe?"><span>Subscribe now</span></a></p><p>p.s. we&#8217;ve recently launched our <a href="https://refactoring.fm/p/introducing-the-ai-club">AI Club</a> and will run the first edition next month. I&#8217;d love to see you there!</p><div><hr></div><h2>&#128249; Walkthroughs</h2><p>Before you move further, you can find some Loom walkthroughs below &#8212; they are short and to the point:</p><ul><li><p><a href="https://www.loom.com/share/bb3aaffa238b4be0bd62e4464bca2528">How I Organize My Own Tolaria Workspace</a></p></li><li><p><a href="https://www.loom.com/share/dffda263317b4fa8b47b59cdf9330571">My Inbox Workflow</a></p></li><li><p><a href="https://www.loom.com/share/8a3c1776f801402ebbf4d7b0f31e9882">How I Save Web Resources into Tolaria</a></p></li></ul><p>I recorded them because I think it&#8217;s way easier to see things in action than to read long explainers. So if you like what you see, you can continue reading below &#128071;</p><div><hr></div><h2>&#127744; Tolaria + Refactoring</h2><p>In this time of rapid change, deciding how I spend my time feels like a big deal. Tolaria is taking <em>a lot</em> of it, so it needs to be worth it, and I think it is.</p><p>With Refactoring I write about <strong>how to create good software</strong> &#8212; that&#8217;s how I literally make a living. Over the last few years I have done that largely by 1) doing research and 2) talking with the smartest people I knew.</p><p>With everything that&#8217;s happening with AI, this is not enough anymore.</p><p>Everyone needs <strong>hands-on work</strong> to understand what&#8217;s really happening, and form opinions that are not mediated by other people&#8217;s experience.</p><p>Also, in order to make for good evidence, such work needs to be <em>ambitious</em>. Side projects are nice, but can we build <em>real</em>, complex software with AI, without writing a single line of code? What about without <em>reading</em> it? Does it scale? Or do we <em>drift</em> into chaos?</p><p>So far, it scales. </p><p>Tolaria is not <em>massive</em>, but at this point it is not small either. By the numbers:</p><ul><li><p>100K lines of code, in Rust + React.</p></li><li><p>1900+ commits</p></li><li><p>3000+ tests</p></li><li><p>70 ADRs</p></li></ul><p>I have written more about how I work on it in this <a href="https://refactoring.fm/p/updates-to-my-ai-coding-workflow">recent piece</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AnY2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AnY2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png 424w, https://substackcdn.com/image/fetch/$s_!AnY2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png 848w, https://substackcdn.com/image/fetch/$s_!AnY2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png 1272w, https://substackcdn.com/image/fetch/$s_!AnY2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AnY2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png" width="1456" height="404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:404,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61989,&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/194609000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.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_!AnY2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png 424w, https://substackcdn.com/image/fetch/$s_!AnY2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png 848w, https://substackcdn.com/image/fetch/$s_!AnY2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png 1272w, https://substackcdn.com/image/fetch/$s_!AnY2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c1b074e-0b95-41a1-9a0b-232431d670fe_1556x432.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My incredible (for me) Github graph for 2026. My most prolific year before this one had 900 commits &#8212; for the full year.</figcaption></figure></div><p>So, my commitment with Tolaria is the following:</p><ul><li><p>I will keep it free &amp; open source forever.</p></li><li><p>I will run my life and business on it.</p></li><li><p>I will work 2+ hours / day on it to develop new things, fix problems, and make it useful for people other than myself.</p></li><li><p>I will do as much of the work as possible with AI, trying to <em>live in the future</em>.</p></li><li><p>I will keep you posted on Refactoring about this process.</p></li></ul><p>In a nutshell, the goal is to <strong>work on the frontier and report back to you</strong>.</p><div><hr></div><h2>&#11088; Principles</h2><p>So, what is Tolaria about? When I speak with friends, jokingly I say that it&#8217;s like Notion, but offline, and for actual files. This is not 100% correct, but it&#8217;s a good starting point.</p><p>Tolaria is based on a simple belief: <strong>AI delivers the biggest benefits to those who are able to capture and organize context</strong> &#8212; whether it&#8217;s about their lives or work.</p><p>We often talk about &#8220;knowledge&#8221; management but it&#8217;s not only about knowledge: it&#8217;s about projects, goals, thoughts, relationships, and everything that happens in your lives. The more you can capture (and organize properly), the more AI can be useful to you.</p><p>Such material is, potentially, our most precious asset. We&#8217;ll want to keep it tidy, up to date, and most of all, <strong>under our control</strong>.</p><p>Keeping it under our control means not being locked into a specific tool or AI platform. It means being able to switch to different AIs by snapping your fingers, or using multiple ones together on the same collaboration surface.</p><p>You may want your Claude Code to do some autonomous research and write its findings, while your OpenClaw fetches your latest meeting notes and turns them into a doc, all while you write manually in your journal, or capture a valuable idea into an <em>evergreen note</em>.</p><p>This should all be possible and be backed by the same knowledge base.</p><p>Based on this, here is how I think such a knowledge base should work:</p><ul><li><p><strong>Files</strong> &#8212; because of 1) portability, 2) offline work, and 3) how AI is massively good at working with them, files are an obvious choice for a knowledge base.</p></li><li><p><strong>Markdown</strong> &#8212; md has surfaced as the de-facto standard for documents in the AI era. And you can easily extend it with a YAML frontmatter to store structured properties</p></li><li><p><strong>Git</strong> &#8212; by using files, version control is an obvious fit. This is useful for 1) history, for 2) cloud sync, and for 3) tracking authorship of changes, especially in a world where humans and AI collaborate.</p></li><li><p><strong>Open source</strong> &#8212; if the goal is full &amp; long-term portability, the app you use to operate your knowledge should stay under your control.</p></li></ul><p>While the above items are the *core *principles, there are a few others I strongly believe in:</p><ul><li><p><strong>Rich UX</strong> &#8212; there are a lot of markdown editors out there who are simply&#8230; editors. This just doesn&#8217;t cut it when you have a lot of notes and need to operate <em>years</em> of content. You need relationships, visual cues, navigation, colors, icons, stuff that tells you at a glance <em>what</em> a note is, where it lives, and so on.</p></li><li><p><strong>Keyboard-first</strong> &#8212; I am a developer at heart, so the more I can do via the keyboard, the better. In Tolaria there are shortcuts and commands for <em>everything</em>, and tab navigation works well, so you never need the mouse.</p></li><li><p><strong>Opinions</strong> &#8212; capturing and organizing knowledge is hard, so I will bring my point of view about it. When you do something every day, you need UX that is optimized for that, and you can only achieve that if your tool has opinions. Tolaria has many!</p></li></ul><div><hr></div><h2>&#128295; How Tolaria works</h2><p>Tolaria is organized into a few main components:</p><ol><li><p><strong>Sidebar</strong> &#8212; for filtering notes in various ways</p></li><li><p><strong>Note list</strong> &#8212; for displaying the list of notes that match the current selection in the sidebar</p></li><li><p><strong>Editor</strong> &#8212; for editing the current note.</p></li><li><p><strong>Status bar</strong> &#8212; for changing vault, check Git status, AI status, and handy stuff</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_!wtwc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wtwc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png 424w, https://substackcdn.com/image/fetch/$s_!wtwc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png 848w, https://substackcdn.com/image/fetch/$s_!wtwc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png 1272w, https://substackcdn.com/image/fetch/$s_!wtwc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wtwc!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png" width="1200" height="787.0879120879121" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:955,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:5944515,&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/194609000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.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_!wtwc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png 424w, https://substackcdn.com/image/fetch/$s_!wtwc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png 848w, https://substackcdn.com/image/fetch/$s_!wtwc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png 1272w, https://substackcdn.com/image/fetch/$s_!wtwc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9bac09-4c77-4205-9618-4a076ffd9fe7_3982x2612.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Let&#8217;s look at each of these &#128071;</p><div><hr></div><h2>1) Sidebar</h2><p>One of the core things you want to do when you have a lot of notes, is looking at just a subset of them at a time, based on various criteria.</p><p>Tolaria allows you to do so in many ways:</p><h3>&#128229; Inbox</h3><p>Notes that haven&#8217;t been <em>organized</em> yet.</p><p>This is inspired by <a href="https://www.buildingasecondbrain.com/">Tiago Forte</a>&#8216;s concept of separating capture from organize. An &#8220;organized&#8221; note is a note that you know what you will do with. It may belong to a project, to a responsibility, a topic, or any concept related to how you organize work.</p><p>Review your inbox (e.g.) weekly to keep it from growing too large. You can disable the Inbox in Settings <code>cmd+,</code>) if you don&#8217;t like this workflow.</p><p>You can flag a note as <em>organized</em> by clicking on the &#8220;check&#8221; icon in the breadcrumbs bar, or with <code>cmd+e</code>.</p><h3>&#128451;&#65039; All Notes</h3><p>As the name suggests, that&#8217;s the entire vault &#8212; every single note.</p><h3>&#128230; Archive</h3><p>A permanent home for notes you don&#8217;t want to delete but don&#8217;t want to see regularly. Archive aggressively to keep your vault clean. Archived notes still appear in search results, but not in sidebar sections.</p><h3>&#129513; Types</h3><p>The main organizational device in Tolaria. Each note has a type, which by default is Note.</p><p>Each type can have its own icon and color, which you can change by right-clicking on it in the sidebar, or manually changing it in the properties or frontmatter of the type file.</p><p>Types are simply stored as markdown files, like Topic, or Project.</p><p>Click any type on the sidebar to see all notes of that type in the note list.</p><h3>&#11088; Favorites</h3><p>Notes you&#8217;ve manually pinned to keep them top-of-mind. Great for active projects, journal entries, or reference notes you access frequently.</p><p>You can reorder them by dragging them in the sidebar.</p><p>Toggle a favorite note from the &#11088; button in the breadcrumbs bar, or with <code>cmd+d</code> .</p><h3>&#128269; Views</h3><p>You can create custom views that filter notes by complex, nested criteria. The view editor fetches all available properties, plus allows for some tricks (like regexes and natural language dates)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GEjx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GEjx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png 424w, https://substackcdn.com/image/fetch/$s_!GEjx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png 848w, https://substackcdn.com/image/fetch/$s_!GEjx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png 1272w, https://substackcdn.com/image/fetch/$s_!GEjx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GEjx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png" width="1456" height="851" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:851,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:155722,&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/194609000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.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_!GEjx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png 424w, https://substackcdn.com/image/fetch/$s_!GEjx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png 848w, https://substackcdn.com/image/fetch/$s_!GEjx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png 1272w, https://substackcdn.com/image/fetch/$s_!GEjx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7752a1eb-1390-48b4-a11e-b08edd488c4b_1594x932.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Views are simple yaml files that get stored in the <code>views</code> folder. They can be edited easily and even created by the AI &#128071;</p><pre><code><code>name: Active Projects
icon: &#128640;
filters:
  all:
  - field: type
    op: equals
    value: Project
  - field: Status
    op: equals
    value: Active
  - any:
    - field: status
      op: equals
      value: active
    - field: date
      op: after
      value: in 1 week</code></code></pre><h3>&#128194; Folders</h3><p>Tolaria stores notes in the root of the vault by default, but also scans your vault&#8217;s folder structure, which you can navigate at the bottom of the sidebar.</p><p>Folders are listed last because they are a secondary organization method&#8212;not the primary one.</p><h3>&#128465;&#65039; Trash</h3><p>There is no trash bin, when you delete a note, it&#8217;s gone &#8212; but your git history is your safety net. You can always recover deleted notes from git if needed.</p><div><hr></div><h2>2) Note list</h2><p>The note list shows the subset of notes selected by the current sidebar section. For example, clicking &#8220;Types &#8594; Project&#8221; shows all your Project notes.</p><h3>&#11015;&#65039; Sorting</h3><p>You can sort the note list by any note property (they get dynamically loaded from the notes), plus file properties like modified and creation time.</p><p>Your choice will be remembered for that specific section.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6J5P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6J5P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png 424w, https://substackcdn.com/image/fetch/$s_!6J5P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png 848w, https://substackcdn.com/image/fetch/$s_!6J5P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png 1272w, https://substackcdn.com/image/fetch/$s_!6J5P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6J5P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png" width="1264" height="510" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:510,&quot;width&quot;:1264,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:93752,&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/194609000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.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_!6J5P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png 424w, https://substackcdn.com/image/fetch/$s_!6J5P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png 848w, https://substackcdn.com/image/fetch/$s_!6J5P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png 1272w, https://substackcdn.com/image/fetch/$s_!6J5P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce56bac2-2145-40b1-bf4e-9fa3cb70977d_1264x510.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>&#128133; Display Properties</h3><p>You can customize which properties appear as columns in the note list. This lets you see important metadata at a glance without opening individual notes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BTJA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BTJA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png 424w, https://substackcdn.com/image/fetch/$s_!BTJA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png 848w, https://substackcdn.com/image/fetch/$s_!BTJA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png 1272w, https://substackcdn.com/image/fetch/$s_!BTJA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BTJA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png" width="1252" height="422" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:422,&quot;width&quot;:1252,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:129941,&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/194609000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.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_!BTJA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png 424w, https://substackcdn.com/image/fetch/$s_!BTJA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png 848w, https://substackcdn.com/image/fetch/$s_!BTJA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png 1272w, https://substackcdn.com/image/fetch/$s_!BTJA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88e9cadc-dfad-480f-95dd-e08baf88fea1_1252x422.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For properties that are URLs or other notes, you can open them directly from the note list with <code>cmd+click</code>.</p><div><hr></div><h2>3) Editor</h2><p>The editor is where you write and edit your notes. Tolaria supports two modes:</p><ul><li><p><strong>WYSIWYG Mode</strong> &#8212; similar to Notion. Type naturally, use slash commands, and see the output directly formatted in the editor.</p></li><li><p><strong>Raw mode</strong> &#8212; shows the actual file characters. Access it with <code>Cmd+/</code> or the code button in the breadcrumb bar. Useful when you need precise control over markdown syntax.</p></li></ul><p>The note&#8217;s filename is always visible at the top of the editor. This keeps you aware of how the note will be named and linked.</p><p>A very important feature of the editor is the support for <strong>wikilinks</strong>. Type <code>[[</code> to trigger autocomplete from your entire vault. This creates links to other notes, enabling the knowledge graph. Wikilinks also auto-update if the filename changes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0t5g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0t5g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png 424w, https://substackcdn.com/image/fetch/$s_!0t5g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png 848w, https://substackcdn.com/image/fetch/$s_!0t5g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!0t5g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0t5g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png" width="1456" height="1062" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1062,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:418964,&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/194609000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.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_!0t5g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png 424w, https://substackcdn.com/image/fetch/$s_!0t5g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png 848w, https://substackcdn.com/image/fetch/$s_!0t5g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!0t5g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F085c0f73-8af3-46d1-88ae-4bb349cd06ee_1580x1152.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>4) Git</h2><p>Tolaria vault have first-class Git support and by default you retain fine control over it.</p><p>You can look at current changes and Git history from the status bar, create new commits and push them directly without ever leaving the app.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nlOg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nlOg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png 424w, https://substackcdn.com/image/fetch/$s_!nlOg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png 848w, https://substackcdn.com/image/fetch/$s_!nlOg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!nlOg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nlOg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png" width="1456" height="579" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:579,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:373979,&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/194609000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.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_!nlOg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png 424w, https://substackcdn.com/image/fetch/$s_!nlOg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png 848w, https://substackcdn.com/image/fetch/$s_!nlOg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!nlOg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad4adf09-7053-4ba1-8875-24402eec93ec_2552x1014.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But if you don&#8217;t want to manage this manually, and want to use Git as a simple automatic sync layer, Tolaria also has an opt-in <strong>AutoGit mode</strong> in which it automatically creates commits and pushes changes after some time. It does so when the app gets idle, when you shift which app is in focus, and based on various heuristics.</p><div><hr></div><h2>5) Commands</h2><p>One of Tolaria&#8217;s principles is being keyboard-first. Almost everything has shortcuts.</p><p>You can discover shortcuts from the mac menu and from tooltips on buttons.</p><p>A lot of actions also have a fall back or a quick way to do them via the command palette, which you can open with <code>cmd+K</code></p><p>You can really do almost everything with it, including navigating to sections, creating new notes of a certain type, or perform routine actions.</p><p>You don&#8217;t even need to find the exact keywords &#8212; the palette is smart enough to match a lot of commands semantically:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qpNL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qpNL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png 424w, https://substackcdn.com/image/fetch/$s_!qpNL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png 848w, https://substackcdn.com/image/fetch/$s_!qpNL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!qpNL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qpNL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png" width="1262" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1262,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133063,&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/194609000?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.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_!qpNL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png 424w, https://substackcdn.com/image/fetch/$s_!qpNL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png 848w, https://substackcdn.com/image/fetch/$s_!qpNL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!qpNL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F403650bf-7255-4930-a808-3f390f3c4449_1262x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>&#128300; </strong>What you will find in the repo </h2><p>I will use this repo as a <strong>living artifact </strong>of how I do AI coding, for you to inspect at any time.</p><p>I have written exactly zero lines of code, out of the ~100K, and read very few of them. I am neither proud nor ashamed by it: it is what it is, and I would have never been able to build it otherwise.</p><p>Some interesting things that I haven&#8217;t seen too much elsewhere:</p><ul><li><p><strong>The <a href="https://github.com/refactoringhq/tolaria/blob/main/docs/ARCHITECTURE.md">Architecture</a>, <a href="https://github.com/refactoringhq/tolaria/blob/main/docs/ABSTRACTIONS.md">Abstractions</a>, and <a href="https://github.com/refactoringhq/tolaria/blob/main/docs/GETTING-STARTED.md">Getting Started</a> docs</strong> &#8212; they have some overlap, but overall I feel they do a good job at capturing what the tech is about.</p></li><li><p><strong>The <a href="https://github.com/refactoringhq/tolaria/tree/main/docs/adr">collection of ADRs</a></strong> &#8212; this is super useful, both for human review, and for AI to pick up on past decisions and what exists.</p></li><li><p><strong>The <a href="https://github.com/refactoringhq/tolaria/blob/main/docs/VISION.md">Vision</a> doc</strong> &#8212; this is not super updated, but it is still useful to guide AI when we brainstorm new features.</p></li></ul><p>Overall, this is a lot of context for the AI to inspect when you want it to do some &#8220;creative&#8221; task, like creating specs for new features, or making non-trivial tech choices, and dramatically increases the chances for it to get things right.</p><p>As of today I still review the ADRs and the changes to the main docs, but I find that AI gets these right &gt;90% of the time.</p><div><hr></div><h2>&#10145;&#65039; Next Steps</h2><p>If you download and install Tolaria, you will get the option of <strong>cloning a getting started vault</strong> that has examples and instructions. There is also a <code>Feedback</code> button in the status bar (bottom right) that gets you to Github issues, if you want to report anything.</p><p>Also feel free to reply to this email if you have any questions or just to let me know your thoughts! Please do! It&#8217;s been a ton of work and I absolutely want to know what you think about it &#128516;</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[Devex floor, saving the day, and weekly reading 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #204]]></description><link>https://refactoring.fm/p/devex-floor-saving-the-day-and-weekly</link><guid isPermaLink="false">https://refactoring.fm/p/devex-floor-saving-the-day-and-weekly</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 20 Apr 2026 07:00:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vm_O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>.</em></p><div><hr></div><h2><a href="https://watch.getcontrast.io/register/unblocked-webinar-stop-babysitting-your-agents-building-a-context-engine-for-mergeable-code?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Stop babysitting your agents</a> &#127868;</h2><p><em>Today&#8217;s sponsor is <a href="https://watch.getcontrast.io/register/unblocked-webinar-stop-babysitting-your-agents-building-a-context-engine-for-mergeable-code?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Unblocked</a>!</em></p><p>Agents can generate code. But getting it right for your system, conventions, and past decisions is the hard part &#8212; you end up wasting time and tokens in correction loops.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uisF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uisF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png 424w, https://substackcdn.com/image/fetch/$s_!uisF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png 848w, https://substackcdn.com/image/fetch/$s_!uisF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png 1272w, https://substackcdn.com/image/fetch/$s_!uisF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uisF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png" width="484" height="270.0210526315789" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:742,&quot;width&quot;:1330,&quot;resizeWidth&quot;:484,&quot;bytes&quot;:447044,&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/194396094?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.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_!uisF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png 424w, https://substackcdn.com/image/fetch/$s_!uisF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png 848w, https://substackcdn.com/image/fetch/$s_!uisF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png 1272w, https://substackcdn.com/image/fetch/$s_!uisF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fded0d914-dec4-47bc-933b-144b8277c03c_1330x742.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>More MCPs give agents access to information but not understanding. The teams pulling ahead use a context engine to give agents exactly what they need.</p><p><a href="https://watch.getcontrast.io/register/unblocked-webinar-stop-babysitting-your-agents-building-a-context-engine-for-mergeable-code?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Join our friends at Unblocked on April 23 (FREE)</a> to see:</p><ul><li><p>Where teams get stuck on the AI maturity curve</p></li><li><p>How a context engine solves for quality, efficiency, and cost</p></li><li><p>Live demo: the same coding task with and without a context engine</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.getcontrast.io/register/unblocked-webinar-stop-babysitting-your-agents-building-a-context-engine-for-mergeable-code?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary&quot;,&quot;text&quot;:&quot;Register now!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.getcontrast.io/register/unblocked-webinar-stop-babysitting-your-agents-building-a-context-engine-for-mergeable-code?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary"><span>Register now!</span></a></p><div><hr></div><h1>&#128161; Developer Experience is your floor</h1><p>By now we all largely agree that AI amplifies your existing dev practices &#8212; good and bad. I think what most people don&#8217;t realize is just <em>how strong</em> the amplification is.</p><p>Last month I commented on <a href="https://refactoring.fm/p/the-era-of-the-software-factory">the recent </a><strong><a href="https://refactoring.fm/p/the-era-of-the-software-factory">State of Software Delivery</a></strong><a href="https://refactoring.fm/p/the-era-of-the-software-factory"> report</a>. With respect to one year ago, the median team sees:</p><ul><li><p>&#128200; +15% activity on feature branches</p></li><li><p>&#128201; -7% activity on the main branch</p></li><li><p>&#128201; -15% success rate on the main branch</p></li></ul><p>These numbers are brutal: the average team sees exactly <em>zero</em> impact from AI. Even negative in some cases, as displayed by activity on the main branch.</p><p>On the other end, if you look at the top quartiles, the reality is different. Top 5% teams are ~2x as fast, with the same success rate. Top 10% teams are +50% faster, and top 25% are +25% faster.</p><p>These are <em>big</em> numbers, and they come from the teams who were already at the top 3 years ago. So, paraphrasing the famous quote, the best time to invest in good devex was years ago, but the second best time is <em>now.</em></p><p>Good devex is the <em>floor</em> that enables a team to profit from AI. I like the idea that good devex is enabled by three factors:</p><ul><li><p><strong>&#129504; Balanced cognitive load</strong> &#8212; work is challenging but achievable.</p></li><li><p><strong>&#128260; Tight feedback loops</strong> &#8212; engineers are continuously informed that are going in the right direction.</p></li><li><p><strong>&#9201;&#65039; Enough focus time</strong> &#8212; engineers have enough uninterrupted time to do what they need to do.</p></li></ul><p>When these three things happen, engineers can enter a <strong>flow state</strong>: complete immersion in their activity with extreme focus, productivity, and personal enjoyment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vm_O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vm_O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png 424w, https://substackcdn.com/image/fetch/$s_!vm_O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png 848w, https://substackcdn.com/image/fetch/$s_!vm_O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png 1272w, https://substackcdn.com/image/fetch/$s_!vm_O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vm_O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png" width="1456" height="804" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:804,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:226009,&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/194396094?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.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_!vm_O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png 424w, https://substackcdn.com/image/fetch/$s_!vm_O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png 848w, https://substackcdn.com/image/fetch/$s_!vm_O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png 1272w, https://substackcdn.com/image/fetch/$s_!vm_O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdea02411-c22d-4934-8e52-83a6ea28f7d8_1970x1088.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here are some questions you can ask yourself to assess where you at with these:</p><ul><li><p>Reduce cognitive load &#8594; <em>What feels hard as a developer? How can I make it easier?</em></p></li><li><p>Tighten feedback loops &#8594; <em>What feels slow? How can I make it faster?</em></p></li><li><p>Improve focus time &#8594; <em>What feels wasteful? How can I reduce interruptions?</em></p></li></ul><p>I wrote a full piece about DevEx, AI, and Product Engineering, and how these are the new pyramid of software engineering &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:189655863,&quot;url&quot;:&quot;https://refactoring.fm/p/the-new-pyramid-of-software-engineering&quot;,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;title&quot;:&quot;The New Pyramid of Software Engineering &#127956;&#65039;&quot;,&quot;truncated_body_text&quot;:&quot;There are a lot of opinions around these days about the future of software, including of course my own.&quot;,&quot;date&quot;:&quot;2026-03-04T08:01:19.283Z&quot;,&quot;like_count&quot;:49,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-06-04T06:23:53.965Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-11-15T17:35:42.775Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:247311,&quot;user_id&quot;:6835984,&quot;publication_id&quot;:64099,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:64099,&quot;name&quot;:&quot;Refactoring&quot;,&quot;subdomain&quot;:&quot;refactoring&quot;,&quot;custom_domain&quot;:&quot;refactoring.fm&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Learn how to make your engineering team ship faster and better. Read weekly by 170,000+ engineers and managers&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;author_id&quot;:6835984,&quot;primary_user_id&quot;:6835984,&quot;theme_var_background_pop&quot;:&quot;#2096ff&quot;,&quot;created_at&quot;:&quot;2020-07-06T14:20:40.525Z&quot;,&quot;email_from_name&quot;:&quot;&#127744; Refactoring&quot;,&quot;copyright&quot;:&quot;Refactoring ETS&quot;,&quot;founding_plan_name&quot;:&quot;&#127942; Community plan&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79ab7b78-71cf-42d2-a607-3aa18960cb64_2400x572.png&quot;}}],&quot;twitter_screen_name&quot;:&quot;lucaronin&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000,&quot;status&quot;:{&quot;bestsellerTier&quot;:1000,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:1000},&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/the-new-pyramid-of-software-engineering?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CR5A!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" loading="lazy"><span class="embedded-post-publication-name">Refactoring</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The New Pyramid of Software Engineering &#127956;&#65039;</div></div><div class="embedded-post-body">There are a lot of opinions around these days about the future of software, including of course my own&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; 49 likes &#183; Luca Rossi</div></a></div><div><hr></div><h1>&#127897;&#65039; Why did the day need saving?</h1><p>Last year I interviewed Rands&#8212;one of my heroes&#8212;and we talked a lot about AI, engineering management, and things we are getting wrong in tech.</p><p>Rands believes, as an industry, we are too attached to <em>hero culture</em> that celebrates heroics and <em>save-the-day</em> moments.</p><blockquote><p><em><strong>&#8220;Good job saving the day. Why did the day need saving? We screwed up and you had to save the day so good job cleaning up your screw up.&#8221;</strong></em></p></blockquote><p>Rands believes in <strong>proactive prevention</strong> rather than reactive heroics: addressing issues when they are still yellow flags, instead of big red ones. Effective management goes unnoticed because teams function smoothly &#8212; but that should be a badge of honor.</p><p>Acts of prevention sometimes are hard because they go against your instincts, like giving <strong>early corrective feedback</strong> before problems escalate. It feels easy and innocuous to avoid these small-scale conflicts, but these are exactly what you need to prevent the big fuck-ups.</p><p>Here is the full interview with Rands:</p><div id="youtube2-T8pcMl3rmbM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;T8pcMl3rmbM&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/T8pcMl3rmbM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>You can also find it on &#127911; <strong><a href="https://refactoring.fm/p/how-to-manage-humans-with-rands">Spotify</a></strong> and &#128236; <strong><a href="https://open.spotify.com/episode/6bBVwfdumlhJusAFHuuv3h?si=9e6945c8c46e4f78">Substack</a></strong></p><div><hr></div><h1>&#128218; Weekly Readings</h1><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://theengineeringmanager.substack.com/p/who-will-be-the-senior-engineers">Who Will Be the Senior Engineers of 2035?</a></h4><h5>11 min &#8226; by James Stanier</h5><p>Great article by James, who put together a lot of resources and ideas (also from different industries), and connected the dots to understand what may happen to the software engineering job market. Recommended read.</p><div><hr></div><h4>&#129352; <a href="https://www.strix.ai/blog/cal-com-is-closing-its-code-due-to-ai-threats">Open Source Isn&#8217;t Dead</a></h4><h5>3 min &#8226; by Alex Schapiro</h5><p>Cal.com <a href="http://cal.com/blog/cal-com-goes-closed-source-why">recently announced</a> it&#8217;s going closed source, citing AI vulnerability scanning as the #1 reason. This piece pushes back, and I actually agree with it: closing source code doesn&#8217;t remove the attack surface &#8212; AI can still attack you <em>black-box</em>, at runtime. The better response is continuous AI defense (fire with fire!).</p><div><hr></div><h4>&#129353; <a href="https://lethain.com/agents-as-scaffolding/">Agents as Scaffolding for Recurring Tasks</a></h4><h5>4 min &#8226; by Will Larson</h5><p>Great practical pattern for introducing agents into your workflows: start by prototyping with agent-driven automation, then <em>refactor</em> some agentic parts away into deterministic code, keeping the agent only where it truly shines: navigating ambiguity.</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[AI Coding meets Code Health 🪄 — with Stuart Caborn]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 61]]></description><link>https://refactoring.fm/p/ai-coding-meets-code-health-with</link><guid isPermaLink="false">https://refactoring.fm/p/ai-coding-meets-code-health-with</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 17 Apr 2026 07:01:17 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/194274334/842d647b625d80917cb00b8d08ddf68a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-msEjXJhL0HM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;msEjXJhL0HM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/msEjXJhL0HM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><blockquote><p><em>Today&#8217;s sponsor is <strong>Intent</strong> by <strong>Augment</strong>. <br>Intent is a developer workspace built for orchestrating agents: it starts with the living spec that updates as agents make progress, so every task stays aligned with no manual coordination. Try it for yourself at </em><a href="https://www.augmentcode.com/product/intent">https://www.augmentcode.com/product/intent</a></p></blockquote><div class="pullquote"><p style="text-align: center;"><em><strong>Listen now:<br><a href="https://www.youtube.com/@refactoringclub">YouTube</a> | <a href="https://podcasts.apple.com/us/podcast/refactoring-podcast/id1719137305">Apple</a> | <a href="https://open.spotify.com/show/7Luds9dmzZDoDC8Q7EMbSw">Spotify</a></strong></em></p></div><p>Today's guest is <strong>Stuart Caborn</strong>, Distinguished Engineer at <a href="https://www.loveholidays.com/">Loveholidays</a>, an online travel agency with millions of customers worldwide.</p><p>Stuart's team is doing AI coding for real:</p><ul><li><p>Each engineer deploys to production more than <strong>80 times a month</strong></p></li><li><p>Over <strong>60% of production code is written by AI</strong></p></li><li><p>All while maintaining an elite change failure rate under 1%, and <strong>perfect code health</strong>.</p></li></ul><div><hr></div><blockquote><p><em><strong>If you like the podcast, please give us a rating on your platform of choice! It means a lot to us &#8212; that&#8217;s how other people discover the show! &#11088;&#11088;&#11088;&#11088;&#11088;</strong></em></p></blockquote><div><hr></div><h2>&#129351; Interview Summary</h2><p>If you are a <strong>&#128274; paid subscriber &#128274;</strong> you will find my own <em>summary</em> of the interview below.</p><p>It&#8217;s the <strong>5-minute takeaways</strong> of what we talked about, with timestamps to the relevant video moments, for those who don&#8217;t have time to sit through the 1-hour chat.</p><p>Here is the agenda for today:</p><ol><li><p><strong>&#9992;&#65039; The complexity of online travel</strong></p></li><li><p><strong>&#127973; Code health before AI</strong></p></li><li><p><strong>&#129302; Becoming an AI-first engineering team</strong></p></li><li><p><strong>&#128737;&#65039; Guardrails, reviews, and trusting the machine</strong></p></li><li><p><strong>&#128260; How AI is changing the development process</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/ai-coding-meets-code-health-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Introducing the AI Club 🪄]]></title><description><![CDATA[A new monthly gathering for Refactoring community members]]></description><link>https://refactoring.fm/p/introducing-the-ai-club</link><guid isPermaLink="false">https://refactoring.fm/p/introducing-the-ai-club</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 15 Apr 2026 07:03:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f2cd68bf-0153-4ae0-83e5-872a611b8e9f_1240x640.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there! This is a special edition to announce I am starting a private <strong>AI Club</strong> for members of the Refactoring community!</p><p>These are going to be <strong>monthly online gatherings</strong> where people can share wins and learnings from using AI, ask questions, and stay up to date about what works.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;http://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Join our AI Club &#129668;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="http://refactoring.fm/subscribe?"><span>Join our AI Club &#129668;</span></a></p><p>So today&#8217;s post is to explain 1) why I am starting it, and<strong> </strong>2) how it works.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RBE3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RBE3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png 424w, https://substackcdn.com/image/fetch/$s_!RBE3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png 848w, https://substackcdn.com/image/fetch/$s_!RBE3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png 1272w, https://substackcdn.com/image/fetch/$s_!RBE3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RBE3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png" width="1456" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1848471,&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/194076528?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.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_!RBE3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png 424w, https://substackcdn.com/image/fetch/$s_!RBE3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png 848w, https://substackcdn.com/image/fetch/$s_!RBE3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png 1272w, https://substackcdn.com/image/fetch/$s_!RBE3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8f559d-8449-4100-b2a1-423c00067b18_2736x920.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>&#127919; Why I am starting an AI Club</h2><p>By now AI has taken over most of the online conversation about software engineering.</p><p>As <a href="https://refactoring.fm/p/updates-to-my-ai-coding-workflow">I wrote last week</a>, I think this is&#8230; largely correct. AI coding is so <em>big</em> and meaningful that figuring it out feels like the #1 priority for us as an industry. I don&#8217;t think we are misguided on this.</p><p>However, we are also in this <strong>very confusing stage</strong> where everyone is just trying things for themselves:</p><ul><li><p>Most teams have little-to-no shared practices / artifacts / ceremonies about AI.</p></li><li><p>Opinions online are all over the place, and it&#8217;s hard to know who to trust.</p></li><li><p>Most of us have very little time to try things out, and zero dedicated time at work to do so.</p></li></ul><p>All of this against a backdrop of anxiety, layoffs, FOMO, and doomsday predictions.</p><p>Yay!</p><p>AI is also changing how I think about my responsibilities with Refactoring. It is changing the topics I cover, how I spend my time (I am back to coding, a lot), and the type of conversations I have with people.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y_TJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y_TJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png 424w, https://substackcdn.com/image/fetch/$s_!y_TJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png 848w, https://substackcdn.com/image/fetch/$s_!y_TJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png 1272w, https://substackcdn.com/image/fetch/$s_!y_TJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y_TJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png" width="1456" height="388" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b25d63e9-3149-4db8-9971-6662593b171d_1508x402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:388,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59776,&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/194076528?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.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_!y_TJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png 424w, https://substackcdn.com/image/fetch/$s_!y_TJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png 848w, https://substackcdn.com/image/fetch/$s_!y_TJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png 1272w, https://substackcdn.com/image/fetch/$s_!y_TJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25d63e9-3149-4db8-9971-6662593b171d_1508x402.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Before 2026, in my most active year I did ~950 commits. This year I have done 3300 so far&#8230; in two months.</figcaption></figure></div><p>So, Refactoring should <strong>help you run better engineering teams</strong>, and a big part of that now is about using AI well &#8212; together, as humans.</p><p>So I want to host <strong>good conversations</strong> about it, where people share what they are learning: the exciting wins, the humbling failures, and everything in between.</p><p>Sharing things with others not only makes us <strong>grow faster together</strong> &#8212; it&#8217;s also great to fight back against anxiety, impostor syndrome, and all the pressure that comes with the push for AI adoption.</p><p>So let&#8217;s use the <strong>Refactoring community as your extended team</strong>, where we compare notes and learn things together.</p><div><hr></div><h2>&#8505;&#65039; How it works</h2><p>Here is the gist:</p><ul><li><p>Monthy 1-hour chat, hosted in the Refactoring Community.</p></li><li><p>As with all-things-community, it&#8217;s for paid Refactoring members. We gate this to keep people committed and ensure high quality.</p></li><li><p>Like our monthly mastermind, it&#8217;s facilitated by real engineering coaches, <a href="https://monkeysthumb.co.uk/">Joel</a> and <a href="https://www.seckington.com/">Melinda</a>.</p></li><li><p>I always join the call personally and share the things I have learned throughout the month</p></li><li><p>Everyone who joins can share their own &#8220;aha&#8221; moments &#8212; a win, or just something that genuinely surprised them &#8212; ask questions, and get to know other community members</p></li><li><p>Takeaways from the conversation are shared afterwards in the community in written form, for those who are not able to join.</p></li><li><p>Finally, for paid Refactoring subscribers, in the newsletter I will also publish monthly AI updates that combine my own experiments with things that surfaced in community calls.</p></li></ul><p>All in all it&#8217;s very simple. We&#8217;ll host the first one <strong>on May 8th</strong>, and we&#8217;ll always have them on the first Friday of the month, at rotating times to allow everyone to participate.</p><div><hr></div><h2>&#128274; About the Refactoring subscription</h2><p>Allow me a quick paragraph about the Refactoring subscription, which you might be considering joining.</p><p>It&#8217;s $15/month, or $150/year, to access the <a href="https://refactoring.fm/p/refactoring-community">Refactoring community</a>, all of our archive (300+ articles) carefully organized by topic, plus our weekly original long-forms about the latest and greatest engineering practices.</p><p>The community has bi-weekly events, professionally run, that alone would cost &gt;$100 to join &#8212; each!</p><p>So if Refactoring helps you make <strong>just </strong><em><strong>one</strong></em><strong> better decision</strong>, thanks to something you read, or learned from someone in the community, chances are the subscription repaid itself for the full year.</p><p>I would love to have you onboard! 1500+ engineers have joined this already &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;http://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Join our AI Club &#129668;&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="http://refactoring.fm/subscribe?"><span>Join our AI Club &#129668;</span></a></p><div><hr></div><p>And that&#8217;s it for today!</p><p>Sincerely &#128075;<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Asking engineers, signal areas, and weekly readings 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #203]]></description><link>https://refactoring.fm/p/asking-engineers-signal-areas-and</link><guid isPermaLink="false">https://refactoring.fm/p/asking-engineers-signal-areas-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 13 Apr 2026 07:39:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dofp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, Luca here, welcome to a weekly edition of the</em>&#128161;<em> <strong>Monday Ideas</strong> </em>&#128161;<em> from Refactoring! To access all our articles, library, and community, subscribe to the <a href="https://refactoring.fm/about">full version</a>.</em></p><div><hr></div><h2><a href="https://www.augmentcode.com/blog/confidence-is-the-new-bottleneck">How Augment Code is going AI-native</a></h2><p><em>Today&#8217;s sponsor is <a href="https://www.augmentcode.com/">Augment Code</a>!</em></p><p>The guys at Augment have been documenting how they are transforming their engineering team to be AI-first, in several great blog posts:</p><ul><li><p><a href="https://www.augmentcode.com/blog/how-we-hire-ai-native-engineers-now">How we hire AI-native engineers now</a></p></li><li><p><a href="https://www.augmentcode.com/blog/confidence-is-the-new-bottleneck">Confidence is the new bottleneck</a></p></li></ul><p>They would also love to hear from other leaders going through the same thing, and have been running a quick survey for this. You can find it below &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://form.typeform.com/to/iYpaa0lo&quot;,&quot;text&quot;:&quot;Check out the 5-min survey&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://form.typeform.com/to/iYpaa0lo"><span>Check out the 5-min survey</span></a></p><div><hr></div><h1>&#128161; Just ask engineers</h1><p>By now, as of 2026, there is <a href="https://refactoring.fm/p/the-era-of-the-software-factory?utm_source=publication-search">solid consensus</a> that good developer experience is <em>upstream</em> of how your engineering team performs as a whole. And good devex is, in turn, mostly about <strong>removing friction</strong> from the daily work of engineers.</p><p>To remove friction you first need to know where it hides. What are the biggest blockers for your team? What is slow, hard, or simply a waste of time?</p><p>As engineers, we have a natural bias towards <strong>telemetry</strong> &#8212; quantitative data taken automatically from our processes, so we can debug it as if it were software. This is increasingly backed by research, from <a href="https://refactoring.fm/p/accelerate">Accelerate</a> onwards, and I have written extensively about it:</p><ul><li><p><a href="https://refactoring.fm/p/how-to-get-started-with-engineering">How to get started with engineering metrics</a></p></li><li><p><a href="https://refactoring.fm/p/whats-next-in-measuring-dev-productivity?utm_source=publication-search">What&#8217;s next in measuring dev productivity</a></p></li><li><p><a href="https://refactoring.fm/p/you-have-metrics-now-what?utm_source=publication-search">You have metrics, now what?</a></p></li></ul><p>To summarize what I think about metrics: <strong>they are good, but they are not enough</strong>. Most metrics are <em>cues</em> that something is (or is not) working, but they don&#8217;t tell you what the problem is. They are <em>lagging indicators</em>: to find the actual blockers, you need to dig deeper.</p><p>How? The answer is usually deceptively simple: <strong>ask engineers</strong>. They know.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dofp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dofp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png 424w, https://substackcdn.com/image/fetch/$s_!dofp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png 848w, https://substackcdn.com/image/fetch/$s_!dofp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png 1272w, https://substackcdn.com/image/fetch/$s_!dofp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dofp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png" width="1456" height="638" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:638,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:398366,&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/193797604?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.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_!dofp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png 424w, https://substackcdn.com/image/fetch/$s_!dofp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png 848w, https://substackcdn.com/image/fetch/$s_!dofp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png 1272w, https://substackcdn.com/image/fetch/$s_!dofp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a0dcb77-0b55-4861-94df-74d51d4a5ad0_4248x1860.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you combine <strong>qualitative</strong> signal from engineers&#8217; opinions with <strong>quantitative</strong> data from your systems, you&#8217;ll be <em>unstoppable</em>. But counterintuitively, most managers find it harder to do the former&#8212;have good conversations to identify problems&#8212;than the latter.</p><p>So, I am a fan of doing the so-called <strong>Listening Tour</strong>, whose name I lifted from <em><a href="https://developerexperiencebook.com/">Frictionless</a></em>, but whose execution I tweaked based on my own experience. I wrote a full piece about it at the start of the year, and I still stand by it &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:185828322,&quot;url&quot;:&quot;https://refactoring.fm/p/the-listening-tour&quot;,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;title&quot;:&quot;The Listening Tour &#128222;&quot;,&quot;truncated_body_text&quot;:&quot;For the last month I have been running a program for CTOs and VPs of small to mid-size companies to help them make their engineering teams ship faster.&quot;,&quot;date&quot;:&quot;2026-01-28T08:00:22.619Z&quot;,&quot;like_count&quot;:35,&quot;comment_count&quot;:3,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-06-04T06:23:53.965Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-11-15T17:35:42.775Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:247311,&quot;user_id&quot;:6835984,&quot;publication_id&quot;:64099,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:64099,&quot;name&quot;:&quot;Refactoring&quot;,&quot;subdomain&quot;:&quot;refactoring&quot;,&quot;custom_domain&quot;:&quot;refactoring.fm&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Learn how to make your engineering team ship faster and better. Read weekly by 170,000+ engineers and managers&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;author_id&quot;:6835984,&quot;primary_user_id&quot;:6835984,&quot;theme_var_background_pop&quot;:&quot;#2096ff&quot;,&quot;created_at&quot;:&quot;2020-07-06T14:20:40.525Z&quot;,&quot;email_from_name&quot;:&quot;&#127744; Refactoring&quot;,&quot;copyright&quot;:&quot;Refactoring ETS&quot;,&quot;founding_plan_name&quot;:&quot;&#127942; Community plan&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79ab7b78-71cf-42d2-a607-3aa18960cb64_2400x572.png&quot;}}],&quot;twitter_screen_name&quot;:&quot;lucaronin&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000,&quot;status&quot;:{&quot;bestsellerTier&quot;:1000,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:1000},&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/the-listening-tour?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CR5A!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" loading="lazy"><span class="embedded-post-publication-name">Refactoring</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The Listening Tour &#128222;</div></div><div class="embedded-post-body">For the last month I have been running a program for CTOs and VPs of small to mid-size companies to help them make their engineering teams ship faster&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 months ago &#183; 35 likes &#183; 3 comments &#183; Luca Rossi</div></a></div><div><hr></div><h1>&#127897;&#65039; Past behavior predicts future results</h1><p>With tech chops getting a bit <em>diluted</em> by AI, <strong>behavioral interviews</strong> have recently gotten into the spotlight as a crucial way to select good engineers. Always have been? Probably &#8212; but today, even more so.</p><p>I recently talked about this <a href="https://refactoring.fm/p/how-to-master-behavioral-interviews-e75">on the podcast with Austin McDonald</a>, former hiring committee chair at Meta. Austin said behavioral interviewers are essentially <strong>forecasters</strong>: they study your past performance to predict your future results. And, with people, this generally works (unlike with financial portfolios!)</p><p>Austin breaks down what interviewers look for into <strong>signal areas</strong>:</p><ul><li><p><strong>&#127919; Scope &amp; ownership</strong> &#8212; how large a project can you handle, and do you drive it forward without being asked?</p></li><li><p><strong>&#127787;&#65039; Ambiguity &amp; perseverance</strong> &#8212; how do you navigate unclear situations and push through setbacks?</p></li><li><p><strong>&#129309; Conflict resolution, communication &amp; leadership</strong> &#8212; how do you handle disagreements, convey ideas, and rally teams?</p></li></ul><p>These signal areas map closely to most company values, but not always one-to-one. Newer AI companies like Anthropic, for instance, look for safety-oriented signals about thinking through the implications of building AI.</p><p>So Austin recommends combining general areas with company-specific research&#8212;their website, recruiter conversations, YouTube talks&#8212;to build a complete picture of what you&#8217;ll be assessed on.</p><blockquote><p><em><strong>&#8220;Every question they ask has this kind of thing behind it. Especially follow-up questions. People often forget &#8212; when they get a follow-up question, they just think the person wants more information. Instead, think: why are they asking me this?&#8221;</strong></em></p></blockquote><p>In fact, companies exist on a wide spectrum:</p><ul><li><p>Amazon sits at one extreme end with <a href="https://www.amazon.jobs/content/en/our-workplace/leadership-principles">16 rigorously enforced leadership principles</a>.</p></li><li><p>Meta is in the middle with <a href="https://www.metacareers.com/swe-prep-onsite">five structured behavioral areas</a>.</p></li><li><p>Google has traditionally leaned more technical.</p></li></ul><p>Here is the full interview with Austen:</p><div id="youtube2-dIUZ8AcCfLg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;dIUZ8AcCfLg&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/dIUZ8AcCfLg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>You can also find it on &#127911; <strong><a href="https://open.spotify.com/episode/5dTyUawGzRizbC8PJPsPIG?si=5c3a2c5c494b4e73">Spotify</a></strong> and &#128236; <strong><a href="https://refactoring.fm/p/how-to-master-behavioral-interviews-e75">Substack</a></strong></p><div><hr></div><h1>&#128218; Weekly Readings</h1><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://piechowski.io/post/git-commands-before-reading-code/">The Git Commands I Run Before Reading Any Code</a></h4><h5>3 min &#8226; by Ally Piechowski</h5><p>Great piece that makes you understand the power of version control history. There is so much you can understand about a codebase (and a team) by running simple git commands. Hotspots, bus factor, bug clusters, crisis patterns &#8212; all from git history.</p><div><hr></div><h4>&#129352; <a href="https://martinfowler.com/articles/reduce-friction-ai/feedback-flywheel.html">Feedback Flywheel</a></h4><h5>10 min &#8226; by Rahul Garg</h5><p>I really liked this article &#8212; it&#8217;s very practical and proposes some novel angles to AI feedback. Every AI interaction generates signal: prompts that worked, context that was missing, patterns that failed. Rahul proposes a structured practice that takes learnings from AI sessions and feeds them back into the team&#8217;s shared artifacts.</p><div><hr></div><h4>&#129353; <a href="https://newsletter.whatsmyjob.club/archive/the-human-weight-of-it/">The Human Weight of It</a></h4><h5>7 min &#8226; by Cate Huston</h5><p>Can Claude replace coaching? Cate has been experimenting: using AI for structured issues, but keeping her human coach for the <em>messier</em> stuff. AI is great when you need structure and validation. But when you need to feel <em>seen</em>, you need the human weight of someone else&#8217;s confidence in you. I loved it.</p><div><hr></div><p>And that&#8217;s it for today! If you are finding this newsletter valuable, <strong>subscribe to the full version</strong>!</p><p>1700+ engineers and managers have joined already, and they receive our flagship weekly long-form articles about <strong>how to ship faster</strong> and <strong>work better together</strong>! Learn more about the <a href="http://refactoring.fm/about">benefits of the paid plan here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://refactoring.fm/subscribe?&quot;,&quot;text&quot;:&quot;Make your team ship faster!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://refactoring.fm/subscribe?"><span>Make your team ship faster!</span></a></p><p>See you next week!<br>Luca</p>]]></content:encoded></item><item><title><![CDATA[Updates to my AI Coding Workflow]]></title><description><![CDATA[As of April 2026]]></description><link>https://refactoring.fm/p/updates-to-my-ai-coding-workflow</link><guid isPermaLink="false">https://refactoring.fm/p/updates-to-my-ai-coding-workflow</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 08 Apr 2026 07:12:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7c31c0da-a80c-463b-8804-c108402a8d19_1200x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>About a month ago I wrote an article about my <a href="https://refactoring.fm/p/my-ai-coding-workflow">AI coding workflow</a>, and it <em>instantly</em> became the most popular Refactoring article of all time.</p><p>I received a lot of private comments, most of which can be organized into two categories:</p><ul><li><p>People wanting to learn more about the <strong>coding workflow</strong> itself.</p></li><li><p>People wanting to learn more about the <strong>note-taking</strong> <strong>app</strong> I am building.</p></li></ul><p>Both types of comments motivated me <em>a lot</em>, to the point where I decided to make all of this an official part of my Refactoring work, as follows:</p><ul><li><p>I am going to build this app for real, make it free and open source for everyone, and keep working on it as an ongoing effort.</p></li><li><p>I am going to report my learnings about AI coding as part of the regular writing schedule, let&#8217;s say once a month or so.</p></li></ul><p>I am convinced this is the right thing to do because, frankly, <strong>getting AI coding right is the #1 problem in software engineering</strong> today, and it&#8217;s not even close.</p><p>The economics of software are changing so much that there is no part of the process that is <em>safe</em>. Code reviews, QA, planning, staffing, traditional management &#8212; everything feels up for grabs and <em>downstream </em>of what happens with coding.</p><p>Also, while I love doing research and talking with others (e.g. on the podcast), opinions are so scattered across the board that I feel the strong need to try things myself, and do so in a serious, ongoing way.</p><p>So here is today&#8217;s agenda:</p><ul><li><p>&#128167; <strong>Building Tolaria</strong> &#8212; a personal knowledge management app for the age of AI.</p></li><li><p>&#129438; <strong>OpenClaw vs Claude Code</strong> &#8212; how I use them, and to do what.</p></li><li><p>&#128295; <strong>Coding workflow</strong> &#8212; what changed vs one month ago, and what stayed the same.</p></li><li><p>&#128209; <strong>ADRs</strong> &#8212; the best recent addition to my coding.</p></li><li><p>&#127912; <strong>Product workflow</strong> &#8212; how I create specs.</p></li><li><p><strong>&#128184; How much I am spending</strong> &#8212; because I know y&#8217;all want to know that.</p></li><li><p>&#129302; <strong>CLAUDE.md</strong> &#8212; bonus: my current Claude file, attached in full.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><h2>&#128167; Building Tolaria</h2><p>In the last article I said that what I was building didn&#8217;t matter much, well now it kinda does, because you are going to hear a lot more about it in the future.</p><p><strong><a href="http://tolaria.md/">Tolaria</a></strong> is a personal knowledge management app, extremely opinionated and tailored for my own personal use, but I hope it can be useful to others too.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BUFS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BUFS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 424w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 848w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 1272w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BUFS!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png" width="1200" height="1219.7802197802198" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:1480,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:3089503,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/193368488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BUFS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 424w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 848w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 1272w, https://substackcdn.com/image/fetch/$s_!BUFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e4b8312-6b90-4b72-845a-32b773fd50fa_2934x2983.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s worth noting that this is not a particularly original idea. There exist plenty of tools in this space &#8212; Notion, Obsidian, Craft, Roam, and more &#8212; and most of them are very well made. Still, I know plenty of smart people who lately have been experimenting with weird setups. </p><p>Just last week, <a href="https://x.com/karpathy/status/2039805659525644595">Karpathy wrote a viral tweet</a> exactly about that.</p><p>Why such a renewed excitement around <strong>knowledge management</strong>? Because everyone who tries to work <em>seriously</em> with AI agents eventually understands that this is a core problem to solve: continuously <em>supplying</em> agents with reliable, up-to-date information about your life and work, and creating a good collaboration surface on these.</p><p>I suspect this still feels a bit abstract, so I&#8217;ll make a few examples from my own work:</p><ul><li><p>An agent should periodically fetch meeting summaries from tools like Fathom or Fireflies, create a note for the meeting with the summary and action items, and link the note to individual attendees (each of whom should have a page for themselves). If there are attendees who are <em>new</em>, the agent should create individual notes for each of them, enriching my personal CRM.</p></li><li><p>An agent should receive voice notes from me and turn them into long-term notes and tasks, and connect them to the relevant existing pages.</p></li><li><p>An agent should take every new article I write and split it into atomic evergreen ideas, connect them to similar ideas I have already saved in the past, and better organize my knowledge base so that it&#8217;s easier to write new articles in the future.</p></li><li><p>An agent should suggest new article topics and podcast guests based on my recent readings and how these connect to things I have written in the past and interviews I already did.</p></li></ul><p>In terms of intelligence required, most of these tasks are <strong>trivial</strong>. But they need a good collaboration surface 1) for agents to fetch the relevant info and 2) for me to work well with them.</p><p><a href="https://tolaria.md/">Tolaria</a> is my attempt to build this for myself first, and hopefully for some others too.</p><p>It will be completely<strong> free and open source</strong>, so that it also works as a <strong>visible artifact</strong> of my <em>understanding</em> of how to create products with AI, for other people to inspect.</p><p>At any given time, if you want to know e.g. what I write in my CLAUDE.md, or how I write docs, or what types of tests I write and which I don&#8217;t &#8212; you shouldn&#8217;t just <em>trust</em> my articles, you should be able to go to the repo and see for yourself.</p><p>This way, the ideas you read on Refactoring become the result of three things:</p><ul><li><p><strong>&#128218; Research</strong> &#8212; I read and collect experiences from others.</p></li><li><p>&#128172; <strong>Conversations</strong> &#8212; I go deeper by running community events and 1:1 podcast interviews.</p></li><li><p>&#128295; <strong>Personal work</strong> &#8212; I do coding and product development myself to stress-test these beliefs.</p></li></ul><p>All of these elements are meant to be <em>public</em>: you can get <a href="https://refactoring.fm/i/193052967/weekly-readings">weekly digests</a> of what I read, listen to the <a href="https://refactoring.fm/podcast">podcast conversations</a>, <a href="https://refactoring.fm/p/refactoring-community">join the community</a> to chat with me (and others), and inspect the Tolaria codebase (soon!) to see how I write code.</p><p>Tolaria is not ready yet but it will be in a couple of weeks!</p><p>So where are we today? Here is an exec summary. Since I started working on it around mid Feb, here is what I got:</p><ul><li><p><strong>1526 commits</strong> &#8212; that is ~30 commits/day on average</p></li><li><p><strong>~70K LOCs</strong> &#8212; about 45 lines / commit</p></li><li><p><strong>~3000 tests</strong> &#8212; about 85% coverage</p></li><li><p><strong>9.5/10 code health</strong> &#8212; as measured by CodeScene</p></li><li><p><strong>40+ ADRs</strong> &#8212; to track our core tech choices, plus three summary docs for Architecture, Abstractions, and Getting Started.</p></li></ul><p>That&#8217;s 2.5x the amount of code we had last month (we were at 20K LOCs), with better code health (9.5 vs 9.3), and better docs. I am still not writing any code, and I am still reading very little of it.</p><p>The product also got way better to the point where, by now, I have fully replaced my Notion workspace. It still feels surreal to say that out loud, after 6+ years of really intensive Notion usage, but here we are.</p><p>So let&#8217;s get into how I work on it, starting with coding &#128071;</p><div><hr></div><h2>&#129438; OpenClaw vs Claude Code</h2><p>In last month&#8217;s <a href="https://refactoring.fm/p/my-ai-coding-workflow">post</a> I said that basically I acted as CEO, OpenClaw worked as a PM, and Claude Code worked as a team of designers + engineers.</p><p>Has any of this changed? Yes, and no. Roles are still kinda the same, but I am not using Claude Code strictly <em>together</em> with OpenClaw anymore, in the sense that the latter directs the former, but more in an async way. This change has been driven by three reasons:</p><ul><li><p>&#128184; <strong>Cost</strong> &#8212; the initial workflow in which OpenClaw steered CC all the time was wildly inefficient in terms of token spend.</p></li><li><p>&#127891; <strong>Capabilities</strong> &#8212; CC has caught up with a lot of OpenClaw stuff. Most of all, it has loops now.</p></li><li><p>&#128110;&#8205;&#9794;&#65039; <strong>Legal</strong> &#8212; most recently, Anthropic has explicitly banned this type of usage, but to be fair I had stopped it already.</p></li></ul><p>So by now my OpenClaw and Claude Code work on separate things, in a completely asynchronous way:</p><ul><li><p>OpenClaw turns my inputs into product specs, checks on the general status of things, brainstorms new ideas, and in general does the work that benefits from <em>broad</em> context.</p></li><li><p>Claude Code does all the technical work, including coding, writing ADRs and docs, and, crucially, QA, that was done by OpenClaw before.</p></li></ul><p>OpenClaw doesn&#8217;t interact with Claude Code anymore, but it periodically checks that it doesn&#8217;t get stuck or crashes (which can happen for a variety of reasons). In that case, it restarts it.</p><div><hr></div><h2>&#128295; Coding workflow</h2><p>This article is largely meant to work as a <em>delta</em> vs my original AI coding article to highlight things that have changed, but it&#8217;s also worth noting the good stuff that <em>has not changed.</em></p><p>The highest leverage parts of the AI coding workflow are <em>still</em> probably the CI gates on <strong>code health</strong> and <strong>test coverage</strong>. These gates exist in two places:</p>
      <p>
          <a href="https://refactoring.fm/p/updates-to-my-ai-coding-workflow">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>