<?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>Wed, 29 Jul 2026 06:42:27 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[Good relationships, automation, and weekly readings 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #218]]></description><link>https://refactoring.fm/p/good-relationships-automation-and</link><guid isPermaLink="false">https://refactoring.fm/p/good-relationships-automation-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 27 Jul 2026 07:00:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CR5A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right foot.</em></p><div><hr></div><h2>&#128184; AI spend is outrunning returns</h2><p><em>This idea is brought to you by today&#8217;s sponsor, DX!</em></p><p>Last week I published <a href="https://refactoring.fm/p/the-state-of-ai-impact-in-engineering">my own commentary</a> on the <a href="https://getdx.com/report/state-of-ai-impact-in-engineering-q2-report/?utm_source=refactoring">Q2 AI Impact report</a> by <a href="http://getdx.com/">DX</a>, which among other things, showed how quarterly median AI spend <strong>grew 28x</strong> year-over-year!</p><p>My expectation is that this <strong>AI honeymoon</strong> will not last forever, and tech leaders may already face tough budget conversations in the back half of 2026. That&#8217;s especially because it doesn&#8217;t seem that such spend is leading to <a href="https://refactoring.fm/i/207414394/orgs-are-not-multiplying-ai-output">outrageous outcomes</a> so far.</p><p>But we&#8217;ll see! You can find the full report below &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://getdx.com/report/state-of-ai-impact-in-engineering-q2-report/?utm_source=refactoring&quot;,&quot;text&quot;:&quot;Check out the full AI impact report&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://getdx.com/report/state-of-ai-impact-in-engineering-q2-report/?utm_source=refactoring"><span>Check out the full AI impact report</span></a></p><div><hr></div><h2>&#127793; Build relationships before you need them</h2><p>Especially in tech, networking often gets framed in a very transactional way. You meet people because one day you may need a referral, an intro, a customer, or a job.</p><p>I think this is exactly the wrong way to look at it.</p><p>I have found that the best relationships are created <em>before</em> there is any immediate need attached to them. You build rapport around common interests, you understand what the other person cares about, you are helpful when you can, and <strong>you do not keep score</strong>.</p><p>Long-term, this is both 1) the better behavior as a human being, and 2) the better strategy.</p><p>Because you never really know who will be able to help you in the future, or how. Opportunities often come through weak signals, second-order connections, and people who simply remember that interacting with you was... pleasant. Before it was any useful.</p><p>So my advice is simple: do not wait until you need something to show up.</p><p>But how?!</p><p>It can be anything, really. Share useful material (&#8221;I read this article today and thought you might like it&#8221;). Make intros. Reply thoughtfully. Follow up when someone is working on something interesting. <strong>Be generous</strong> <strong>in small ways</strong> that compound over time.</p><p>I wrote more about this in this full piece on growing your network &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:71183836,&quot;url&quot;:&quot;https://refactoring.fm/p/networking&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;title&quot;:&quot;How to Grow your Network &#127867;&quot;,&quot;truncated_body_text&quot;:&quot;For as long as I can remember, a good share of the people I admired have recommended me to grow my network.&quot;,&quot;date&quot;:&quot;2022-09-01T05:35:16.907Z&quot;,&quot;like_count&quot;:21,&quot;comment_count&quot;:2,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;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;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/networking?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web&amp;embedding_publication_id=64099"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CR5A!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" loading="lazy"><span class="embedded-post-publication-name">Refactoring</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">How to Grow your Network &#127867;</div></div><div class="embedded-post-body">For as long as I can remember, a good share of the people I admired have recommended me to grow my network&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 years ago &#183; 21 likes &#183; 2 comments &#183; Luca Rossi</div></a></div><div><hr></div><h2>&#128295; Automate the copy-paste (not the judgment)</h2><p>A lot of team process work is not actually <em>process</em> work. It&#8217;s copy-paste disguised as process.</p><p>Raise your hand if you ever updated a project management ticket because the real status lives elsewhere. Or you asked an engineer for a delivery date because the current dashboard is stale and can&#8217;t be trusted.</p><p>In my conversation with Antonia Scheidel, Director of Engineering at Duolingo, I liked her distinction between two kinds of information:</p><ol><li><p><strong>Information that already exists somewhere</strong></p></li><li><p><strong>Information that only exists in people&#8217;s heads</strong></p></li></ol><p>The first kind should usually be automated. E.g.:</p><ul><li><p>If an experiment was launched on the appropriate <em>experimentation platform</em>, humans should not have to copy that into Jira.</p></li><li><p>If a stakeholder needs to know that a step is ready for review, the system should notify them.</p></li></ul><p>The second kind, instead, still needs people.</p><p>In normal teams&#8217; workflows, there are plenty of <em>judgment calls</em> that cannot be reliably inferred from a tool, and that&#8217;s where you want to <em>direct</em> human attention. Things like delivery estimates, blockers, timeline changes, tradeoffs.</p><p>So, the shape of good automation looks like:</p><ol><li><p>Connect the systems of record</p></li><li><p>Remove the glue work</p></li><li><p>Ask people for the (remaining) information that genuinely requires their judgment.</p></li></ol><p>Antonia built this successfully at Duolingo, and you can find the full interview here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;48978b38-337e-4f93-a67e-c194bedc331d&quot;,&quot;caption&quot;:&quot;Listen now on YouTube, Apple, or Spotify&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Automate Team Processes &#9889; &#8212; with Antonia Scheidel&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-09-12T06:01:23.662Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/GK8M5tdgXi0&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/automating-team-processes-gracefully&quot;,&quot;section_name&quot;:&quot;&#127897;&#65039; Podcast&quot;,&quot;video_upload_id&quot;:&quot;1a2d9865-a9c0-4af3-9227-70819ded4953&quot;,&quot;id&quot;:172078825,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:21,&quot;comment_count&quot;:0,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#128218; Weekly Readings</h2><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4>&#129351; <a href="https://brodzinski.com/2026/07/3x-pull-request-size-ai.html">We 3.5x&#8217;d Our Pull Requests with AI: Now We Catch Fewer Bugs</a></h4><h5>5 min &#8226; by Pawel Brodzinski</h5><p>A detailed, real-world write-up about the impact of AI on an engineering team&#8217;s code reviews. PRs went from 200 to 800 lines on average, and reviewers inevitably started missing more things. Worth checking out.</p><div><hr></div><h4>&#129352; <a href="https://werd.io/american-ai-is-locked-down-and-proprietary-its-losing/">American AI is locked down and proprietary. It&#8217;s losing.</a></h4><h5>3 min &#8226; by Ben Werdmuller</h5><p>Ben makes a sharp argument that open models may win for the same reasons open infra usually wins: distribution, portability, and permissionless innovation. I am not sure the geopolitical framing is the whole story, but I really like the business point.</p><div><hr></div><h4>&#129353; <a href="https://simonwillison.net/2026/Jul/20/cheap-reverse-engineering/#atom-everything">Reverse-engineering is cheap now</a></h4><h5>1 min &#8226; by Simon Willison</h5><p>Tiny post, big ideas. Agents make throwaway code extremely cheap, so entire categories of &#8220;not worth it&#8221; automation suddenly become worth trying. Simon makes the example of reverse-engineering home devices, which I have tried myself many times! If AI makes weird small projects viable, I am all for 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[The State of AI Impact in Engineering]]></title><description><![CDATA[What data from 500+ teams is revealing about velocity gains.]]></description><link>https://refactoring.fm/p/the-state-of-ai-impact-in-engineering</link><guid isPermaLink="false">https://refactoring.fm/p/the-state-of-ai-impact-in-engineering</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 22 Jul 2026 12:06:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fd2h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Hi there! Today&#8217;s article is written together with my friend </span><a href="https://www.linkedin.com/in/justinreock"><span>Justin Reock</span></a><span>, Deputy CTO at </span><a href="http://getdx.com/"><span>DX</span></a><span>. Justin already co-authored a great article about </span><a href="https://refactoring.fm/p/vibe-coding-workflows"><span>vibe-coding workflows</span></a><span> last year, which ended up becoming one of the top 5 Refactoring articles ever, so we have a high bar to clear!</span></p><p><span>One of the things I like the most about the DX team is that they run an incredible amount of research. They run surveys all year round, and keep a pulse of where the industry is going around several topics &#8212; especially </span><strong><span>AI and developer experience</span></strong><span>.</span></p><p><span>They recently released the </span><a href="https://getdx.com/report/state-of-ai-impact-in-engineering-q2-report/?utm_source=refactoring"><span>Q2 2026 AI impact report</span></a><span>, the latest in a quarterly series tracking how AI is reshaping engineering teams. I regularly check out these reports, and one thing I noticed is how they gradually moved from discussing </span><strong><span>adoption</span></strong><span> to discussing </span><strong><span>impact</span></strong><span>.</span></p><p><span>The feeling is that AI is everywhere now, and the main challenge for engineering leaders is not to spearhead adoption anymore, but rather justify the exponentially-increasing AI budgets, by demonstrating what AI is actually delivering.</span></p><p><span>I got preview access to the report, and today we will comment on a few key highlights.</span></p><p><span>So here is the agenda:</span></p><ul><li><p><span>&#128202; </span><strong><span>Speed is real but uneven</span></strong><span> &#8212; what 500+ teams reveal about where AI gains concentrate, and who&#8217;s being left behind.</span></p></li><li><p><span>&#129521; </span><strong><span>Orgs are not multiplying AI output</span></strong><span> &#8212; developer experience is declining even as velocity climbs.</span></p></li><li><p><span>&#128300; </span><strong><span>Code is easier to change but harder to trust</span></strong><span> &#8212; a surprising divergence between maintainability and confidence.</span></p></li><li><p><span>&#128694;&#8205;&#9794;&#65039;&#8205;&#10145;&#65039; </span><strong><span>Spend is outrunning returns</span></strong><span> &#8212; AI budgets are up 28x, but innovation ratio is flat.</span></p></li><li><p><span>&#129517; </span><strong><span>What this means for engineering leaders</span></strong><span> &#8212; how to shift from tool adoption to system optimization.</span></p></li></ul><p><span>Let&#8217;s dive in!</span></p><div><hr></div><p><em><span>I want to thank Justin and the DX team for partnering on this! I am a big fan of their work and you should check out the full report here.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://getdx.com/report/state-of-ai-impact-in-engineering-q2-report/?utm_source=refactoring&quot;,&quot;text&quot;:&quot;Download the full report&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://getdx.com/report/state-of-ai-impact-in-engineering-q2-report/?utm_source=refactoring"><span>Download the full report</span></a></p><div><hr></div><h2><span>&#128202; Speed is real but uneven</span></h2><p><span>Across the 500+ respondents, </span><strong><span>over 50% of the code is now generated by AI</span></strong><span>. This metric has accelerated rapidly, increasing from 34% in Q1 2026.</span></p><p><span>Median weekly throughput rose 37% over four quarters (1.42 to 1.94 PRs/eng/week), and deployment frequency is up double digits across most segments. However, gains are concentrated among </span><strong><span>small organizations</span></strong><span> (less than 100 engineers) and tech-sector teams, pulling away from larger and traditional-industry teams, and the gap is widening.</span></p><p><span>This echoes what we have seen in other reports recently, from the </span><a href="https://refactoring.fm/p/acceleration-whiplash"><span>Acceleration Whiplash</span></a><span>, to the </span><a href="https://refactoring.fm/p/the-era-of-the-software-factory"><span>State of Software Delivery</span></a><span> earlier this year.</span></p><p><span>The speed at which the tools keep improving makes gains compound for teams who invest into AI workflows, so the distribution of team productivity becomes a steeper and steeper power law, with the top percentiles pulling away from the pack.</span></p><div><hr></div><h2><span>&#129521; Orgs are not multiplying AI output</span></h2><p><span>DX measures developer experience with a proprietary index called DXI (</span><a href="https://refactoring.fm/p/the-era-of-the-software-factory"><span>we talked about it with Abi Noda</span></a><span>), which, over the last four quarters, has </span><em><span>dropped</span></em><span> on average from 67 to 65.</span></p><p><span>Again this is not an </span><em><span>even</span></em><span> drop: AI is </span><em><span>improving</span></em><span> some aspects of the devex (docs quality, code maintainability, onboarding speed) while making others worse: larger PRs, slower reviews, less incremental delivery. In aggregate, the </span><strong><span>net effect is negative</span></strong><span>.</span></p><p><span>Median PR sizes have nearly doubled during the same period &#8212; and of course increases in PR size are an early proxy for technical debt, bugs, review friction, and all kinds of nasty stuff.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fd2h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fd2h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png 424w, https://substackcdn.com/image/fetch/$s_!fd2h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png 848w, https://substackcdn.com/image/fetch/$s_!fd2h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png 1272w, https://substackcdn.com/image/fetch/$s_!fd2h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fd2h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png" width="1360" height="878" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:878,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131121,&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/207414394?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.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_!fd2h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png 424w, https://substackcdn.com/image/fetch/$s_!fd2h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png 848w, https://substackcdn.com/image/fetch/$s_!fd2h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png 1272w, https://substackcdn.com/image/fetch/$s_!fd2h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1908ddbd-9fb3-4b56-adb6-09cca1434184_1360x878.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>So, </span><strong><span>velocity metrics</span></strong><span> alone will tell you things are improving, but </span><strong><span>devex metrics</span></strong><span> will tell you that the system (and developers) are strained, and we are far from a sustainable, positive flywheel.</span></p><p><span>My personal feeling about this is that so far we have mostly tried to </span><em><span>slap</span></em><span> AI onto the existing steps of the dev process, while running them the same way we always have. This might bring incremental gains, and even work well for some of the steps, but it completely breaks others, like </span><strong><span>code reviews</span></strong><span>.</span></p><p><span>It&#8217;s obviously foolish to think that AI can make developers write code 3x faster (as it already does), while assuming we&#8217;ll need to keep reviewing every single LOC manually.</span></p>
      <p>
          <a href="https://refactoring.fm/p/the-state-of-ai-impact-in-engineering">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AI scaffolding, daily feedback, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #217]]></description><link>https://refactoring.fm/p/ai-scaffolding-daily-feedback-and</link><guid isPermaLink="false">https://refactoring.fm/p/ai-scaffolding-daily-feedback-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 20 Jul 2026 07:02:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1AzC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp" 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><h3>Brought to you by our friends at <a href="https://na2.hubs.ly/H06Ljjc0">Atono</a>!</h3><blockquote><p>You hand off a story to an agent. The code works, it ships, but it&#8217;s not what you meant.</p><p>As agents move faster, the decisions that shape what gets built need to travel with the work. Most teams haven&#8217;t systematized this yet, so the result is correct implementations&#8230; of the wrong thing!</p><p>Atono just published their <strong><a href="https://na2.hubs.ly/H06LHnt0">From Intent to Production at Agent Speed</a></strong> guide, showing how product knowledge becomes your leverage point for keeping decisions intact, even at agent speed.</p><p><span>We&#8217;ve previously collaborated on pieces like </span><a href="https://refactoring.fm/p/the-state-of-product-development"><span>The State of Product Development 2026</span></a><span> and </span><a href="https://refactoring.fm/p/the-ai-productivity-paradox"><span>The AI Productivity Paradox</span></a><span> &#8212; this guide goes deeper into product delivery for agentic workflows </span>&#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://na2.hubs.ly/H06LHnt0&quot;,&quot;text&quot;:&quot;Download the guide&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://na2.hubs.ly/H06LHnt0"><span>Download the guide</span></a></p></blockquote><div><hr></div><h2>1) &#127959;&#65039; Agents are great scaffolding</h2><p>A mistake I see more and more with AI workflows (including mine!) is using AI for everything, even for parts that would be better done in other ways.</p><p>That&#8217;s easy to fall into, because when you are automating a new recurring task, an agent is often the fastest way to start. You can give it the goal in natural language, let it run the process end to end, and observe what happens. This is not only quick to do, it&#8217;s also useful because, at the beginning, you often do not know the real shape of the work yet.</p><p>So the agent helps you discover things like:</p><ul><li><p>which steps repeat every time</p></li><li><p>which data is missing or messy</p></li><li><p>where approvals are needed</p></li><li><p>which parts require actual judgment</p></li><li><p>and more</p></li></ul><p>Once the workflow becomes clear, though, the boring parts should be extracted into something more deterministic: scripts, APIs, cron jobs, workflow definitions, or whatever tool fits the job. That makes the workflow faster, cheaper, and easier to observe and debug.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1AzC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1AzC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp 424w, https://substackcdn.com/image/fetch/$s_!1AzC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp 848w, https://substackcdn.com/image/fetch/$s_!1AzC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp 1272w, https://substackcdn.com/image/fetch/$s_!1AzC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1AzC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp" width="1456" height="825" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/faeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:825,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:74042,&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/207253073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.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_!1AzC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp 424w, https://substackcdn.com/image/fetch/$s_!1AzC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp 848w, https://substackcdn.com/image/fetch/$s_!1AzC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp 1272w, https://substackcdn.com/image/fetch/$s_!1AzC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaeb49de-28a9-45e2-a032-a3960618c273_1456x825.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These days I try to keep AI where flexibility is valuable (e.g. judgment calls), and replace it where determinism is cheap. Most often, it&#8217;s a progression: I start with an agent because it is fast, observe where the task repeats, harden the stable steps, and leave the ambiguous parts to AI.</p><p>I wrote more about this in the full piece on orchestrating AI workflows &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:197106828,&quot;url&quot;:&quot;https://refactoring.fm/p/how-to-orchestrate-ai-workflows&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:null,&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 Orchestrate AI Workflows&quot;,&quot;truncated_body_text&quot;:&quot;Hey, Luca here! Welcome to a weekly essay from Refactoring.&quot;,&quot;date&quot;:&quot;2026-05-13T07:15:51.793Z&quot;,&quot;like_count&quot;:60,&quot;comment_count&quot;:1,&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;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-orchestrate-ai-workflows?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 Orchestrate AI Workflows</div></div><div class="embedded-post-body">Hey, Luca here! Welcome to a weekly essay from Refactoring&#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; 60 likes &#183; 1 comment &#183; Luca Rossi</div></a></div><div><hr></div><h2>2) &#128172; Giving feedback should be ordinary</h2><p>Feedback is often treated like a special event. It&#8217;s the performance review, or the difficult conversation we should have had long ago, or the moment when something went wrong enough that somebody has to say something.</p><p>The problem is that, if feedback only appears in those moments, people learn to <strong>associate it with danger</strong>. They hear &#8220;can I give you some feedback?&#8221; and brace for impact.</p><p>In my conversation with Jean Hsu and Cate Huston, two professional coaches, Cate shared a better habit: every time someone does something good, tell them.</p><p>When people receive frequent, <strong>specific positive feedback</strong>, they learn that you are paying attention to their work as a whole, not only waiting for mistakes. Then, even when you eventually need to say something corrective, it lands differently.</p><p>You can also spread this beyond yourself. When someone praises a colleague privately, ask: &#8220;have you told them?&#8221; Over time, feedback stops being capital-F Feedback and becomes normal signal in the system.</p><p>You can find the full interview with Jean and Cate here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;8fba2164-bbaf-4c47-8b4d-d9e6a35d1cf0&quot;,&quot;caption&quot;:&quot;Today&#8217;s sponsor is Intent by Augment.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Own Your Career &#129437; &#8212; with Jean Hsu and Cate Huston&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-05-01T08:37:21.922Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/tb5wdmTJeuk&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/how-to-own-your-career-with-jean&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;53d8586b-f6d8-474a-9f3a-292a3bf0f3f2&quot;,&quot;id&quot;:195650521,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:21,&quot;comment_count&quot;:0,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>3) &#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://lucumr.pocoo.org/2026/7/13/the-tower-keeps-rising/">The Tower Keeps Rising</a></h4><h5>3 min &#8226; by Armin Ronacher</h5><p>I really like the Babel analogy applied to how we cooperate as humans and, ultimately, software. For the first time, &#8220;construction&#8221; can keep going even after humans have lost the shared language needed to reason about the system. Food for thought.</p><div><hr></div><h4>&#129352; <a href="https://lethain.com/generated-demand/">Generated and Suppressed Demand</a></h4><h5>3 min &#8226; by Will Larson</h5><p>A useful mental model for why fixing a struggling team can feel like nothing improved. Sometimes the team gets better, and the reward for it is... more work! All the previously <em>hidden</em> demand finally shows up. Great management advice, as always from Will.</p><div><hr></div><h4>&#129353; <a href="https://antirez.com/news/169">Control the Ideas, Not the Code</a></h4><h5>6 min &#8226; by Salvatore &#8220;Antirez&#8221; Sanfilippo</h5><p>Antirez makes a clear point that many engineers are still resisting: if AI writes more code, reviewing every line is probably the wrong use of your time. You have more leverage when you focus on ideas and design.</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[Speed is the Only Moat 🏎️ — with Anush Elangovan]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 68]]></description><link>https://refactoring.fm/p/speed-is-the-only-moat-with-anush</link><guid isPermaLink="false">https://refactoring.fm/p/speed-is-the-only-moat-with-anush</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 17 Jul 2026 07:00:22 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/206247034/ca64810baae153b9914789cb4bc5fd58.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-w2F-u0kJllA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;w2F-u0kJllA&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/w2F-u0kJllA?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="266" height="57.36538461538461" 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;:266,&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><span>Today's guest is </span><strong><span>Anush</span></strong><span> </span><strong><span>Elangovan</span></strong><span>, VP of AI Software at AMD. </span></p><p><span>With Anush, we talked about how he thinks about open source as a key strategic driver in the AI era, and how his team is able to stay super fast while ensuring quality by combining their internal work with their external contributions.<br><br>And then we got into a rabbit hole about how to get big companies ready for AI, how to think about human capital, and how Anush personally spends his time. And spoiler alert, he is back to doing IC work for up to 40% of his time.</span></p><div><hr></div><h2>&#129351; Interview Summary</h2><p>If you are a <strong>&#128274; paid subscriber &#128274;</strong> you will find my own <em>summary</em> of the interview below.</p><p>It&#8217;s the 5-minute, handcrafted takeaways of what we talked about, with timestamps to the relevant video moments, for those who don&#8217;t have time to sit through the 1-hour chat.</p><p>Here is the agenda for today:</p><ol><li><p><strong>&#128275; AMD&#8217;s open-source AI stack</strong></p></li><li><p><strong>&#129302; Navigating AI-generated code contributions</strong></p></li><li><p><strong>&#9889; Speed as the only moat</strong></p></li><li><p><strong>&#127959;&#65039; Getting legacy systems AI-ready</strong></p></li><li><p><strong>&#129504; Why leaders should get their hands dirty</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/speed-is-the-only-moat-with-anush">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What LLM should you use for AI coding?]]></title><description><![CDATA[A guide to choosing and measuring different AI models]]></description><link>https://refactoring.fm/p/what-llm-should-you-use-for-ai-coding</link><guid isPermaLink="false">https://refactoring.fm/p/what-llm-should-you-use-for-ai-coding</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 15 Jul 2026 07:02:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/59d435a1-d1ee-4822-a73a-92ba03e62c68_2292x1526.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Quick heads up! <span>On </span><strong><span>July 22nd</span></strong><span> I am hosting a webinar on </span><strong><span>automated incident mgmt</span></strong><span> with AI, together with the folks at Augment Code.</span></em></p><p><em>That&#8217;s because I write a lot about my <a href="https://refactoring.fm/p/introducing-the-tolaria-alliance">AI workflows with Tolaria</a>, but many people (rightfully) tell me that things are more complex </em>on<em><span> a real team. </span></em></p><p><em><span>So I invited the team at Augment to share </span><strong><span>how they transformed their own engineering org</span></strong><span>, redesigning their main dev workflows. It&#8217;s free for everyone and you can RSVP below!</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://streamyard.com/watch/CXnfrUnxMCwk&quot;,&quot;text&quot;:&quot;Learn more and RSVP!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://streamyard.com/watch/CXnfrUnxMCwk"><span>Learn more and RSVP!</span></a></p><div><hr></div><p>Hi there! A lot of people these days ask me what AI models I use for coding, which I usually explain in my <a href="https://refactoring.fm/p/introducing-the-tolaria-alliance">monthly recaps</a>.</p><p>Some people also ask me &#8220;why&#8221; I use one model vs another, and that&#8217;s a way more complicated question to answer. AI models are hard to evaluate, because there are several factors to consider, and because, despite what public benchmarks say, each team situation is unique.</p><p>So today let&#8217;s try to think from first principles about <strong>how you should choose what LLM to use for coding</strong>, factoring everything in. Also let&#8217;s try to find some <em>durable</em> angles, so that you can create a mental model for yourself that stays valid for more than a couple of weeks.</p><p>Here is the agenda for today:</p><ul><li><p>&#128314; <strong>Accuracy / Speed / Cost</strong> &#8212; the three dimensions of model selection. But they are messier than you might think.</p></li><li><p>&#128202; <strong>Public benchmarks are not enough</strong> &#8212; you can&#8217;t trust leaderboards, and how your codebase discipline sets your floor.</p></li><li><p>&#129514; <strong>How to evaluate AI models</strong> &#8212; a maturity path from &#8220;just don&#8217;t&#8221; to building your own eval.</p></li><li><p>&#128256; <strong>Model routing</strong> &#8212; not all tasks are equally hard, so stop paying frontier prices for all of them.</p></li><li><p>&#127968; <strong>Self-hosting: almost never</strong> &#8212; cloud-hosted cheap models beat your own hardware, every time.</p></li></ul><p>Let&#8217;s dive in</p><div><hr></div><h2>&#128314; Model Selection 101</h2><p>With some degree of simplification, today you have three macro choices:</p><ol><li><p><strong>Top frontier models</strong> &#8212; e.g. Fable 5 or GPT 5.6</p></li><li><p><strong>Large open weights models, hosted in the cloud</strong> &#8212; e.g. GLM 5.2 on OpenRouter</p></li><li><p><strong>Smaller open weights models, self-hosted</strong> &#8212; e.g. see DeepSeek 4 Flash via <a href="https://github.com/antirez/ds4">DwarfStar</a> by Antirez</p></li></ol><p>These choices are actually more nuanced than this, because e.g. within frontier models, you may tweak the level of reasoning, or intentionally pick a smaller model that is cheaper and faster, because you feel it is a better fit for your task.</p><p>In fact, when judging models, there are three dimensions to consider:</p><ul><li><p>&#128300; <strong>Accuracy</strong> &#8212; % of times the AI gets the thing right</p></li><li><p>&#9889; <strong>Speed</strong> &#8212; tokens per second</p></li><li><p>&#128184; <strong>Cost</strong> &#8212; cost per 1M tokens (multiplied by tokens required)</p></li></ul><p>To make things even messier, these dimensions are not orthogonal. For example:</p><ul><li><p>A model with higher accuracy may translate into fewer round trips, which may translate into fewer tokens being used.</p></li><li><p>With many models you can reduce the amount of reasoning to improve speed while reducing accuracy.</p></li></ul><p>So, in most cases, performance is tricky to evaluate. Top frontier models guarantee max accuracy, but <strong>do you really need it</strong>?</p><p>Most people have anecdotal experience of small tasks for which fast + cheap models delivered the same level of accuracy. But how do you recognize them?</p><p>Also, it&#8217;s trickier than that, because even for bigger tasks you might find that a faster model, while less accurate, iterates faster over mistakes, leading to a lower cost overall. That&#8217;s what Jamie Turner, founder at Convex, was already <a href="https://refactoring.fm/p/how-to-design-your-tech-stack-for">saying last year</a>:</p><blockquote><p><em><strong>We optimize for fast feedback loops over perfect output. It&#8217;s better to get 80% correct code in 2 seconds than 95% correct code in 2 minutes.</strong></em></p></blockquote><p>Jamie made the case for optimizing for a quick feedback loop, so that developers don&#8217;t lose their train of thoughts while waiting for slow responses, even at the expense of a few more errors.</p><p>This is even more compelling when you factor in that with the current crop of LLMs, <strong>accuracy and cost are not in a linear relationship</strong>: a model that is 80% as accurate as the top frontier one might cost 1/10th of it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QuqF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QuqF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png 424w, https://substackcdn.com/image/fetch/$s_!QuqF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png 848w, https://substackcdn.com/image/fetch/$s_!QuqF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png 1272w, https://substackcdn.com/image/fetch/$s_!QuqF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QuqF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png" width="1456" height="934" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:934,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:121623,&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/206850127?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.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_!QuqF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png 424w, https://substackcdn.com/image/fetch/$s_!QuqF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png 848w, https://substackcdn.com/image/fetch/$s_!QuqF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png 1272w, https://substackcdn.com/image/fetch/$s_!QuqF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f51d5fb-b6ee-4dee-8ee2-5393c22536ed_1678x1076.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Many open models cost 1/10th of frontier ones, while being 80% as accurate in real-world tasks</figcaption></figure></div><p>Two good examples are GLM 5.2 and Grok 4.5. They both score pretty close to the top OpenAI and Anthropic models, while costing a small fraction of them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8EGM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8EGM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png 424w, https://substackcdn.com/image/fetch/$s_!8EGM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png 848w, https://substackcdn.com/image/fetch/$s_!8EGM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png 1272w, https://substackcdn.com/image/fetch/$s_!8EGM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8EGM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png" width="728" height="477" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:954,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:1095996,&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/206850127?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.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_!8EGM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png 424w, https://substackcdn.com/image/fetch/$s_!8EGM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png 848w, https://substackcdn.com/image/fetch/$s_!8EGM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png 1272w, https://substackcdn.com/image/fetch/$s_!8EGM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9626ee9-800d-40df-a55e-6fa66d0e3dee_2540x1664.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">GLM 5.2 scores very well against frontier labs models</figcaption></figure></div><p>Looking at these numbers is a good way to start some kind of <em>quantitative</em> reasoning around models, but I don&#8217;t think it&#8217;s enough &#128071;</p><div><hr></div><h2>&#128202; Public benchmarks are not enough</h2><p>I have grown skeptical of public benchmarks, for two reasons:</p>
      <p>
          <a href="https://refactoring.fm/p/what-llm-should-you-use-for-ai-coding">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Anticipating questions, quiet leadership, and weekly readings 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #216]]></description><link>https://refactoring.fm/p/anticipating-questions-quiet-leadership</link><guid isPermaLink="false">https://refactoring.fm/p/anticipating-questions-quiet-leadership</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 13 Jul 2026 07:00:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!X6r4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.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><div><hr></div><h2>&#129692; <a href="https://watch.getcontrast.io/register/context-maturity-jul?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">The 8 Levels of Context Maturity</a></h2><p><em>This is brought to you by our friends at <a href="https://watch.getcontrast.io/register/context-maturity-jul?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary">Unblocked</a>!</em></p><p>The token spend shows that AI is in your engineering workflow, but the throughput doesn&#8217;t!</p><p>Raise your hand if you can relate. A lot of the times, this is a <strong>context problem</strong>. I personally invest a lot in making sure AI gets good context about past decisions, what exists, and what needs to do, and <a href="https://refactoring.fm/i/204247813/fetching-knowledge-with-unblocked">I get a lot of help from Unblocked</a> about this.</p><p>On <strong>July 23rd</strong>, the Unblocked team is running a free webinar that maps the 8 levels of context maturity: where most teams are stuck, what the ceiling looks like at each stage, and what it takes to make the most out of your agents. </p><p>Very recommended &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.getcontrast.io/register/context-maturity-jul?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary&quot;,&quot;text&quot;:&quot;Join live July 23rd (FREE)&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.getcontrast.io/register/context-maturity-jul?utm_source=refactoring&amp;utm_medium=email&amp;utm_campaign=primary"><span>Join live July 23rd (FREE)</span></a></p><div><hr></div><h2>1) &#128499;&#65039; Anticipate exec questions</h2><p>Whether you are an engineer or a manager, one of the most underrated skills you can have is making your ideas easier to approve!</p><p>This is often tricky, especially when presenting to executives, who may be removed from our work and don&#8217;t understand technical details. In this case, you can put yourself in their shoes and *anticipate *many of their questions, like:</p><ul><li><p><em>How much will it cost?</em></p></li><li><p><em>What do we get for the money?</em></p></li><li><p><em>Why now?</em></p></li><li><p><em>What happens if we do nothing?</em></p></li><li><p><em>What other options did we consider?</em></p></li><li><p><em>How will we measure success?</em></p></li><li><p><em>What are the risks, and how do we reduce them?</em></p></li><li><p><em>Who owns delivery?</em></p></li><li><p><em>Which other teams or business areas are affected?</em></p></li></ul><p>Some of these will feel annoying or nitpicky, or even not really applicable to your situation, but you may get asked them anyway! The more senior someone is, the wider their span of responsibility becomes, and the less time they can spend understanding any single problem. Expect broad, sometimes even off-topic questions.</p><p>So your job becomes to compress the important context for your interlocutor, translating complexity into things like trade-offs, outcomes, risks, and timing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X6r4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X6r4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png 424w, https://substackcdn.com/image/fetch/$s_!X6r4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png 848w, https://substackcdn.com/image/fetch/$s_!X6r4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png 1272w, https://substackcdn.com/image/fetch/$s_!X6r4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X6r4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png" width="1456" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:124030,&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/206250738?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.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_!X6r4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png 424w, https://substackcdn.com/image/fetch/$s_!X6r4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png 848w, https://substackcdn.com/image/fetch/$s_!X6r4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png 1272w, https://substackcdn.com/image/fetch/$s_!X6r4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F399ebc18-fdc2-4ba7-85e4-8bf79b7c2021_1910x788.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A good proposal should make the obvious executive questions boring, because they are already answered. That is how you turn a good technical idea into something the business can actually say yes to.</p><p>I wrote more about this in the full piece with Anna Shipman on the Engineer &#8594; Executive Translation Layer &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:178065441,&quot;url&quot;:&quot;https://refactoring.fm/p/the-engineer-executive-translation&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:null,&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 Engineer &#8594; Executive Translation Layer &#128256;&quot;,&quot;truncated_body_text&quot;:&quot;Hey, Luca here! Today we are hosting a fantastic new article by Anna Shipman, CTO at Kooth.&quot;,&quot;date&quot;:&quot;2025-11-12T08:01:00.523Z&quot;,&quot;like_count&quot;:31,&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;subscriber&quot;:null}},{&quot;id&quot;:411731536,&quot;name&quot;:&quot;Anna Shipman&quot;,&quot;handle&quot;:&quot;annashipman&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c41f7b58-210b-4e51-9ee9-eed131f347c5_3259x3259.jpeg&quot;,&quot;bio&quot;:&quot;Strategic technology leader. Previous: CTO at Kooth, Technical Director at the Financial Times, Technical Architect at GDS. Love Vim, cryptic crosswords and pool. I speak at conferences, and write about strategy and tech leadership on my blog, JFDI.&quot;,&quot;profile_set_up_at&quot;:&quot;2026-02-25T10:14:45.167Z&quot;,&quot;reader_installed_at&quot;:&quot;2026-02-25T10:23:36.696Z&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;subscriber&quot;:null}}],&quot;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-engineer-executive-translation?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 Engineer &#8594; Executive Translation Layer &#128256;</div></div><div class="embedded-post-body">Hey, Luca here! Today we are hosting a fantastic new article by Anna Shipman, CTO at Kooth&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">9 months ago &#183; 31 likes &#183; Luca Rossi and Anna Shipman</div></a></div><div><hr></div><h2>2) &#127911; Quiet leadership prevents noisy emergencies</h2><p>Tech culture loves the person who saves the day.</p><p>The engineer who stays up late to fix production. The heroic intervention that makes everybody clap.</p><p>These days I rewatched <a href="https://refactoring.fm/p/how-to-manage-humans-with-rands">my first conversation with Rands</a>, and I love how he pushed back on this instinct. Rands simply says: if someone saves the day, the first question should be &#8220;<em>why did the day need saving?&#8221;</em></p><p>A lot of good leadership is invisible because the bad thing simply never happens. It&#8217;s when:</p><ul><li><p>You act on a yellow flag before it becomes a red flag.</p></li><li><p>You give feedback early, before resentment piles up.</p></li><li><p>You listen long and hard enough to understand what is actually going on, instead of rushing to action.</p></li></ul><p>Nobody claps when nothing explodes, but that&#8217;s how it works.</p><p>To make this possible, Rands stresses over the importance of <em>listening</em> as an active leadership tool. You need to be collecting the weak signals, the small patterns, which lead to equally small (but crucial) interventions every day.</p><p>You can find the full interview with Rands here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;1f42fd58-0ff9-4337-8b64-488471aa5265&quot;,&quot;caption&quot;:&quot;Today's guest is Michael Lopp, better known as Rands!&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Manage Humans &#127933; &#8212; with Rands&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2025-05-30T06:02:09.377Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/T8pcMl3rmbM&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/how-to-manage-humans-with-rands&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;6fe20f16-45bd-4435-9c43-db420a814dad&quot;,&quot;id&quot;:164631904,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:33,&quot;comment_count&quot;:0,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>3) &#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/exploring-gen-ai/local-models-for-coding-factors.html">Viability of Local Models for Coding</a></h4><h5>9 min &#8226; by Birgitta B&#246;ckeler</h5><p>A useful reality check on local coding models. The short version is they are getting much better, but the constraints are still very real: RAM, speed, context, tool calling, and reliability all matter. Great piece by Birgitta who we also interviewed <a href="https://www.youtube.com/watch?v=65ctfy3Rmgc">last year</a>.</p><div><hr></div><h4>&#129352; <a href="https://charity.wtf/p/in-defense-of-ai-mandates">In Defense of AI Mandates</a></h4><h5>4 min &#8226; by Charity Majors</h5><p>I love how Charity frames AI mandates as a funding device. This means. if leaders want people to learn a new way of working, they have to make room for the temporary slowdown, the annoyance, and the mess. Charity was also one of the <a href="https://www.youtube.com/watch?v=97YRxrKNLP0">very first guests</a> of our podcast.</p><div><hr></div><h4>&#129353; <a href="https://vickiboykis.com/2026/05/28/we-should-be-more-tired-than-the-model/">We should be more tired than the model</a></h4><h5>2 min &#8226; by Vicki Boykis</h5><p>An interesting take that I largely do not agree with, but gave me something to think about. I love the idea of using LLMs in a way that I can *grow *(as opposed to my skills <em>atrophying </em>here and there<em>)</em>, but I don&#8217;t see myself going back to writing code manually in order to do that. That&#8217;s too big of a tradeoff. But will look for ways to make this more <em>palatable</em>!</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 Rise of Malleable Software 🧩 — with Geoffrey Litt]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 67]]></description><link>https://refactoring.fm/p/the-rise-of-malleable-software-with</link><guid isPermaLink="false">https://refactoring.fm/p/the-rise-of-malleable-software-with</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 10 Jul 2026 07:01:01 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/205382828/6cb73de6333b2b6594561b52d5f2f9f8.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-XS56wfgAcdw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;XS56wfgAcdw&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/XS56wfgAcdw?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="266" height="57.36538461538461" 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;:266,&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&#8217;s guest is <strong>Geoffrey Litt</strong>, Design Engineer at <strong>Notion</strong>.</p><p>With Geoffrey, we talked about malleable software, a type of platform that kind of always existed, but is now getting new meaning and opportunity thanks to AI. </p><p>We also discussed how Notion itself changed its place in the ecosystem, with the AI agents first, and now with the new developer platform, where you can ship code directly inside Notion. And finally, we talked about how Notion builds Notion, design as shipping code to production, internal prototyping, feature flags, and more.</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>&#129521; <strong>What is malleable software?</strong></p></li><li><p>&#128690; <strong>The nightmare bicycle and progressive disclosure</strong></p></li><li><p>&#129302; <strong>Notion&#8217;s AI agent platform and developer tools</strong></p></li><li><p>&#127912; <strong>Design engineering and shipping code to production</strong></p></li><li><p>&#128302; <strong>What&#8217;s next for Notion</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/the-rise-of-malleable-software-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[🏢 Customer work vs product work]]></title><description><![CDATA[How to navigate the big conflict in B2B SaaS]]></description><link>https://refactoring.fm/p/customer-work-vs-product-work</link><guid isPermaLink="false">https://refactoring.fm/p/customer-work-vs-product-work</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 08 Jul 2026 07:00:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KDOH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23a086a0-7264-4a27-bff8-11f651ab1562_1520x968.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><span>Hey, </span><a href="https://refactoring.fm/about">Luca</a><span> here! Welcome to a </span></em><span>&#128274;</span><em><span> </span><strong>weekly essay</strong><span> </span></em><span>&#128274;</span><em> from Refactoring.</em></p><p><em><span>Every week I </span><a href="https://refactoring.fm/s/essays?sort=top">write an article</a><span> to 170K+ engineers about how make good software together, and </span><a href="https://refactoring.fm/podcast">interview a world-class tech leader</a><span>. I also build and maintain </span><a href="https://refactoring.fm/p/introducing-tolaria">Tolaria</a><span> in the open, publishing my workflows and learnings here.</span></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><p>I happen to know many startups who develop B2B products for large companies. I worked <a href="http://translated.com/">in one</a>, invested <a href="https://commerceclarity.com/">in another one</a>, and have friends who work in others.</p><p>An evergreen problem about these products is organizing work in a way that successfully takes into account:</p><ol><li><p>Roadmap / long-term product strategy</p></li><li><p>Impromptu requests from key customers</p></li></ol><p>This is tricky from all points of view: business, tech, and team organization. I have thoughts about this, so let&#8217;s start from first principles. Really the very basics.</p><p>We build tech to solve problems to customers, that pay us in return for it. At any given time we can have many of such customers. Based on this, the type the work we can do to solve such problems lays on a spectrum from <em>bespoke</em> to <em>one-size-fits-all</em>:</p><ul><li><p><strong>100% bespoke</strong> &#8212; is consultancy work.<strong> </strong>You just solve the problem, IP is of the client, zero reuse.</p></li><li><p><strong>100% one-size-fits-all</strong> &#8212; is product work.<strong> </strong>You develop <em>features</em> that can be used by all (or many of) the customers of your product.</p></li></ul><p>These types of work are <em>very</em> different but, fortunately, in most real-life situations it&#8217;s obvious where your work should land on the spectrum.</p><p>First of all, a lot of the ambiguity is cleared up upfront, by deciding the type of business you want to build. Knowing that you want to build an agency vs a B2B SaaS takes a lot of cards off the table:</p><ul><li><p>If you run an agency, the problems you solve change all the time, and there is most often not a clear path to building reusable pieces.</p></li><li><p>Conversely, if you ran a B2B SaaS with e.g. thousands of customers, any of these customers <em>might</em> want something custom, but it&#8217;s obvious that it&#8217;s not worth to build it just for them.</p></li></ul><p>About the latter, though, what if these customers are not thousands, but hundreds &#8212; or maybe just tens &#8212; and each of them is very valuable to you?</p><p>That&#8217;s where things get messy. Welcome to enterprise B2B SaaS.</p><p>So here is the agenda for today:</p><ul><li><p>&#9878;&#65039; <strong>Customer work vs product work</strong> &#8212; why enterprise B2B creates a unique tension between different types of work, and how you should think about them.</p></li><li><p>&#8265;&#65039; <strong>Is it worth to do bespoke customer work?</strong> &#8212; the right questions to ask yourself before committing to custom work for a single customer.</p></li><li><p>&#127933; <strong>How to design team structure</strong> &#8212; use dedicated roles like solution engineers of FDEs to shield your roadmap from customer requests.</p></li><li><p>&#128207; <strong>How to design tech strategy</strong> &#8212; empower solution engineers with great platform, so they move fast and build things close to product shape.</p></li><li><p>&#128256; <strong>How to converge</strong> &#8212; treat customer work as validated product input, and create avenues to merge it back over time.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><h2>&#9878;&#65039; Customer work vs product work</h2><p>If a customer of yours is paying you $100K for a yearly contract, instead of e.g. $2K, and you have, say, only 12 of those customers, all of a sudden their requests, however absurd, look... different.</p><p>This customer has <em>leverage</em> &#8212; and you have probably spent a lot to acquire them, so it can make complete business sense to do something specific to make them (and only them) happy.</p><p>We said this is a spectrum, but for the sake of simplicity let&#8217;s call this type of work &#8220;<strong>customer work</strong>&#8220;, as opposed to more general &#8220;<strong>product work</strong>&#8220;, which is done in the service of everyone.</p><p>The problem with customer work vs product work is that they have completely different <em>shapes</em>, when it comes to fundamental factors like:</p><ul><li><p><em>When</em> and <em>how</em> such work spawns</p></li><li><p>How urgent it is</p></li><li><p>How big it is</p></li><li><p>How it fits your overall strategy</p></li></ul><p>One of the goals of your standard <strong>product workflow</strong> is to <em>control </em>for these factors, in order to normalize them. So items you plan for are: comparable in size, planned in timely fashion, all fit your strategy, and so on.</p><p>Customer work spawns, by definition, from external forces, which makes all of the above out of your control. It also doesn&#8217;t land with the same level of <em>discipline</em> that you might put into your product process, so it&#8217;s work that is often: urgent, big, and unrelated to your plans.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S1jd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S1jd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png 424w, https://substackcdn.com/image/fetch/$s_!S1jd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png 848w, https://substackcdn.com/image/fetch/$s_!S1jd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png 1272w, https://substackcdn.com/image/fetch/$s_!S1jd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S1jd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png" width="1456" height="687" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:687,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:177149,&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/205507399?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.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_!S1jd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png 424w, https://substackcdn.com/image/fetch/$s_!S1jd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png 848w, https://substackcdn.com/image/fetch/$s_!S1jd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png 1272w, https://substackcdn.com/image/fetch/$s_!S1jd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa815e1c7-f704-4e2d-97c7-b8be2ff53edc_2128x1004.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This leads to questions:</p><ul><li><p>When is it worth to do these things?</p></li><li><p>How should I design my company accordingly? Speaking of team, tech, and process?</p></li></ul><p>Let&#8217;s start with the first one.</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/customer-work-vs-product-work">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Code hygiene, personal identity, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #]]></description><link>https://refactoring.fm/p/code-hygiene-personal-identity-and</link><guid isPermaLink="false">https://refactoring.fm/p/code-hygiene-personal-identity-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 06 Jul 2026 07:02:17 GMT</pubDate><enclosure url="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" 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>&#127903;&#65039; <a href="https://streamyard.com/watch/CXnfrUnxMCwk">Join our webinar on how to become an agentic engineering org!</a></h2><p>On <strong>July 22nd</strong> I will host an exclusive webinar together with the team at Augment Code!</p><p>Most teams adopt coding agents and see a <strong>20% lift</strong> at most, and then plateau. The most common reason is that the bottleneck moves, and <strong>you should lift your whole dev process</strong>, not just coding.</p><p>In this session, the Augment Code team shares <strong>how they transformed their own engineering org</strong> by redesigning one workflow at a time, and demos two of them live on a real codebase: <em>agentic code review</em> and <em>automated incident management</em>, where agents now resolve the majority of incidents end-to-end.</p><p>You&#8217;ll leave with a playbook for finding your org&#8217;s current bottleneck and a workflow you can replicate with your team this week &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://streamyard.com/watch/CXnfrUnxMCwk&quot;,&quot;text&quot;:&quot;Learn more and RSVP!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://streamyard.com/watch/CXnfrUnxMCwk"><span>Learn more and RSVP!</span></a></p><div><hr></div><h2>1) &#129529; AI makes code hygiene enforceable</h2><p>I have written many times about this recently, but I&#8217;ll keep hammering on this point because it is so important, and I believe many people haven&#8217;t fully grasped it yet.</p><p>Good code hygiene is, at once, 1) something everybody agrees with in theory, and 2) quietly and often sacrifices in practice, because it&#8217;s hard to maintain.</p><p>Things like good test coverage, small files, high cohesion + low coupling, low cyclomatic complexity, have all historically needed people who care enough to push for it, review for it, and absorb the cost of fixing it.</p><p>For the first time, AI allows to turn hygiene into a system that can be enforced at almost no additional cost. You can give agents rules about how to write tests, keep files small, or refactor before adding new behavior.</p><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_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" width="728" height="260.5" 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;normal&quot;,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:200363,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/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-normal" alt="" title="" 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Many of such rules can also be enforced by gates: coverage checks, code health thresholds, linters, static analysis, and more. Guidance tells the agent what the floor looks like, and gates make such floor non-negotiable. And you can design these checks to run early, so the feedback arrives while the work is still cheap to fix.</p><p>The #1 concern of engineers about AI coding is still code quality, but you can actually use AI to <em>increase</em> the code quality of your team. I wrote more about this in the full piece on the compounding software factory &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:195748040,&quot;url&quot;:&quot;https://refactoring.fm/p/the-compounding-software-factory&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;title&quot;:&quot;The Compounding Software Factory &#128200;&quot;,&quot;truncated_body_text&quot;:&quot;Hey there, Luca here!&quot;,&quot;date&quot;:&quot;2026-04-29T07:55:12.038Z&quot;,&quot;like_count&quot;:58,&quot;comment_count&quot;:2,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;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;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://refactoring.fm/p/the-compounding-software-factory?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CR5A!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" loading="lazy"><span class="embedded-post-publication-name">Refactoring</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The Compounding Software Factory &#128200;</div></div><div class="embedded-post-body">Hey there, Luca here&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; 58 likes &#183; 2 comments &#183; Luca Rossi</div></a></div><div><hr></div><h2>2) &#129694; Find a broader identity for yourself</h2><p>A lot of the anxiety around AI is really about who you are (and who you are going to become) as a professional, rather than about tools.</p><p>Based on your sense of identity, AI can feel either like an opportunity, or a threat.</p><p>If you define yourself narrowly &#8212; e.g. &#8220;I am a backend engineer who is great at algorithms&#8221;, or &#8220;I love the thrill of solving puzzles with code&#8221; &#8212; then AI might feel like it is walking into your house and stealing furniture.</p><p>Earlier this year I talked about this with my friend Thiago Ghisi, who had a long engineering leadership career, and then used his sabbatical to step back and look for broader patterns in his life and work.</p><p>He is now studying clinical psychology&#8212; and sure, if you frame him only as a Director of Engineering, this might look like a strange detour. But if you frame him as someone who helps high-achieving people grow, you can suddenly connect more dots.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MYMl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MYMl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png 424w, https://substackcdn.com/image/fetch/$s_!MYMl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png 848w, https://substackcdn.com/image/fetch/$s_!MYMl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png 1272w, https://substackcdn.com/image/fetch/$s_!MYMl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MYMl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png" width="1456" height="772" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:772,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:293136,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/184235918?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.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_!MYMl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png 424w, https://substackcdn.com/image/fetch/$s_!MYMl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png 848w, https://substackcdn.com/image/fetch/$s_!MYMl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png 1272w, https://substackcdn.com/image/fetch/$s_!MYMl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb049a8b6-0b0e-4ae5-8dcd-ef1360d5899a_2880x1528.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I think this is a useful exercise for engineers too. Instead of thinking in terms of <em>skills</em>, ask yourself:</p><ul><li><p><em>Why do I do what I do?</em></p></li><li><p><em>What is a broader version of my role?</em></p></li><li><p><em>What kinds of problems do I actually care about solving?</em></p></li></ul><p>A broader identity makes you more adaptable, and opens up more opportunities. You can find the full piece below &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:184235918,&quot;url&quot;:&quot;https://refactoring.fm/p/finding-yourself-in-the-ai-era&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:null,&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;Finding yourself in the AI era &#10024;&quot;,&quot;truncated_body_text&quot;:&quot;Hey, Luca here! This is a &#10024; bonus free essay &#10024; from Refactoring. Based on our schedule it should have been a paid one! But I really care about this topic so I decided to make it free for everyone.&quot;,&quot;date&quot;:&quot;2026-01-14T08:02:05.523Z&quot;,&quot;like_count&quot;:77,&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;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/finding-yourself-in-the-ai-era?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">Finding yourself in the AI era &#10024;</div></div><div class="embedded-post-body">Hey, Luca here! This is a &#10024; bonus free essay &#10024; from Refactoring. Based on our schedule it should have been a paid one! But I really care about this topic so I decided to make it free for everyone&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">6 months ago &#183; 77 likes &#183; 6 comments &#183; Luca Rossi</div></a></div><div><hr></div><h2>3) &#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://newsletter.kentbeck.com/p/the-cost-yagni-was-never-about">The Cost YAGNI Was Never About</a></h4><h5>4 min &#8226; by Kent Beck</h5><p>I love how Kent reframes YAGNI for the AI era. The cost has never been writing the actual code, but rather spending optionality too early, and pulling investment forward before the feature can pay you back. Great article everyone should read.</p><div><hr></div><h4>&#129352; <a href="https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction">The Wrong Abstraction</a></h4><h5>4 min &#8226; by Sandi Metz</h5><p>This is a great <em>segue</em> to the Kent&#8217;s article above. Duplication is usually cheaper than the wrong abstraction, because the wrong abstraction eventually collects all kinds of bad stuff &#8212; parameters, conditionals, and sunk-cost arguments. Sometimes the fastest way forward is going back, but this is usually very hard to do.</p><div><hr></div><h4>&#129353; <a href="https://www.schneier.com/blog/archives/2026/06/ai-and-liability.html">AI and Liability</a></h4><h5>4 min &#8226; by Bruce Schneier</h5><p>Including this great piece by Bruce even if it&#8217;s not properly about software engineering, because it&#8217;s so relevant today. Companies should be liable for what their AI agents say and do, just like they are for employees or published content. If your product presents an answer with your logo on it, you should own it, and not use &#8220;the model said so&#8221; as an escape hatch.</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 the Tolaria Alliance! 🦸‍♂️]]></title><description><![CDATA[A small set of tools that power my Tolaria coding workflow, and also fund my work!]]></description><link>https://refactoring.fm/p/introducing-the-tolaria-alliance</link><guid isPermaLink="false">https://refactoring.fm/p/introducing-the-tolaria-alliance</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 01 Jul 2026 11:47:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-_GB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is a special edition of Refactoring and I am so excited about it!</p><p>By now, <strong>developing <a href="https://tolaria.md/">Tolaria</a></strong> is a big chunk of my working time (about 40%, to be precise). I like this balance and I am happy I can regularly write articles about AI coding coming from my own experience, as opposed to pure research.</p><p>I also don&#8217;t want to end up writing <em>only</em> about that, and so far I have kept a schedule of about <strong>once a month</strong>. This feels like is a good cadence: it&#8217;s feel overwhelming for readers, and gives me time to produce actual <em>updates</em> to the workflow, as opposed to posting always the same things.</p><p>So, today I am covering a few workflow updates, but most of all I am introducing a <strong>new set of partnerships</strong> I am very proud of.</p><p>So let&#8217;s dive in!</p><div><hr></div><h2>&#128167; The State of Tolaria</h2><p>First of all you may wonder: how is Tolaria doing? Pretty well, if you ask me.</p><p>From a growth perspective, it has now almost <strong>18K stars</strong> on Github, <strong>100K+ downloads</strong>, and thousands of daily active users.</p><p>From a product perspective, this month we delivered a ton of updates, including some massive ones, like the support for <strong>native spreadsheets</strong>. </p><p>You can now create and edit spreadsheets inside Tolaria with Excel-compatible formulas in a completely open and portable format, which is basically CSV with a frontmatter on top.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-_GB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-_GB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png 424w, https://substackcdn.com/image/fetch/$s_!-_GB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png 848w, https://substackcdn.com/image/fetch/$s_!-_GB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png 1272w, https://substackcdn.com/image/fetch/$s_!-_GB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-_GB!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png" width="1200" height="774.7252747252747" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/efae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:940,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:2493531,&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/204247813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.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_!-_GB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png 424w, https://substackcdn.com/image/fetch/$s_!-_GB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png 848w, https://substackcdn.com/image/fetch/$s_!-_GB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png 1272w, https://substackcdn.com/image/fetch/$s_!-_GB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefae0d0d-d7db-467a-892d-75f88b89d2ee_2590x1672.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>We also improved a lot of the editor experience, adding </span><strong>collapsible headings</strong><span>, block navigation, better spacing and typography, all while making everything </span><strong>faster than ever</strong><span>. If you haven&#8217;t tried it in a while, you definitely should!</span></p><p>I really enjoy developing (and using!) Tolaria, so the question recently has rather become: how do I make this work sustainable, while keeping everything free and open?</p><p>Enter our tech alliance!</p><div><hr></div><h2>&#129464;&#8205;&#9794;&#65039; Creating our own Tech Alliance</h2><p>The tools I use to develop Tolaria are no secret &#8212; you can figure out most of them by looking at the repo, the <a href="https://github.com/refactoringhq/tolaria/blob/main/AGENTS.md">AGENTS</a> file, hooks, and my own articles.</p><p>So, over the last month I reached out to the ones I use the most to figure out if we could work together to make the development of Tolaria more sustainable on my end via open source sponsorships, in return for me spreading the word about how I use such tools, and providing good feedback on how to improve them.</p><p>The result is an <strong>alliance</strong> that as of today includes four tools: <strong><a href="https://codescene.com/">CodeScene</a></strong>, <strong><a href="https://circleci.com/">CircleCI</a></strong>, <strong><a href="https://codacy.com/">Codacy</a></strong>, and <strong><a href="https://getunblocked.com/https://getunblocked.com/?utm_source=refactoring&amp;utm_medium=newsletter&amp;utm_campaign=tolaria">Unblocked</a></strong>.</p><p>These partnerships allow Tolaria to stay free and open forever, and even give us the opportunity to accelerate by hiring a great product engineer (<em>if you think you are a great fit, please reach out and say hi!</em>).</p><p>So today I will tell you more about my workflow, which includes these tools &#8212; but first an ethical statement: I will only <em>ally </em>(and stay allied) with tools I personally use and believe are the best way to do what they do. As you will see these are <em>non overlapping</em>: each has its own job, so they really make for my <strong>tech stack</strong>. Over time we will also expand on this and create exclusive deals for Refactoring subscribers!</p><p>Before we talk about the tools, it&#8217;s worth refreshing how I think about <em>controls</em> for code written by AI. I have written about it in this recent piece &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;6d92a9d5-baf3-4000-acc6-ec5fa9b10dd6&quot;,&quot;caption&quot;:&quot;Hey, Luca here! Welcome to a &#128274; weekly essay &#128274; from Refactoring.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;My AI Coding Workflow&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-06-03T07:02:23.762Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba3740b9-b1f0-462d-8744-8cd1d81d6a81_1714x1138.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/my-ai-coding-workflow-b09&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:200102476,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:71,&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><p>In a nutshell, I <em>steer </em>AI output in three main ways:</p><ul><li><p><strong>&#8618;&#65039; Guides </strong>&#8212; instructions in the AGENTS file and skills. Not 100% reliable: the AI may or <em>may not</em> follow them.</p></li><li><p><strong>&#128260; Gates </strong>&#8212; deterministic checks that don&#8217;t let bad code move forward if some conditions are not met.</p></li><li><p><strong>&#8617;&#65039; Guards</strong> &#8212; fallback procedures that typically run once a day to fix what goes through the cracks.</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_!hd-o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hd-o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png 424w, https://substackcdn.com/image/fetch/$s_!hd-o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png 848w, https://substackcdn.com/image/fetch/$s_!hd-o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png 1272w, https://substackcdn.com/image/fetch/$s_!hd-o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hd-o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png" width="1456" height="691" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:691,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:524294,&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/204247813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.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_!hd-o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png 424w, https://substackcdn.com/image/fetch/$s_!hd-o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png 848w, https://substackcdn.com/image/fetch/$s_!hd-o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png 1272w, https://substackcdn.com/image/fetch/$s_!hd-o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e77db0-5966-4432-a71b-fb513f6c6473_1914x908.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Out of these, the most important part is the </span><strong>gates</strong><span>, because they have the (deterministic) power to stop bad code, so the more I can express this way, the better. Most of the tools below are integrated this way.</span></p><p><span>So let&#8217;s go &#128071;</span></p><div><hr></div><h2>&#129658; Code Health &#8212; with <a href="https://codescene.com/">CodeScene</a></h2><p><a href="https://codescene.com/">CodeScene</a> probably needs no introduction because I have written about it many times here. I am a big fan of <a href="https://se.linkedin.com/in/adam-tornhill-71759b48">Adam Tornhill</a>&#8216;s work, which to me is about two big things:</p><ul><li><p>A proprietary algorithm to calculate code health, that considers 20+ factors.</p></li><li><p>The &#8220;hotspot&#8221; approach, which looks at git history and suggests refactoring targets prioritizing files that are changed the most often.</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_!-9Dp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-9Dp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png 424w, https://substackcdn.com/image/fetch/$s_!-9Dp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png 848w, https://substackcdn.com/image/fetch/$s_!-9Dp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png 1272w, https://substackcdn.com/image/fetch/$s_!-9Dp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-9Dp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png" width="1456" height="955" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:955,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1192160,&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/204247813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.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_!-9Dp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png 424w, https://substackcdn.com/image/fetch/$s_!-9Dp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png 848w, https://substackcdn.com/image/fetch/$s_!-9Dp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png 1272w, https://substackcdn.com/image/fetch/$s_!-9Dp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52031750-52f6-4df1-95f0-5460d57455b5_2666x1748.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">It&#8217;s nice to see code dependencies and clusters at a glance</figcaption></figure></div><p>I integrate CodeScene as a hard gate in local hooks: new code can&#8217;t be committed if it&#8217;s not a 10/10. For modifying old code, the AI needs to follow the boy scout rule: leave the code better than it found it. So it measures the code health <em>before</em> touching the file, and <em>after</em>, and the score needs to be the same or higher.</p><p>After any commit that improves the overall codebase health, the AI also increases the thresholds, to create a positive flywheel.</p><p>After four months working like this, now the code has perfect health, and the <a href="https://github.com/refactoringhq/tolaria/blob/main/.codescene-thresholds">current threshold</a> is literally 10/10!</p><div><hr></div><h2>&#128274; Security and Quality &#8212; with <a href="https://codacy.com/">Codacy</a></h2><p><a href="https://codacy.com/">Codacy</a> works on code quality too, but from a different angle: rather than <em>scoring</em> files, it surfaces <strong>individual issues</strong>.</p><p>Issues come with severity levels and belong to various categories, like security, performance, compatibility, code being error prone, and more.</p><p>Codacy has an MCP that I use to steer my Codex locally, and to implement an actual blocking <em>gate </em>before it pushes any code. All new code has to be issue-free, and when touching old code, the AI also needs to fix existing problems, other than making the business 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_!qe5H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qe5H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png 424w, https://substackcdn.com/image/fetch/$s_!qe5H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png 848w, https://substackcdn.com/image/fetch/$s_!qe5H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png 1272w, https://substackcdn.com/image/fetch/$s_!qe5H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qe5H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png" width="1456" height="705" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:705,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139823,&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/204247813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.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_!qe5H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png 424w, https://substackcdn.com/image/fetch/$s_!qe5H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png 848w, https://substackcdn.com/image/fetch/$s_!qe5H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png 1272w, https://substackcdn.com/image/fetch/$s_!qe5H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8652d69-8deb-4d24-8f91-8cba91703730_1954x946.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I am also working with the Codacy team on their new product <strong><a href="https://verity.md/tolaria">Verity</a> </strong>(you can join the <a href="https://verity.md/tolaria#pricing">beta for free here</a>), that aims to steer agents&#8217; work by creating a knowledge base of past decisions.</p><p>This is interesting to me because I do that with ADRs, and would love to create more reliable controls against code that violates them. Verity is promising about that, and should also track token efficiency and a bunch of process metrics that I am interested in improving over time.</p><div><hr></div><h2><span>&#9989; Validation &#8212; with </span><a href="https://circleci.com/">CircleCI</a></h2><p>A few months ago I made a change in how I run our test suite, creating local hooks with Husky so that AI agents can immediately see if controls fail, instead of waiting for the remote CI.</p><p>This was very effective at improving the agents&#8217; work, at the expense of completely hogging my machine every time. Some parts of the test suite are particularly heavy (e.g. playwright), and running them in local means the whole thing takes time &#8212; about 15 mins &#8212; and parallelizing things is out of question, because resources are not enough. It&#8217;s tricky to run even just 2 worktrees at the same time: things sometimes literally crash.</p><p>I talked with <a href="https://www.linkedin.com/in/robzuber/">Rob Zuber</a> from <a href="https://circleci.com/">CircleCI</a> about this, and they implemented a great solution: local hooks that are run remotely, in what they call <a href="https://circleci.com/blog/chunk-sidecars/">Chunk Sidecars</a>.</p><p>Sidecars are preconfigured environments that run alongside your local workflow, and validate changes as they happen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tPlB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tPlB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png 424w, https://substackcdn.com/image/fetch/$s_!tPlB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png 848w, https://substackcdn.com/image/fetch/$s_!tPlB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!tPlB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tPlB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:834833,&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/204247813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.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_!tPlB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png 424w, https://substackcdn.com/image/fetch/$s_!tPlB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png 848w, https://substackcdn.com/image/fetch/$s_!tPlB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png 1272w, https://substackcdn.com/image/fetch/$s_!tPlB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F448719bf-44ac-41a3-9a7f-a99230869258_2152x1300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This allows to 1) free up your machine resources, and 2) make things faster by introducing real concurrency.</p><p>This way I have been able to reduce the suite run time <strong>from 15 to 4 mins</strong>, while also being able to spawn more worktrees safely. A massive win!</p><div><hr></div><h2>&#128214; Fetching knowledge &#8212; with <a href="https://getunblocked.com/?utm_source=refactoring&amp;utm_medium=newsletter&amp;utm_campaign=tolaria">Unblocked</a></h2><p><a href="https://getunblocked.com/?utm_source=refactoring&amp;utm_medium=newsletter&amp;utm_campaign=tolaria">Unblocked</a> is a context engine: it takes information from several sources (e.g. Github, Notion, Slack, Datadog, ...) so you can ask questions about it.</p><p>I have known Dennis, Claire, and the team at Unblocked for a long time, but didn&#8217;t think of using it for Tolaria until just recently, because I thought that Unblocked would shine when you have <em>many</em> information sources, and we legitimately don&#8217;t have many.</p><p>I was wrong.</p><p>I plugged it about one month ago, connecting it to Github and Sentry. Sentry is useful to triangulate issues, but the Github connection would basically be worth by itself, because it indexes the code, the ADRs, and all the history of changes.</p><p>I have been asking questions about how we do this and that and checking side by side with Codex (which instead just greps and fetches things on the go) and the difference in speed and accuracy is just obvious.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4tT5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4tT5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png 424w, https://substackcdn.com/image/fetch/$s_!4tT5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png 848w, https://substackcdn.com/image/fetch/$s_!4tT5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png 1272w, https://substackcdn.com/image/fetch/$s_!4tT5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4tT5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png" width="1456" height="948" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:948,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1335937,&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/204247813?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.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_!4tT5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png 424w, https://substackcdn.com/image/fetch/$s_!4tT5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png 848w, https://substackcdn.com/image/fetch/$s_!4tT5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png 1272w, https://substackcdn.com/image/fetch/$s_!4tT5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7f01a1-c83f-4da2-a9a7-347a42429fbe_1856x1208.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Even more importantly, Codex itself uses Unblocked via the MCP to understand past decisions and fetch relevant ADRs.</p><p>Big props to the Unblocked guys because this was an easy win and largely plug-and-play!</p><div><hr></div><h2>&#128301; What&#8217;s next</h2><p>Now that Tolaria has sustainable funding, I am going to invest even more on it. Again, I am exploring hiring a strong product engineer, so if you think you can be a good fit, feel free to reach out and say hi!</p><p>As for future work, the most important thing ahead is the <strong>mobile version</strong>.</p><p>I already have a working prototype for iPad, but there are still a lot of rough edges. Also, the iPad version is the easy part: for smartphones we need to completely reinvent the UI &#8212; I have been working on it &#128170;</p><div><hr></div><p>And that&#8217;s it for today! I wish you a great week</p><p><span>Sincerely &#128075;</span><br><span>Luca</span></p>]]></content:encoded></item><item><title><![CDATA[Organizing information, code health, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #214]]></description><link>https://refactoring.fm/p/monday</link><guid isPermaLink="false">https://refactoring.fm/p/monday</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 29 Jun 2026 07:01:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CR5A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right foot.</em></p><div><hr></div><div class="callout-block" data-callout="true"><h3>&#128203; <a href="https://getunblocked.link/X5bccbt">Unblocked: context to save you time and money</a></h3><p><em>This week&#8217;s newsletter is brought to you by <a href="https://getunblocked.link/X5bccbt">Unblocked</a>!</em></p><p><a href="https://getunblocked.link/X5bccbt">Unblocked</a><strong> </strong>brings together your PRs, docs, conversations, tickets, and more&#8211; turning them into actionable context for both your team and their AI agents.</p><p>Engineering teams that are getting ahead right now use a <strong>context engine</strong> like Unblocked to make better plans, use fewer tokens, and spend less time in review cycles.</p><p>AI is in your engineering workflow. While the token spend shows it, the throughput doesn&#8217;t. The human is very much still in the loop, and that&#8217;s a context problem.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://getunblocked.link/X5bccbt&quot;,&quot;text&quot;:&quot;Stop babysitting your agents&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://getunblocked.link/X5bccbt"><span>Stop babysitting your agents</span></a></p></div><div><hr></div><h2>1) &#129517; Organize information based on action</h2><p>Most knowledge bases slowly become piles of <strong>uninteresting information</strong>. After a while everything starts looking the same: meeting notes, ideas, projects, living side by side and you don&#8217;t know exactly how and why.</p><p>I believe when you store a new piece of information, there are two questions you need to ask yourself:</p><ul><li><p><strong>What is this?</strong></p></li><li><p><strong>What is this useful for?</strong></p></li></ul><p>The second question is often overlooked, and it&#8217;s a core idea behind <a href="https://refactoring.fm/p/introducing-portent">Portent</a>, which I published last month.</p><p>Portent includes default types &#8212; which answer the question &#8220;what is this&#8221; &#8212; but also a set of default relationships (belongs to, related to, etc) to help you figure out <strong>how to connect notes together</strong>, based on what they should help you with.</p><p>So, a meeting may belong to a project, a procedure may belong to a responsibility, a resource may be related to a topic, and so on.</p><p>Connecting notes together is hard work, but it&#8217;s paramount work! Otherwise you easily get stuck: you optimize too much for memory, and not enough for motion.</p><p>The goal is to know what to do next, rather than remember more stuff.</p><p>You can find the full article below:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:198376374,&quot;url&quot;:&quot;https://refactoring.fm/p/introducing-portent&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:null,&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;Introducing Portent &#9752;&#65039;&quot;,&quot;truncated_body_text&quot;:&quot;Today it&#8217;s almost one month since I released Tolaria, 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.&quot;,&quot;date&quot;:&quot;2026-05-20T07:44:11.683Z&quot;,&quot;like_count&quot;:63,&quot;comment_count&quot;:7,&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;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/introducing-portent?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">Introducing Portent &#9752;&#65039;</div></div><div class="embedded-post-body">Today it&#8217;s almost one month since I released Tolaria, 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&#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; 63 likes &#183; 7 comments &#183; Luca Rossi</div></a></div><div><hr></div><h2>2) &#128202; Treat code health as a data product</h2><p>Code quality conversations are often extremely vague.</p><p>Everyone wants cleaner code, fewer bugs, easier changes, but unless these things become <strong>visible and measurable</strong>, they remain mostly opinions.</p><p>One thing that I liked in my conversation with Stuart Caborn is that Loveholidays treated <strong>code health like a data product</strong>.</p><p>They collected signals, put them on dashboards, trended them over time, compared teams, and checked whether the numbers matched how engineers felt in sentiment surveys.</p><p>The AI angle makes this even more important. If code health data is available through tools and MCP servers, humans and agents can ask questions directly:</p><ul><li><p>How is my team doing compared with yesterday?</p></li><li><p>Are there any areas that got worse this week?</p></li><li><p>Where should an agent be more careful?</p></li></ul><p>At that point code health becomes a feedback system that informs your dev process, and it&#8217;s exactly the kind of feedback AI needs. The better the codebase, the easier for agents to understand it, change it, and spend fewer tokens doing so.</p><p>You can find the full interview with Stuart here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;4669ab7b-bac5-4109-b550-5ff85536dacb&quot;,&quot;caption&quot;:&quot;Today&#8217;s sponsor is Intent by Augment.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;AI Coding meets Code Health &#129668; &#8212; with Stuart Caborn&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-04-17T07:01:17.745Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/msEjXJhL0HM&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/ai-coding-meets-code-health-with&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;99827a36-4345-4b9a-b654-f13b7e2b736e&quot;,&quot;id&quot;:194274334,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:18,&quot;comment_count&quot;:0,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>3) &#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://theengineeringmanager.substack.com/p/the-right-kind-of-ai-sceptic">Earn Your Scepticism</a></h4><h5>10 min &#8226; by James Stanier</h5><p>James makes a distinction I like a lot: scepticism as a conclusion vs scepticism as an identity. The useful version comes from actually using the tools, staying specific about what fails, and keeping your mind open as the evidence changes. This applies just as much to AI enthusiasts as to sceptics.</p><div><hr></div><h4>&#129352; <a href="https://www.moderndescartes.com/essays/ai_and_expertise/">Expertise in the Age of AI</a></h4><h5>5 min &#8226; by Brian Kihoon Lee</h5><p>Brian uses calculators as the analogy for coding agents: the tool removes a lot of mechanical work, but makes the underlying intuition even more valuable. I do not agree with every prediction in here, but the core point is sharp: skipping the struggle may leave you unable to judge the output.</p><div><hr></div><h4>&#129353; <a href="https://larahogan.me/blog/identify-new-role/">Find a New Role - Worksheet</a></h4><h5>4 min &#8226; by Lara Hogan</h5><p>Lara turns career decisions into four simple lists: must-haves, nice-to-haves, don&#8217;t-cares, and what you are optimizing for. This is practical and useful, especially when titles, prestige, and compensation make a role look more appealing than it really is.</p><div><hr></div><blockquote><p><em>Quick heads up! Joel and Melinda, coaches in residence at Refactoring, are part of a group offering <strong>full coaching scholarships</strong> to 29 engineering leaders from underrepresented groups in tech. Applications are open until the end of the day on 30th June.</em></p><p><strong><a href="https://monkeysthumb.co.uk/coaching-for-engineering-leaders/scholarships/">Learn more and apply here</a></strong></p></blockquote><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 Power of Stories ✍️ — with Rands]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 66]]></description><link>https://refactoring.fm/p/the-power-of-stories-with-michael</link><guid isPermaLink="false">https://refactoring.fm/p/the-power-of-stories-with-michael</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 26 Jun 2026 07:01:48 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/203274265/e6f9f8e34d9767647a606dda3c000518.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-56qoZulS5Rg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;56qoZulS5Rg&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/56qoZulS5Rg?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="266" height="57.36538461538461" 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;:266,&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&#8217;s guest is <strong>Michael Lopp</strong>, better known as <strong>Rands</strong>, who is writer of several popular books about engineering management, including &#8220;Managing Humans&#8221;, which is a personal favorite of mine.</p><p><a href="https://leaddev.com/leaddev-london">Live at LDX3</a>, we discussed his lifelong writing habit, the importance of giving feedback through stories and the leverage of leadership experience in the AI era.</p><div><hr></div><blockquote><p><em>Quick heads up! Joel and Melinda, coaches in residence at Refactoring, are part of a group offering <strong>full coaching scholarships</strong> to 29 engineering leaders from underrepresented groups in tech. Applications are open until the end of the day on 30th June.</em></p><p><strong><a href="https://monkeysthumb.co.uk/coaching-for-engineering-leaders/scholarships/">Learn more and apply here</a></strong></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>&#9997;&#65039; Writing as a lifelong habit</strong></p></li><li><p><strong>&#127991;&#65039; The power of naming things</strong></p></li><li><p><strong>&#128172; Stories as a feedback tool</strong></p></li><li><p><strong>&#129302; AI and the return of the coding manager</strong></p></li><li><p><strong>&#128214; Managing Humans, Managing Robots</strong></p></li></ol><p>Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/the-power-of-stories-with-michael">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Acceleration whiplash 📉]]></title><description><![CDATA[Some thoughts on the recent industry research by Faros]]></description><link>https://refactoring.fm/p/acceleration-whiplash</link><guid isPermaLink="false">https://refactoring.fm/p/acceleration-whiplash</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 24 Jun 2026 07:42:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mw6_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Hey! Luca here &#8212; welcome to a new edition of Refactoring.</span></p><p><span>To figure out what&#8217;s really happening in software engineering, I usually do three things:</span></p><ol><li><p><strong><span>I try things myself</span></strong><span> &#8212; recently by working on Tolaria.</span></p></li><li><p><strong><span>I speak with people who know better</span></strong><span> &#8212; on the podcast and in the community.</span></p></li><li><p><strong><span>I go through relevant research</span></strong><span> &#8212; to go big picture and get a grasp of the state of the industry.</span></p></li></ol><p><span>Good research is hard to find, but a few weeks ago I was sent a copy of </span><a href="https://fandf.co/3S1Vftn"><span>this report</span></a><span> by the guys at </span><a href="https://faros.ai/"><span>Faros</span></a><span> (thank you for that &#128591;), which was very interesting for two reasons:</span></p><ul><li><p><strong><span>Quantitatively</span></strong><span> &#8212; it&#8217;s one of the largest reports I have ever seen about AI coding: it surveyed 22K+ developers across 4K+ teams.</span></p></li><li><p><strong><span>Qualitatively</span></strong><span> &#8212; it&#8217;s very thorough. It doesn&#8217;t stop at measuring </span><em><span>activity</span></em><span>, but tries to understand the downstream impact of AI on all the stages of the SDLC.</span></p></li></ul><p><span>It also paints an interesting trajectory when compared with other similar works from the past months, like the State of Software Delivery, which we covered just recently, and DORA&#8217;s State of AI Assisted Development from the end of last year.</span></p><p><span>So today I will report and comment on the main findings, trying to interpret them and connect the dots with the other things I have been observing lately.</span></p><p><span>Here is the agenda, with my main takeaways:</span></p><ol><li><p><span>&#127937; </span><strong><span>Finishing work is hard</span></strong><span> &#8212; starting is now easy, and shipping is hard.</span></p></li><li><p><span>&#128269; </span><strong><span>Reviews are utterly broken</span></strong><span> &#8212; it&#8217;s now obvious that we need to do something about them.</span></p></li><li><p><span>&#128293; </span><strong><span>Poor quality is reaching prod</span></strong><span> </span><strong><span>(anyway)</span></strong><span> &#8212; production is suffering, big time.</span></p></li><li><p><span>&#129716; </span><strong><span>The way forward</span></strong><span> &#8212; some words of hope to close this on a high note!</span></p></li></ol><p><span>Let&#8217;s dive in!</span></p><div><hr></div><p><em><span>I want to thank the guys at </span><a href="https://faros.ai/"><span>Faros</span></a><span> for giving me preview access to these results and partnering on this. If you want to download the full report, you can find it below &#128071;</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://fandf.co/3S1Vftn&quot;,&quot;text&quot;:&quot;Check out the full report&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://fandf.co/3S1Vftn"><span>Check out the full report</span></a></p><div><hr></div><h2><span>&#127937; Finishing work is hard</span></h2><p><span>Before we get to the first idea, there is an important preamble to be made.</span></p><p><span>We have said many times that </span><strong><span>AI is an amplifier</span></strong><span>, and that the *average* numbers of these reports don&#8217;t say a lot because they mix up the good teams that are getting a lot out of AI, with the average/bad ones that are not getting anything, or sometimes even negative results.</span></p><p><span>Now, Faros literally opens the report by saying that </span><em><span>no</span></em><span> &#8212; </span><strong><span>this is not the case anymore</span></strong><span>:</span></p><blockquote><p><em><span>Across every downstream stage, the signal is the same: volume is up, quality is down, and the gap between the two is widening as adoption deepens. High-performing teams are experiencing the same downstream degradation as the median and average ones.</span></em></p></blockquote><p><span>Words of hope! But what does it mean that </span><strong><span>volume is up and quality is down</span></strong><span>?</span></p><p><span>If we look at software dev as a pipeline, this means three things:</span></p><ol><li><p><span>More work gets started, but</span></p></li><li><p><span>The amount of work that gets shipped is pretty much the same, and</span></p></li><li><p><span>The quality of such work is noticeably lower</span></p></li></ol><p><span>Let&#8217;s go through all of this, starting with the most important point to me: </span><strong><span>starting work is now easier, but finishing it is harder than ever</span></strong><span>.</span></p><p><span>In particular, developers do </span><em><span>more work</span></em><span> indeed, by virtue of working on more things at the same time:</span></p><ul><li><p><span>+67% PRs touched / day</span></p></li><li><p><span>+18% separate tasks</span></p></li><li><p><span>+33% tasks completed, as measured by opening a final PR about them.</span></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_!WVJu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WVJu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png 424w, https://substackcdn.com/image/fetch/$s_!WVJu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png 848w, https://substackcdn.com/image/fetch/$s_!WVJu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png 1272w, https://substackcdn.com/image/fetch/$s_!WVJu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WVJu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png" width="1456" height="642" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:642,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1280258,&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/202940735?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.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_!WVJu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png 424w, https://substackcdn.com/image/fetch/$s_!WVJu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png 848w, https://substackcdn.com/image/fetch/$s_!WVJu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png 1272w, https://substackcdn.com/image/fetch/$s_!WVJu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe71d1d26-10aa-4985-b06d-046426af6a18_3052x1346.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The problem is that such work doesn&#8217;t get to production just as fast. In fact, teams are noticeably </span><em><span>slower</span></em><span> at the last mile &#8212; shipping:</span></p><ul><li><p><span>+26% in-progress tasks stalled for 7+ days</span></p></li><li><p><span>+14% work </span><em><span>restarts</span></em><span> per developer (tasks returning in progress after moving to another stage)</span></p></li><li><p><span>-12% deployments per week</span></p></li></ul><p><span>Qualitatively this is the same trend that both the State of Software Delivery and the latest DORA report found, but </span><strong><span>quantitatively worse</span></strong><span>. In fact, the numbers about coding activity and those about deployment frequency are respectively better and worse than previous reports, pointing at even more polarization.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mw6_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mw6_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png 424w, https://substackcdn.com/image/fetch/$s_!mw6_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png 848w, https://substackcdn.com/image/fetch/$s_!mw6_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png 1272w, https://substackcdn.com/image/fetch/$s_!mw6_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mw6_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png" width="1456" height="845" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:845,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:952629,&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/202940735?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.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_!mw6_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png 424w, https://substackcdn.com/image/fetch/$s_!mw6_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png 848w, https://substackcdn.com/image/fetch/$s_!mw6_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png 1272w, https://substackcdn.com/image/fetch/$s_!mw6_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4ed021-d765-4269-ae24-2e7f529828f7_2394x1390.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>One of the most visible results of this trend is </span><strong><span>lead time</span></strong><span> skyrocketing to a +480%, fueled by an avg +80% waiting time between each of the pipeline steps.</span></p><p><span>This is not surprising if we remember that:</span></p><div class="callout-block" data-callout="true"><p><code>Lead Time = Work In Progress / Throughput</code></p></div><p><span>So if WIP grows and throughput stays the same, lead time is bound to grow. But why does the throughput stay the same? Where&#8217;s the bottleneck?</span></p><p><span>Enter the elephant in the room: </span><strong><span>code reviews</span></strong><span> &#128071;</span></p><div><hr></div><h2><span>&#128269; Reviews are completely broken</span></h2>
      <p>
          <a href="https://refactoring.fm/p/acceleration-whiplash">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Validation, async vs sync, and weekly readings!💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #213]]></description><link>https://refactoring.fm/p/validation-async-vs-sync-and-weekly</link><guid isPermaLink="false">https://refactoring.fm/p/validation-async-vs-sync-and-weekly</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 22 Jun 2026 06:59:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CR5A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a new edition of the </em><strong>&#128161;</strong><em> <strong>Monday Ideas </strong></em><strong>&#128161; </strong><em>&#8212; ideas and readings to start the week on the right foot.</em></p><div><hr></div><h3>&#127903;&#65039; <a href="https://watch.getcontrast.io/register/context-maturity?utm_source%3Drefactoring%26utm_medium%3Demail%26utm_campaign%3Dprimary&amp;sa=D&amp;source=editors&amp;ust=1781716017739422&amp;usg=AOvVaw0dAuDQj8Y_a7AL94HbNnBV">Discover 8 levels of context maturity in AI engineering</a></h3><p><em>This edition is brought to you by our friends at <a href="https://watch.getcontrast.io/register/context-maturity?utm_source%3Drefactoring%26utm_medium%3Demail%26utm_campaign%3Dprimary&amp;sa=D&amp;source=editors&amp;ust=1781716017739422&amp;usg=AOvVaw0dAuDQj8Y_a7AL94HbNnBV">Unblocked</a>!</em></p><blockquote><p>AI shows up in 60% of engineering work. But only about 20% of it can be handed off without someone babysitting the output. That&#8217;s because agents are <strong>missing context</strong>.</p><p>This 8-stage context maturity model gives a real answer on why you haven&#8217;t seen meaningful productivity gains for all the tokens burned.</p><p><strong><a href="https://watch.getcontrast.io/register/context-maturity?utm_source%3Drefactoring%26utm_medium%3Demail%26utm_campaign%3Dprimary&amp;sa=D&amp;source=editors&amp;ust=1781716017739422&amp;usg=AOvVaw0dAuDQj8Y_a7AL94HbNnBV"><span>Join live June 24 (FREE)</span></a></strong> to learn:</p><ul><li><p>Why more MCPs provides agents access but not understanding</p></li><li><p>What it takes to deploy agents you can trust without supervision</p></li><li><p>How a context layer solves for quality, efficiency and cost</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.getcontrast.io/register/context-maturity?utm_source%3Drefactoring%26utm_medium%3Demail%26utm_campaign%3Dprimary&amp;sa=D&amp;source=editors&amp;ust=1781716017739422&amp;usg=AOvVaw0dAuDQj8Y_a7AL94HbNnBV&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/context-maturity?utm_source%3Drefactoring%26utm_medium%3Demail%26utm_campaign%3Dprimary&amp;sa=D&amp;source=editors&amp;ust=1781716017739422&amp;usg=AOvVaw0dAuDQj8Y_a7AL94HbNnBV"><span>Learn more and register</span></a></p></blockquote><div><hr></div><h2>1) &#128269; Is validation really the new bottleneck?!</h2><p>So are the pundits (like myself) right? Is <em>validation</em> the new bottleneck? I think it depends, but <a href="https://refactoring.fm/p/how-i-run-the-tolaria-project">for Tolaria</a> I surely spend a lot of time on it.</p><p>Every task that gets completed by the AI is shipped in a new alpha version and moved to the &#8220;in review&#8221; section, where I review it against my production vault.</p><p>Here, a few things may happen:</p><ul><li><p><strong>It&#8217;s good </strong>&#8212; I move the task to &#8220;to release&#8221;</p></li><li><p><strong>It&#8217;s ~90% good </strong>&#8212; I do the final tweaks from my MacBook&#8217;s Codex</p></li><li><p><strong>Needs work, but it&#8217;s still good progress </strong>&#8212; this is the trickiest to decide. If it&#8217;s incomplete but still useful, I have a bias towards <em>progress </em>and I release it anyway, creating a separate task for the improvements.</p></li><li><p><strong>Wrong or not usable </strong>&#8212; this is where the task is sent &#8220;to rework&#8221;, with a QA comment about what needs to be fixed.</p></li></ul><p>I do a big batch of reviews first thing in the morning, for tasks that were done overnight, and then usually again after lunch, and before dinner, where I also try to make sure the AI has enough to do for the night.</p><p>So today validation feels like the biggest bottleneck indeed, also because I believe the right course of action most of the time is to <strong>keep specs light</strong> and let the AI figure out stuff by itself.</p><p>For most features, even when the first pass is not <em>exactly</em> how I wanted it, there is an argument to be made that if it&#8217;s <strong>good progress</strong> it should be released anyway, and have users chip in and give feedback. This has worked well many times, and evolved the product in the right direction faster than if I had waited for a perfect first version.</p><p>Of course nothing of this is exactly new thinking (MVPs, etc), but I think what&#8217;s changing here is the <em>magnitude</em>. I find that the right course of action is constantly to <strong>release a bit more control than what I am comfortable with</strong>, and this boundary keeps moving.</p><p>I wrote more about this in the full piece on how I run Tolaria as a open source project &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:196524187,&quot;url&quot;:&quot;https://refactoring.fm/p/how-i-run-the-tolaria-project&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:null,&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 I Run the Tolaria Project&quot;,&quot;truncated_body_text&quot;:&quot;Hey, Luca here! As you probably know by now, two weeks ago I launched Tolaria, a desktop app for Mac, Linux, and Windows, to manage markdown knowledge bases &#8212; for humans and AI.&quot;,&quot;date&quot;:&quot;2026-05-06T07:02:34.809Z&quot;,&quot;like_count&quot;:50,&quot;comment_count&quot;:2,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;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;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-i-run-the-tolaria-project?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 I Run the Tolaria Project</div></div><div class="embedded-post-body">Hey, Luca here! As you probably know by now, two weeks ago I launched Tolaria, a desktop app for Mac, Linux, and Windows, to manage markdown knowledge bases &#8212; for humans and AI&#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; 2 comments &#183; Luca Rossi</div></a></div><div><hr></div><h2>2) &#127757; Async vs sync comms at Todoist</h2><p>Remote work debates often get stuck in a binary: async good, meetings bad, or the reverse.</p><p>What I liked in my conversation with Gon&#231;alo Silva, CTO of Doist, is that their view is much more practical. Doist has been remote-first for more than a decade, long before the COVID era, and they have learned that async-first does not mean async-only.</p><p>Async is fantastic when people need focus, when the topic is well-bounded, and when a thoughtful written update is enough. Doist replaced a lot of status rituals with async threads: people write updates when it works best for them, and others consume them on their own schedule.</p><p>But some conversations are simply bad async candidates. Gon&#231;alo&#8217;s heuristic is to look at the number of iterations you expect:</p><blockquote><p><em><strong>&#8220;If you&#8217;re disagreeing with somebody and you feel like you&#8217;re not quickly advancing towards convergence, that is probably a great prompt to just hop into a meeting. We settled a conversation that had been going on for multiple days in a call in 14 minutes.&#8221;</strong></em></p></blockquote><p>If the topic starts from a blank canvas, involves disagreement, needs multiple rounds of back-and-forth, synchronous chats are the faster tool, and should not be seen as a failure of async culture.</p><p>You can find the full interview with Gon&#231;alo here &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e407b0b8-1abc-4cce-93c8-f0e8a2c5fcd5&quot;,&quot;caption&quot;:&quot;Listen now:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How Todoist is Built &#9989; &#8212; with Gon&#231;alo Silva&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-01-23T08:01:28.312Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/zaGmjQzmR-I&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/how-todoist-is-built-with-goncalo&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;f7bafd0a-b2c5-4e76-adc9-ba2b896e3e9c&quot;,&quot;id&quot;:185393654,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:26,&quot;comment_count&quot;:0,&quot;publication_id&quot;:64099,&quot;publication_name&quot;:&quot;Refactoring&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CR5A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b19138f-e653-496f-a117-a85305715dba_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>3) &#128218; Weekly Readings</h2><p>Finally, here are the best articles I have read this week:</p><div><hr></div><h4><span>&#129351; </span><a href="https://charity.wtf/2026/06/15/ai-demands-more-engineering-discipline-not-less-xpost/">AI Demands More Engineering Discipline. Not Less</a></h4><h5>12 min &#8226; by Charity Majors</h5><p><span>When Charity writes, we listen. The real product of a software team is shared understanding, and AI-generated code makes that easier to destroy at scale. For this reason, discipline now matters </span><em>more</em><span>, not less.</span></p><div><hr></div><h4><span>&#129352; </span><a href="https://lethain.com/revised-rules-of-engineering-leadership/">Revised Rules of Engineering Leadership</a></h4><h5>8 min &#8226; by Will Larson</h5><p>Will&#8217;s piece is a great attempt at updating classic engineering leadership rules and ideas for the agent era. A lot of great takes about migrations, domain expertise, harnesses, and more. Including practical examples!</p><div><hr></div><h4><span>&#129353; </span><a href="https://martinfowler.com/articles/exploring-gen-ai/humans-and-agents.html">Humans and Agents in Software Engineering Loops</a></h4><h5>7 min &#8226; by Kief Morris</h5><p>This connects nicely with the loop-engineering conversation: humans should not micromanage every generated line of code, but design and improve the loop that lets agents build, test, and learn. Great article hosted on Martin Fowler&#8217;s blog.</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 make AI better at product 🎨]]></title><description><![CDATA[Exploring ideas based on experiments and research.]]></description><link>https://refactoring.fm/p/how-to-make-ai-better-at-product</link><guid isPermaLink="false">https://refactoring.fm/p/how-to-make-ai-better-at-product</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 17 Jun 2026 07:43:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RY7P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hey, <a href="https://refactoring.fm/about">Luca</a> here! Welcome to a &#10024; <strong>monthly free essay &#10024;</strong> from Refactoring!</em></p><p><em>Every week I write an article about how to ship fast and make good software, and interview a world-class tech leader. I also build and maintain <a href="https://tolaria.md/">Tolaria</a> in the open, publishing my workflows and learnings here.</em></p><div><hr></div><p>Last week, Claude Code&#8217;s Boris Cherny got trending on X for saying this at the annual Anthropic conference:</p><blockquote><p><em>I don&#8217;t prompt Claude anymore. I have loops running that prompt Claude and figuring out what to do. <strong>My job is to write loops</strong>. And this is transition we&#8217;re going to see for the rest of the year</em></p></blockquote><p>So, &#8220;my job is to write loops.&#8221;</p><p>Peter Steinberger (creator of OpenClaw) and several others picked up on it and agreed &#128071;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7v80!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7v80!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png 424w, https://substackcdn.com/image/fetch/$s_!7v80!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png 848w, https://substackcdn.com/image/fetch/$s_!7v80!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png 1272w, https://substackcdn.com/image/fetch/$s_!7v80!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7v80!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png" width="1274" height="506" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e418c386-0fbd-4582-8e0b-555506855923_1274x506.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:506,&quot;width&quot;:1274,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:137937,&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/202099950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.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_!7v80!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png 424w, https://substackcdn.com/image/fetch/$s_!7v80!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png 848w, https://substackcdn.com/image/fetch/$s_!7v80!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png 1272w, https://substackcdn.com/image/fetch/$s_!7v80!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c386-0fbd-4582-8e0b-555506855923_1274x506.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But before you roll your eyes and think here it goes another <em>fad</em>, new buzzwords, <em>loop engineering</em>, and so on, I&#8217;ll go out and say that I like this direction.</p><p><em>Loop engineering</em> looks strictly better than <em>prompt engineering</em> because it forces you into <strong>systems thinking</strong>, as opposed to just focusing on what&#8217;s needed to deliver the current task. A loop is supposed to run indefinitely, so the focus shifts to reliability, sustainability, and how to make sure things stay good &#8212; vs <em>diverge</em> and go to shit.</p><p>But how do you ensure that?</p><p>I wrote about this several times lately, including <a href="https://refactoring.fm/p/my-ai-coding-workflow-b09">last week</a>, where I covered how I steer AI work with the 3Gs: <em>guides</em>, <em>gates</em>, and <em>guards</em>. These are not super new concepts: they build on what other smart people are doing, and they are my attempt to contribute to this global conversation.</p><p>But a problem I find in this conversation (which I am guilty of) is that it largely <strong>focuses on the tech side</strong> of things, while treating other disciplines as second-class citizens.</p><p>Namely, <strong>product</strong>.</p><p>When you hear people saying that software dev is now a factory, and the bottleneck is your product taste, review, validation, etc, what they are implying is that they have no idea about how to scale those things. In the AI race, product is behind engineering &#8212; big time!</p><p>The last time we discussed this on Refactoring has been when we published <a href="https://refactoring.fm/p/the-state-of-product-development">The State of Product Development</a>, where we saw that only 9% of teams used AI to help product with specs (yay), vs 90%+ for coding. Since then I released Tolaria, started doing a lot of product dev myself, and tried a lot of different solutions and workflows to scale myself properly, both in tech and product.</p><p>So today I want to focus on product, taking pages from what works for <em>coding</em>, and exploring how we can make the same progress there.</p><p>To discuss this, I am also bringing in again <a href="https://www.linkedin.com/in/doug-peete-95230b">Doug Peete</a> from <a href="https://na2.hubs.ly/H068xQb0">Atono</a>, who has a privileged vantage point by working with thousands of product teams, and is <a href="https://na2.hubs.ly/H068xQs0">working actively</a> to fix this. We also talked a lot about AI &amp; product in our <a href="https://refactoring.fm/p/the-state-of-product-development-22a">recent podcast interview</a>.</p><p>So here is the agenda:</p><ul><li><p><strong>&#9876;&#65039; Product is harder than coding</strong> &#8212; an uncomfortable take we need to come to terms with.</p></li><li><p><strong>&#128203; Towards Product ADRs</strong> &#8212; building on a successful tech practice.</p></li><li><p><strong>&#128214; Glossary </strong>&#8212; a possible missing abstraction in how we develop product.</p></li><li><p><strong>&#128260; Product process</strong> &#8212; how to put everything together and work better with AI.</p></li></ul><p>Let&#8217;s dive in!</p><div><hr></div><p><em>Disclaimer: I am a fan of what <a href="https://na2.hubs.ly/H068xQb0">Atono</a> is building and I am grateful to have it as a partner on this piece. You should check it out!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://na2.hubs.ly/H068xQb0&quot;,&quot;text&quot;:&quot;Learn more about Atono&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://na2.hubs.ly/H068xQb0"><span>Learn more about Atono</span></a></p><p><em>However, I will only write my unbiased opinion about the practices and tools covered, Atono included.</em></p><div><hr></div><h2><strong>&#9876;&#65039; </strong>Why product is harder than coding</h2><p>Product is harder than coding, at least conceptually. I know this take will get many engineers angry, but think about it. For a product choice to be good, there is a lot to be taken into account:</p><ul><li><p><strong>&#128301; Strategy</strong><em> &#8212; </em>do customers want this? Do the <em>right</em> customers want this? How is this discoverable? Is this making things unnecessarily complex? How does it fit our business strategy?</p></li><li><p><strong>&#128300; Tactics</strong><em> </em>&#8212; where do we put this? what&#8217;s the right UX? does it need a shortcut? should this live in the right-click menu? ...</p></li></ul><p>A lot of these choices depend on aspects that we are not good at <em>codifying</em> into hard rules. It&#8217;s what we call <em>judgment</em> and <em>taste</em>.</p><p>Software engineering, on the other hand, is <em>structurally</em> easier, for two reasons:</p><ul><li><p>It&#8217;s <em>downstream</em> of product direction, so it has a narrower design space.</p></li><li><p>Its <em>deterministic</em> nature allows it to be tested for correctness and non-functional qualities (performance, cohesion/coupling, complexity) in a more reliable way than product.</p></li></ul><p>As a result, <em><strong>gates</strong></em><strong> for coding agents</strong> are effective at enforcing good code, even when they have relatively little context about product. Static analysis, TDD, code health tooling, are all devices that help AI agents write <em>good enough </em>code&#8212;granted, not the code that the most talented engineer on earth would write&#8212;but still passable for many situations.</p><p>So how do we make product a bit more like coding? To answer this question, I will take a page from the <em>least deterministic </em>part of my coding harness: ADRs.</p><div><hr></div><h2>&#127959;&#65039;<strong> </strong>ADRs</h2><p>As I have written many times, I instruct the AI to create <a href="https://adr.github.io/">ADRs</a> to store <strong>meaningful tech decisions</strong>. Each ADR has to include why that decision was made, what options were considered (and eventually discarded), and take care of <em>superseding</em> old ADRs about the same thing.</p><p>ADRs have been, so far, surprisingly successful. As I am writing this, Tolaria has 137 ADRs, and I see the AI using them all the time. It refers to them in specs, makes decisions that stay true to what exists, and reliably supersedes what&#8217;s not relevant anymore.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dJyV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dJyV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png 424w, https://substackcdn.com/image/fetch/$s_!dJyV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png 848w, https://substackcdn.com/image/fetch/$s_!dJyV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png 1272w, https://substackcdn.com/image/fetch/$s_!dJyV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dJyV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png" width="1456" height="1057" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1057,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:161176,&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/202099950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.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_!dJyV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png 424w, https://substackcdn.com/image/fetch/$s_!dJyV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png 848w, https://substackcdn.com/image/fetch/$s_!dJyV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png 1272w, https://substackcdn.com/image/fetch/$s_!dJyV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea12949-334e-41d7-88a8-ec1b05eb5860_1898x1378.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So, as of today, for most features I am comfortable not giving a lot of (tech) design input, because I know AI will pick it up from past decisions. I still review new ADRs, but they are 95% good &#8212; I do it more for my personal curiosity than because it&#8217;s a good use of my time.</p><p>The ADR workflow is, interestingly, <strong>completely non-deterministic</strong>. It&#8217;s a way to <em>inject</em> good judgment into the AI not by creating rules, but by repeatedly showing how we have done things in the past.</p><p>This is why I am hopeful about doing something similar to product &#128071;</p><div><hr></div><h2><strong>&#128203; </strong>Towards Product ADRs</h2><p>If ADRs are for tech work, what&#8217;s the equivalent for product? Mimicking ADRs, a <em>Product Decision Record</em> might record:</p><ul><li><p><strong>&#128065;&#65039; Intent</strong> &#8212; what the user needs to accomplish.</p></li><li><p><strong>&#127912; Design</strong> &#8212; how we decided to do it.</p></li><li><p><strong>&#9878;&#65039; Tradeoffs</strong> &#8212; alternatives that have been discarded and why.</p></li></ul><p>If we roughly agree on this, the next question would be: what does actually deserve a PDR? To me, it&#8217;s any <strong>product decision we want to remember</strong> in case we meet a similar problem in the future. Anything genuinely <em>new</em> that we changed/added to the product, as opposed to reusing a proven pattern that we already understand well.</p><p>E.g. In Tolaria, I wouldn&#8217;t want to write a PDR to remember that we added &#8220;copy file link&#8221; as a right-click action to the current note &#8212; because there isn&#8217;t any novelty or interesting decision being made there.</p><p>Do PDRs map squarely to well-known product artifacts, like PRDs, Epics, or Stories? I don&#8217;t know about that either. Those other devices primarily exist to communicate <em>what</em> needs to be done. It&#8217;s great when they include more about the <em>why, </em>but it&#8217;s not clear to me whether e.g. a full PRD or user story should be stored as-is and work well as a PDR. Maybe!</p><p>The other reason why I tend to believe PDRs deserve a life on their own is that relevant <em>decisions</em> are largely <strong>independent of the size of the work</strong>. There might be a large Epic (e.g. integrating a new AI agent assistant into Tolaria) that doesn&#8217;t bring meaningful new product direction, and a small story that instead introduces new a interesting pattern.</p><p>Doug is experimenting with PDRs at Atono, calling them <a href="https://docs.atono.io/changelog#design-decisions-in-ai-context">design decisions</a> and attaching them directly to the stories they relate to &#8212; not as a separate doc for now. This doesn&#8217;t resolve the question of where a PDR lives when the decision is bigger than any single story, but looks good on the smaller end of the spectrum: when the decision is scoped to one piece of work, attaching it directly might hold up well in practice.</p><p>So, in general, even if there is a lot that we don&#8217;t know about their <em>shape</em>, we can agree that it&#8217;s valuable to record product decisions, in a similar way to what we do with architecture ones. And if we do, we should also agree that this is not enough &#128071;</p><div><hr></div><h2>&#128214; Product Glossary</h2><p>Other than ADRs, I maintain other tech docs in the Tolaria repo, which are called ARCHITECTURE.md and ABSTRACTIONS.md. Without getting into too much detail, these are <em><strong>recap</strong></em><strong> docs</strong>, that summarize the current state of our tech.</p><p>These are necessary, like views in a database, to avoid the AI to navigate eventually hundreds of ADRs (between those active and superseded) every time, just to <strong>reconstruct what exists</strong>. The recap docs give the AI the 10,000ft view, while individual ADRs are used to zoom into specific aspects.</p><p>What should this look like for product? Doug believes the right concept here is that of a <a href="https://na2.hubs.ly/H068xQs0">Glossary</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_!RY7P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RY7P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png 424w, https://substackcdn.com/image/fetch/$s_!RY7P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png 848w, https://substackcdn.com/image/fetch/$s_!RY7P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png 1272w, https://substackcdn.com/image/fetch/$s_!RY7P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RY7P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png" width="1456" height="1051" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1051,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247464,&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/202099950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.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_!RY7P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png 424w, https://substackcdn.com/image/fetch/$s_!RY7P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png 848w, https://substackcdn.com/image/fetch/$s_!RY7P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png 1272w, https://substackcdn.com/image/fetch/$s_!RY7P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The Glossary should list your main product abstractions: why they exist, what they are for, and how they are used. It maps your <em>domain language</em>, which in turn is shaped by your product surface.</p><p>An example from Tolaria may include concepts like:</p><ul><li><p><strong>The Sidebar</strong> &#8212; which gives users ways to <em>filter</em> notes in their workspace</p></li><li><p><strong>The Note List</strong> &#8212; to make users navigate the current selection of notes</p></li><li><p><strong>The Breadcrumb Bar</strong> &#8212; to display the most important actions a user can do over the current note.</p></li></ul><p>But also concepts that don&#8217;t map 1:1 to single interface elements, like the <strong>Git integration</strong>, or the <strong>Note organization workflow</strong> (capture / organize / archive).</p><p>It&#8217;s obvious these are not PDR candidates: they are long-lived abstractions that morph over time, and need a description that evolves with them. So, if anything, they are <em>derived</em> from a sum of product decisions.</p><p>Doug believes a shared glossary is the cornerstone that enables good <strong>AI-assisted stories and PRDs </strong>&#8212; because now the AI can ground them in your vocabulary, your past choices, and what exists. And he has data to back this up.</p><p>By talking with some of the teams we surveyed, which report <a href="https://refactoring.fm/i/190368764/ai-in-the-workflow">abysmal low AI adoption</a> for product specs (9%), it turns out a major cause is the amount of <em>rework</em> needed by generic AI specs. Making them good is just too much work, so most PMs keep writing specs manually. Doug and Atono have been testing glossary-backed AI stories internally and with customers, and they are seeing rework dropping from 60% to 20%.</p><p>(worth noting that 60% rework, as a baseline, is a ton. What if coding agents got things wrong 6 times out of 10? We would probably give up on them, which is what many PMs do with AI right now)</p><p>So the overall goal is to build foundational product knowledge: a map of what things mean in this specific product, which is not the same thing as a list of features.</p><p>So let&#8217;s say we have all of this in place, what does a new product process look like?</p><div><hr></div><h2>&#128260; Product process</h2><p>Any product work starts with <strong>capturing some </strong><em><strong>intent</strong></em> &#8212; what the user needs to accomplish, how it maps to the product strategy, how we know this is successful, and so on.</p><p>This is 100% human (for now!) and is more about the <em>why</em> than the <em>what</em>.</p><p>Our input on the <em>what</em> can progressively shrink the more we help the AI figure out good (draft?) specs that respect the current product surface (glossary + PDRs).</p><p>Then, based on the feature, the maturity level of your process, and how greedy vs safe you want it to be, you may either:</p><ul><li><p>Have the AI do a first pass, so that your judgement is informed by an actual prototype, or</p></li><li><p>Stop and tweak the draft spec before the AI goes forward.</p></li></ul><p>Then you review and iterate on implementation as long as needed, and finally <em>ship, </em>possibly including new PDRs and Glossary updates.</p><p>Over the next weeks I will try to incorporate some of this into the Tolaria workflow, possibly <em>retrofitting </em>some PDRs and glossary concepts from the past. Will let you know how it works!</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[AI plumbing, open source, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #212]]></description><link>https://refactoring.fm/p/ai-plumbing-open-source-and-weekly</link><guid isPermaLink="false">https://refactoring.fm/p/ai-plumbing-open-source-and-weekly</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Tue, 16 Jun 2026 07:35:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KMjC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.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><div><hr></div><blockquote><h2>&#128202; <a href="https://getdx.com/webinar/research-briefing-with-brian-houck-measuring-ai-agents-revisiting-the-core4/?utm_source=refactoring">Engineering leaders don&#8217;t have a way to measure AI results</a></h2><p><em>This newsletter is brought to you by our friends at <a href="https://getdx.com/webinar/research-briefing-with-brian-houck-measuring-ai-agents-revisiting-the-core4/?utm_source=refactoring">DX</a>!</em></p><p>DX has spent the last year studying what this measurement gap means in practice.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KMjC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KMjC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png 424w, https://substackcdn.com/image/fetch/$s_!KMjC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png 848w, https://substackcdn.com/image/fetch/$s_!KMjC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png 1272w, https://substackcdn.com/image/fetch/$s_!KMjC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KMjC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png" width="642" height="335.5508241758242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:642,&quot;bytes&quot;:2292380,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://refactoring.fm/i/201566545?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.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_!KMjC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png 424w, https://substackcdn.com/image/fetch/$s_!KMjC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png 848w, https://substackcdn.com/image/fetch/$s_!KMjC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png 1272w, https://substackcdn.com/image/fetch/$s_!KMjC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9c51b5-d7f5-496d-8ee2-58335cd7dd9f_4800x2508.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>On June 18th at 09:30 PT, Distinguished Scientist <strong>Brian Houck</strong> and Deputy CTO <strong>Justin Reock</strong> are presenting their research on agent experience, AI readiness, and what the data says about productivity in an agentic world.</p><p>You can register for free below &#128071; </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://getdx.com/webinar/research-briefing-with-brian-houck-measuring-ai-agents-revisiting-the-core4/?utm_source=refactoring&quot;,&quot;text&quot;:&quot;Register here for free!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://getdx.com/webinar/research-briefing-with-brian-houck-measuring-ai-agents-revisiting-the-core4/?utm_source=refactoring"><span>Register here for free!</span></a></p></blockquote><div><hr></div><h2>1) &#129521; Keep deterministic plumbing outside AI</h2><p>A lot of AI workflow demos make it look like the agent should own the whole process: understand the goal, decide the steps, call tools, and maybe even schedule the next run.</p><p>This is quick (and exciting!) when you are prototyping, but it is arguably a bad default for recurring work.</p><p>The boring parts of a workflow&#8212;routing, retries, scheduling, validation, etc.&#8212;need to be dependable, rather than &#8220;smart&#8221;. For things that I run regularly (e.g. all Tolaria procedures) I want to know which steps failed, what inputs they saw, whether they retried, and what state was left behind.</p><p>So the architecture I like more and more is hybrid:</p><ul><li><p><strong>Orchestration owns the skeleton</strong> &#8212; when the workflow runs, what each step consumes and produces, how failures recover, and what humans can inspect.</p></li><li><p><strong>AI owns the messy parts</strong> &#8212; classification, summarization, judgment calls, and human-readable updates.</p></li></ul><p>This does not make AI less important. If anything, it makes it more useful, because it stops wasting tokens and attention on plumbing that traditional software is a better fit for.</p><p>So, agents are a fantastic way to discover/prototype a workflow. But once the shape is known, the right move is to extract the stable pieces into code and keep AI where ambiguity actually exists.</p><p>I wrote more about this in the full piece on orchestrating AI workflows &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:197106828,&quot;url&quot;:&quot;https://refactoring.fm/p/how-to-orchestrate-ai-workflows&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:null,&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 Orchestrate AI Workflows&quot;,&quot;truncated_body_text&quot;:&quot;Hey, Luca here! Welcome to a weekly essay from Refactoring.&quot;,&quot;date&quot;:&quot;2026-05-13T07:15:51.793Z&quot;,&quot;like_count&quot;:55,&quot;comment_count&quot;:1,&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;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-orchestrate-ai-workflows?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 Orchestrate AI Workflows</div></div><div class="embedded-post-body">Hey, Luca here! Welcome to a weekly essay from Refactoring&#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; 55 likes &#183; 1 comment &#183; Luca Rossi</div></a></div><div><hr></div><h2>2) &#127760; Open source in the age of AI</h2><p>Last week <a href="https://ladybird.org/posts/changing-how-we-develop-ladybird/">Ladybird announced</a> they are stopping accepting public PRs &#8212; the latest of a series of projects doing the same.</p><p>This made me think of my chat with Chris Lattner, where we discussed the impact of AI on open source.</p><p>Chris has spent a huge part of his career building massively successful open source projects &#8212; LLVM, Swift, MLIR, Mojo &#8212; and is concerned about the current state of things. As it&#8217;s now obvious, AI makes it much cheaper to produce contributions, but it does not make reviewing them equally cheaper.</p><blockquote><p><em><strong>&#8220;With AI tools, what&#8217;s happening is that a lot of maintainers are getting overrun. The contributor doesn&#8217;t have to do nearly as much work, but the reviewer has to do the same &#8212; at a bigger scale. I think it&#8217;s going to lead to new contributors not getting the attention they deserve.&#8221;</strong></em></p></blockquote><p>This is important because, in open source, <em>patches</em> have always been about mentoring and trust-building. Maintainers invest time in people, people learn the project, and some of them eventually become future stewards.</p><p>Chris also connects this to intellectual property. If agents can rewrite proprietary tools, translate GPL code into MIT-looking projects, then copyright and licensing become much harder to reason about. As it&#8217;s often the case, legal systems lag behind reality.</p><p>But the optimistic version is that this also pushes companies toward openness. If secrecy and proprietary headers become weaker moats, the better strategy is to build strong communities, move fast, and compete on innovation rather than control.</p><p>We should decide whether to see the glass half empty or half full!</p><p>You can find the full interview with Chris here &#128071;</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><div><hr></div><h2>3) &#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://brethorsting.com/blog/2026/05/domain-expertise-has-always-been-the-real-moat/">Domain Expertise Has Always Been the Real Moat</a></h4><h5>3 min &#8226; by Aaron Brethorst</h5><p>Short, sharp, and very true: AI makes writing software cheaper, but it does not make knowing what &#8220;correct&#8221; means any cheaper. The best engineers were always the ones building a model of the domain in their head, as opposed to simply translating tickets into code. That part is still a moat!</p><div><hr></div><h4>&#129352; <a href="https://obie.medium.com/what-happens-when-the-coding-becomes-the-least-interesting-part-of-the-work-ab10c213c660">What Happens When the Coding Becomes the Least Interesting Part of the Work</a></h4><h5>8 min &#8226; by Obie Fernandez</h5><p>I liked this because it frames AI coding less as &#8220;the machine writes code&#8221; and more as &#8220;the machine forces you to make senior thinking explicit.&#8221; If you care mostly about typing code, agents are annoying. If you care about judgment, tradeoffs, and intent, they free up the interesting part.</p><div><hr></div><h4>&#129353; <a href="https://ladybird.org/posts/changing-how-we-develop-ladybird/">Changing How We Develop Ladybird</a></h4><h5>3 min &#8226; by Andreas Kling</h5><p>Ladybird is stopping public pull requests and moving to maintainer-only code changes. The rationale is that, in the AI era, patch size is no longer a good proxy for effort or good faith. Open source maintainers are going to rethink trust, review, and responsibility a lot more than we admit. Thinking about this myself with <a href="http://tolaria.md/">Tolaria</a>.</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[Understanding Engineers' Needs 🧬 — with Lara Hogan]]></title><description><![CDATA[Watch now | Refactoring Podcast &#8226; Episode 65]]></description><link>https://refactoring.fm/p/understanding-engineers-needs-with</link><guid isPermaLink="false">https://refactoring.fm/p/understanding-engineers-needs-with</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Fri, 12 Jun 2026 06:58:53 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/200483968/186b2d2731506a9b7b50aaa1cae4c5b3.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div id="youtube2-nYFQ6kyXO2o" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;nYFQ6kyXO2o&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/nYFQ6kyXO2o?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="266" height="57.36538461538461" 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;:266,&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/larachogan/">Lara Hogan</a></strong>, an author, public speaker and coach for managers and leaders across the whole tech industry. And she's had a long career as VP of Engineering at FLY, Kickstarter, Director at Etsy, and more. <br><br>With Lara we talked about her journey in tech, which started with a philosophy degree. Then, taking from her work as a coach, we talked more about how successful teams are adopting AI and what you can do to make engineers feel safe about it. And finally, we explored the BICEPS framework and how you can better understand people's needs at work.</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>&#127891; From philosophy to engineering leadership</strong></p></li><li><p><strong>&#129302; How the best teams are adopting AI</strong></p></li><li><p><strong>&#128161; The AHA meetings: learning together</strong></p></li><li><p><strong>&#129504; The BICEPS framework and feeling safe at work</strong></p></li><li><p><strong>&#129521; Practical steps for managers and engineers</strong></p></li></ol><p>&#10240;Let&#8217;s dive in &#128071;</p><div><hr></div>
      <p>
          <a href="https://refactoring.fm/p/understanding-engineers-needs-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Mapping devex, planning careers, and weekly readings! 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #211]]></description><link>https://refactoring.fm/p/mapping-devex-planning-careers-and</link><guid isPermaLink="false">https://refactoring.fm/p/mapping-devex-planning-careers-and</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 08 Jun 2026 07:01:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mxHK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.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><div><hr></div><h3><a href="https://www.trmlabs.com/careers?utm_source=refactoring">TRM</a> is AI intelligence for public safety &#8212; and it&#8217;s <a href="https://www.trmlabs.com/careers?utm_campaign=FY26-Talent-1M_refactoring_Other&amp;utm_me[%E2%80%A6]Y26-Talent-1M&amp;utm_activity=refactoring&amp;utm_activitytype=Other">hiring</a>! &#128227;</h3><p><em>This newsletter is brought to you by our friends at <a href="https://www.trmlabs.com/careers?utm_source=refactoring">TRM</a>!</em></p><p>TRM models turn petabytes of data into actionable intelligence across the threat landscape: ransomware groups, human trafficking networks, darknet markets, terrorist financing, and more!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mxHK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mxHK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png 424w, https://substackcdn.com/image/fetch/$s_!mxHK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png 848w, https://substackcdn.com/image/fetch/$s_!mxHK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png 1272w, https://substackcdn.com/image/fetch/$s_!mxHK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mxHK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png" width="1456" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56996,&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/200618039?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.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_!mxHK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png 424w, https://substackcdn.com/image/fetch/$s_!mxHK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png 848w, https://substackcdn.com/image/fetch/$s_!mxHK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png 1272w, https://substackcdn.com/image/fetch/$s_!mxHK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff390852c-ca89-4045-8be5-1acea20cb9d4_2060x686.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Threats don't wait. And neither does the TRM team.</p><p>Engineers at TRM work at a scale most never touch: real-time graph traversal, petabyte-scale pipelines, and models that power investigations with real-world impact. If you want your code to catch criminals, this is where you build it &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.trmlabs.com/careers?utm_campaign=FY26-Talent-1M_refactoring_Other&amp;utm_me[&#8230;]Y26-Talent-1M&amp;utm_activity=refactoring&amp;utm_activitytype=Other&quot;,&quot;text&quot;:&quot;Check open roles&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.trmlabs.com/careers?utm_campaign=FY26-Talent-1M_refactoring_Other&amp;utm_me[&#8230;]Y26-Talent-1M&amp;utm_activity=refactoring&amp;utm_activitytype=Other"><span>Check open roles</span></a></p><div><hr></div><h2>&#129518; Map and score devex problems</h2><p>Most teams have structured ways to work on <em>customer</em> problems &#8212; which we call &#8220;product&#8221; &#8212; but do not apply the same rigor to developer experience issues.</p><p>Earlier this year I advocated to do a <a href="https://refactoring.fm/p/the-listening-tour">listening tour</a> with your engineers to uncover devex problems. An important part of the tour is not to stop at the <em>uncovering</em> stage: you should map, score, and prioritize issues so you work on the right things.</p><p>Mapping means taking <em>stories &#8212;</em> situations where bad things happened &#8212; group them together into friction points, and map them to steps of your dev process.</p><p>You can reuse the <em>story map format</em> for displaying this, but you don&#8217;t have to necessarily do it that way. You can use a spreadsheet or anything else.</p><p>The outcome might be something that looks like a three-level investigation that includes <strong>steps</strong>, <strong>problems</strong>, and <strong>stories &#128071;</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_!kWYC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kWYC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png 424w, https://substackcdn.com/image/fetch/$s_!kWYC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png 848w, https://substackcdn.com/image/fetch/$s_!kWYC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png 1272w, https://substackcdn.com/image/fetch/$s_!kWYC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kWYC!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png" width="1200" height="388.1868131868132" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:471,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:802082,&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/200618039?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.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_!kWYC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png 424w, https://substackcdn.com/image/fetch/$s_!kWYC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png 848w, https://substackcdn.com/image/fetch/$s_!kWYC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png 1272w, https://substackcdn.com/image/fetch/$s_!kWYC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8728f2c8-2abc-41af-8b56-642630f31893_3086x998.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After you collect problems, it&#8217;s time to score them. To do that, the most useful <em>coordinates</em> I have found are <em>reach</em> and <em>impact</em>:</p><ul><li><p><strong>Reach</strong> &#8212; how many engineers are impacted by this</p></li><li><p><strong>Impact</strong> &#8212; how much disruption it causes</p></li></ul><p>If this makes you think of <em>RICE,</em> we are not including:</p><ul><li><p><em>Confidence</em> &#8212; because it&#8217;s often tricky to figure out and I haven&#8217;t found it <em>that</em> useful in real life, nor</p></li><li><p><em>Effort</em> &#8212; because we are only talking about problems here, not solutions.</p></li></ul><p>Also, I am a fan of using simple scores, like low-medium-high, or 1-5.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bd_9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bd_9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png 424w, https://substackcdn.com/image/fetch/$s_!Bd_9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png 848w, https://substackcdn.com/image/fetch/$s_!Bd_9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!Bd_9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bd_9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png" width="1456" height="843" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:843,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:897841,&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/200618039?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.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_!Bd_9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png 424w, https://substackcdn.com/image/fetch/$s_!Bd_9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png 848w, https://substackcdn.com/image/fetch/$s_!Bd_9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!Bd_9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c78e636-bd76-4381-8130-6bc43851d8ac_1968x1140.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After that, you should focus on the <strong>one true bottleneck&#8482;</strong> &#8212; I wrote more about that in the full article &#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;embedding_publication_id&quot;:null,&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;:36,&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">6 months ago &#183; 36 likes &#183; 3 comments &#183; Luca Rossi</div></a></div><div><hr></div><h2>&#129692; Career direction starts with what you want</h2><p>Career planning starts getting useful when you stop asking only what the ladder says and start asking what you actually want.</p><p>Many engineers sleepwalk through their careers by following the next obvious step: promotion, bigger scope, manager track, staff track, better company, higher comp. Those may be good goals, but they are not a substitute for knowing what kind of work makes you thrive.</p><p>Last month I interviewed Jean and Cate, two professional career coaches, and they told me they are a fan of asking two simple questions:</p><ul><li><p><strong>What was a peak moment in your career?</strong></p></li><li><p><strong>What does it look like for you to thrive?</strong></p></li></ul><p>They asked them to me and I had to think for a minute or so. These questions are designed to pull attention away from abstract &#8220;<em>prestige</em>&#8220; and toward real-world evidence. When did work feel energizing? What kind of contribution mattered? What environment made you stronger?</p><p>Also, the answer does not need to become a ten-year plan. In uncertain times, an horizon of a few months may be more useful: try something, observe how it feels, adjust, repeat.</p><p>Career direction is built every day from good reflection and experiments.</p><p>You can find the full interview with Jean and Cate below &#128071;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;296ceb2b-9903-4a55-910b-f5286475c5d5&quot;,&quot;caption&quot;:&quot;Today&#8217;s sponsor is Intent by Augment.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Own Your Career &#129437; &#8212; with Jean Hsu and Cate Huston&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-05-01T08:37:21.922Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/tb5wdmTJeuk&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/how-to-own-your-career-with-jean&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;53d8586b-f6d8-474a-9f3a-292a3bf0f3f2&quot;,&quot;id&quot;:195650521,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:21,&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><p>Also on <a href="https://open.spotify.com/show/7Luds9dmzZDoDC8Q7EMbSw">Spotify</a> and <a href="https://www.youtube.com/watch?v=tb5wdmTJeuk">Youtube</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://davidoks.blog/p/why-japanese-companies-do-so-many?hide_intro_popup=true">Why Japanese Companies Do So Many Different Things</a></h4><h5>20 min &#8226; by David Oks</h5><p>This is such an awesome article that goes deep into explaining how (and why) Japanese companies are wildly different from US (and Western in general) ones. So much food for thought from looking at things like lifetime employment, horizontal coordination, diversification, and more. A must read.</p><div><hr></div><h4>&#129352; <a href="https://randsinrepose.com/archives/the-slide/">The Slide</a></h4><h5>5 min &#8226; by Rands</h5><p>Putting this appropriately here after I interviewed Rands at LDX3 just last week, and asked him about <em>stories</em> and this article in particular. When someone keeps ignoring your feedback, don&#8217;t lecture harder &#8212; <em>slide</em> up next to them with a personal story about the time you struggled with the same thing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zaoZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zaoZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zaoZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zaoZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zaoZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zaoZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg" width="1456" height="886" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:886,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2830253,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://hybridhacker.email/i/200590109?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg&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_!zaoZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zaoZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zaoZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zaoZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44769fc0-a2be-4157-9b09-afbe3a1a5ed1_2531x1540.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h4>&#129353; <a href="https://cate.blog/2026/06/02/making-a-new-plan/">Making a New Plan</a></h4><h5>2 min &#8226; by Cate Huston</h5><p>An ever-underrated leadership skill is admitting you&#8217;re wrong and making a new plan when new information is available. Also, it&#8217;s easy to judge others for not doing that, until you realize we all do it from time to time. Short and sharp, as always in Cate&#8217;s style.</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[My AI Coding Workflow]]></title><description><![CDATA[Monthly update &#8212; as of June 2026!]]></description><link>https://refactoring.fm/p/my-ai-coding-workflow-b09</link><guid isPermaLink="false">https://refactoring.fm/p/my-ai-coding-workflow-b09</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Wed, 03 Jun 2026 07:02:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ba3740b9-b1f0-462d-8744-8cd1d81d6a81_1714x1138.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>Hey! When I launched <a href="http://tolaria.md/">Tolaria</a> I promised I would publish ~monthly updates to my AI coding workflow. The last one was in April, so I am late!</p><p>In May I also published <a href="https://refactoring.fm/p/how-i-run-the-tolaria-project">how I run Tolaria</a> as a project, but this was more about general <em>orchestration</em>, so I wanted to post an update that is more <strong>specific to coding</strong>.</p><p>I will start by saying that things are going... well.</p><p>Tolaria by now has a few thousands daily users, most whom are engineers. These are quite eager to report bugs, submit PRs, and suggest improvements on social media, Github discussions, email, and more &#8212; so keeping up with everything is quite a lot of work.</p><p>Still, I am happy with where we stand. As I write these, we got:</p><ul><li><p><strong>6 open issues</strong> &#8212; vs 417 closed.</p></li><li><p><strong>14 open PRs</strong> &#8212; vs 306 closed.</p></li><li><p><strong>1 day</strong> &#8212; average bug fix time.</p></li><li><p><strong>99.1% crash-free rate</strong> &#8212; as measured by Sentry.</p></li><li><p><strong>~28 commits / day</strong> &#8212; on average.</p></li><li><p><strong>2 hours a day</strong> &#8212; I work on Tolaria, give or take.</p></li></ul><p>I released Tolaria on April 22nd, so all of this happened in little more than a month, which is crazy when you think about it. From the day of the release, I added about ~1000 commits, and the codebase has grown a bit, but not massively: right now it&#8217;s 150K LOC, plus ~100K LOC of tests.</p><p>Most importantly, I don&#8217;t feel my velocity has decreased.</p><p>If anything, I am probably producing <em>more</em> output per unit of input than two months ago, so the <em>effectiveness</em> feels higher. Code quality also is higher, we are not drowning in regressions, and the rate at which bugs are reported feels stable.</p><p>So today I will cover the tweaks I made to my AI coding over the last ~2 months. To catch up with the full process, you can also go back to the previous articles here:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f62f1d1d-e7dc-4568-95ed-bf5c8080350a&quot;,&quot;caption&quot;:&quot;I admit I was one of those who didn&#8217;t believe Dario Amodei when he said last year that AI would soon write 90% of the code. Instead here we are. There are indeed teams I personally know who are having close to all of their code written by AI, and are having the time of their lives.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;My AI Coding Workflow&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;bio&quot;:&quot;I write everyday about how to make great software and work well with humans, to 60K+ friends.&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6107486-b701-4109-8f21-f450fed6e277_652x690.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;post_date&quot;:&quot;2026-02-25T08:25:55.941Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b48c3e1-3c66-4975-8ec5-44d399f73dc2_2238x1490.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/my-ai-coding-workflow&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:189024124,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:111,&quot;comment_count&quot;:13,&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 class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;920af905-2609-4c4e-a224-fc49e4aface4&quot;,&quot;caption&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;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Updates to my AI Coding Workflow&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-04-08T07:12:58.916Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c31c0da-a80c-463b-8804-c108402a8d19_1200x800.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/updates-to-my-ai-coding-workflow&quot;,&quot;section_name&quot;:&quot;&#129525; Essays&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:193368488,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:57,&quot;comment_count&quot;:6,&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><p>Here is the agenda for today:</p><ol><li><p>&#128677; <strong>Guides, Gates, and Guards</strong> &#8212; my mental model for the various types of AI instructions. The core of the article.</p></li><li><p>&#129302; <strong>From Claude to Codex</strong> &#8212; I moved to Codex and (for now) I am not going back.</p></li><li><p>&#128184; <strong>How much I am spending</strong> &#8212; monthly cost is now down &gt;90%</p></li><li><p>&#128301; <strong>What&#8217;s next / missing</strong> &#8212; what I am trying to improve right now</p></li></ol><p>Let&#8217;s dive in!</p><div><hr></div><h2>&#128677; Guides, Gates and Guards</h2><p>When it comes to the dev process, I think about the types of <em>inputs</em> that I can give to AI in three steps:</p><ol><li><p>&#8618;&#65039; <strong>Guides </strong>&#8212; rules and explainers of how to do things.</p></li><li><p>&#128260; <strong>Gates </strong>&#8212; deterministic checks that <em>block</em> bad things and force the AI to steer its output.</p></li><li><p>&#8617;&#65039; <strong>Guards </strong>&#8212; <em>fallback</em> procedures to improve what falls through the cracks.</p></li></ol><p>These steps are also somewhat sequential:</p><ul><li><p>Guides are the basic context that the AI uses to start the work</p></li><li><p>Gates get into play to steer the work while it&#8217;s in progress</p></li><li><p>Guards are the last line of defense against enshittification.</p></li></ul><p>Let&#8217;s look at all of them:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JuRD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JuRD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png 424w, https://substackcdn.com/image/fetch/$s_!JuRD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png 848w, https://substackcdn.com/image/fetch/$s_!JuRD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png 1272w, https://substackcdn.com/image/fetch/$s_!JuRD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JuRD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png" width="1456" height="699" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:699,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94481,&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/200102476?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.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_!JuRD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png 424w, https://substackcdn.com/image/fetch/$s_!JuRD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png 848w, https://substackcdn.com/image/fetch/$s_!JuRD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png 1272w, https://substackcdn.com/image/fetch/$s_!JuRD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79146243-97aa-45f3-b970-6a58364edeb2_1708x820.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>1) Guides &#8618;&#65039;</h3><p>We can as well call them <em>rules</em>, but then we&#8217;d lose the 3G&#8217;s memorability!</p><p>These days you write guides for AI agents in two main ways:</p><ul><li><p><strong>AGENTS.md / CLAUDE.md </strong>&#8212; the core instructions that the agent <em>always</em> loads.</p></li><li><p><strong>Skills</strong> &#8212; specific instructions to do particular tasks. A skill gets <em>used </em>only when the task requires it.</p></li></ul><p>It&#8217;s worth noting that the <em>boundaries</em> between the two surfaces are not very clear. It&#8217;s often dubious whether you should create a separate skill or just slam everything into the AGENTS.md, and even benchmarks are inconclusive about the effectiveness of the various strategies.</p><p>I believe that&#8217;s because, at their core, they are the same thing: <strong>instructions</strong> to the agent.</p><p>My dev process is simple enough that I can afford to keep everything into the AGENTS.md, and not use any specific skill. I have tried a few and never felt things got noticeably better, so I opted for keeping things simple.</p><p>You can inspect the actual <a href="https://github.com/refactoringhq/tolaria/blob/main/AGENTS.md">file</a> &#8212; it&#8217;s not perfect, mind you, but gives you a more precise idea.</p><p>In my AGENTS.md, the most important instructions are about:</p><ul><li><p><strong>TDD </strong>&#8212; the agents has to write tests first and do the classic red &#8594; green &#8594; refactor.</p></li><li><p><strong>Boy scout rule</strong> &#8212; leave the code in a better shape than you found it. It should also measure the before/after quantitatively with CodeScene and Codacy.</p></li><li><p><strong>UI </strong>&#8212; always use shadcn/ui components when possible, and inspect our design language before implementing new UI (we got basic tokens for colors, typography, spacing, etc).</p></li><li><p><strong>Localization </strong>&#8212; extract and translate all the new strings in the supported languages. I use the <a href="https://laratranslate.com/about-lara?utm_term=lara%20translate&amp;utm_campaign=LARA+SEM+-+Brand&amp;utm_source=adwords&amp;utm_medium=ppc&amp;hsa_acc=4328324064&amp;hsa_cam=21903987592&amp;hsa_grp=170296292597&amp;hsa_ad=720960573760&amp;hsa_src=g&amp;hsa_tgt=kwd-2376217352548&amp;hsa_kw=lara%20translate&amp;hsa_mt=e&amp;hsa_net=adwords&amp;hsa_ver=3&amp;gad_source=1&amp;gad_campaignid=21903987592&amp;gbraid=0AAAAAohNJ6REfuYwwEVIav_w_li-_XboQ&amp;gclid=Cj0KCQjw2_TQBhCnARIsAF3-XhyyKQUq2sjYWJ6YdEl9XlOnk4BVQxxvTD-setBqq7cYgE_-emZFfxIaAl93EALw_wcB">Lara</a> CLI for this.</p></li></ul>
      <p>
          <a href="https://refactoring.fm/p/my-ai-coding-workflow-b09">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AI leverage, bottom line up front, and great talks 💡]]></title><description><![CDATA[Monday Ideas &#8212; Edition #210]]></description><link>https://refactoring.fm/p/ai-leverage-bottom-line-up-front</link><guid isPermaLink="false">https://refactoring.fm/p/ai-leverage-bottom-line-up-front</guid><dc:creator><![CDATA[Luca Rossi]]></dc:creator><pubDate>Mon, 01 Jun 2026 07:02:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DUMr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.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>from <a href="https://refactoring.fm/">Refactoring</a> <em>&#8212; ideas and readings to start the week on the right foot.</em></p><div><hr></div><blockquote><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 our friends at <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><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DUMr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DUMr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png 424w, https://substackcdn.com/image/fetch/$s_!DUMr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png 848w, https://substackcdn.com/image/fetch/$s_!DUMr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png 1272w, https://substackcdn.com/image/fetch/$s_!DUMr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DUMr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png" width="302" height="65.12912087912088" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd6c8fd1-332c-4b34-838e-354f252eac9b_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;:302,&quot;bytes&quot;:174076,&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/199971316?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.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_!DUMr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png 424w, https://substackcdn.com/image/fetch/$s_!DUMr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png 848w, https://substackcdn.com/image/fetch/$s_!DUMr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png 1272w, https://substackcdn.com/image/fetch/$s_!DUMr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd6c8fd1-332c-4b34-838e-354f252eac9b_8042x1737.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><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;Learn more about Unblocked&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>Learn more about Unblocked</span></a></p></blockquote><div><hr></div><h2>1) &#128200; Measure AI effectiveness by <em>leverage</em></h2><p>There are a lot of *bad* ways to measure how well your team uses AI, including counting lines of code, tokens spent, and more!</p><p>To me, we should measure <em>effectiveness</em>, which is a function of leverage: <strong>how much useful output you get per unit of human input</strong>.</p><p>This is different from measuring <strong>AI usage</strong>. E.g. a team can maximize AI-generated code by writing incredibly detailed specs that are basically pseudo-code. The AI may write the final syntax, but the human still did most of the hard work.</p><p>That is not real leverage!</p><p>So a better question is: how much context does a human need to provide before the AI can do the job well? Some of the prompt will always be task-specific. If you ask for a new button, the AI needs to know where the button goes and what it should do. But a lot of the prompt should not have to be repeated every time: design rules, product conventions, architecture patterns, testing style, existing components, release constraints.</p><p>So you can think at a scale that goes like this:</p><ol><li><p>&#127964;&#65039; <strong>Negative leverage</strong> &#8212; people spend more time fighting the AI than doing the work themselves.</p></li><li><p>&#127793; <strong>Low leverage</strong> &#8212; the AI writes code, but only after humans write exhaustive instructions.</p></li><li><p>&#129716; <strong>High leverage</strong> &#8212; the AI can reuse enough context from the system that prompts become short and results stay good.</p></li><li><p><strong>&#127795; Maximum leverage</strong> &#8212; the AI one-shots meaningful work from tiny prompts because the factory already knows how good work should be done.</p></li></ol><p>I wrote more about this in the recent article series about the new software factory &#128071;</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:192418439,&quot;url&quot;:&quot;https://refactoring.fm/p/growing-your-sofware-factory&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:null,&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 Grow your Software Factory&quot;,&quot;truncated_body_text&quot;:&quot;Last month I published The Era of the Software Factory, where I commented on the latest State of Software Delivery together with Rob Zuber, a good friend and CTO of CircleCI.&quot;,&quot;date&quot;:&quot;2026-04-01T07:02:09.615Z&quot;,&quot;like_count&quot;:34,&quot;comment_count&quot;:2,&quot;bylines&quot;:[{&quot;id&quot;:6835984,&quot;name&quot;:&quot;Luca Rossi&quot;,&quot;handle&quot;:&quot;refactoring&quot;,&quot;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/growing-your-sofware-factory?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 Grow your Software Factory</div></div><div class="embedded-post-body">Last month I published The Era of the Software Factory, where I commented on the latest State of Software Delivery together with Rob Zuber, a good friend and CTO of CircleCI&#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; 34 likes &#183; 2 comments &#183; Luca Rossi</div></a></div><div><hr></div><h2>2) &#11014;&#65039; Bottom line up front</h2><p>One of the most popular articles we published on Refactoring last year is from Anna Shipman, CTO at Kooth and one of my favorite authors.</p><p>She described the <em>translation layer</em> that is needed to make engineering understood by executives, and the article is packed with great examples and mental models.</p><p>One of the pieces of advice that stuck with me is to always <em>lead</em> your communication (spoken or written) with an <strong>executive summary</strong> that includes the most important information: what action you are looking for.</p><p>Or, as Anna calls it: <strong>bottom line up front</strong>.</p><p>An exec summary tells the reader in a few short sentences what this document is going to cover. If this is a presentation rather than a document, include an executive summary slide. If this is a conversation, set it up right by explaining first what the purpose of the conversation is. If you are asking for a decision, make sure you&#8217;ve included what the decision is.</p><p>Here are some example exec summaries.</p><p>For a document:</p><blockquote><p><em>This proposal recommends consolidating our infrastructure onto a single cloud provider to reduce operating costs by 20% over three years, improve reliability, and accelerate feature delivery. The alternative is to retain our split between AWS and Azure. The work will reduce capacity of the platform team by 50% for six months, delaying completion of the work on pipelines until Q4 2026.</em></p><p><em>We request an additional budget of &#163;50k for the engineering team to have access to an AI coding assistance tool. We have demonstrated in our trial that use of Cursor increases throughput of work by 25% meaning over a year we would deliver extra features equivalent to the salary of four additional engineers, therefore this would pay for itself by end Q1 next year.</em></p></blockquote><p>In a conversation you might say:</p><blockquote><p><em>&#8220;I want to propose we start upgrading our data handling now rather than in Q3 as planned because our latest planning session raised a flag that we may not hit the deadline. We&#8217;d have to pause the work on the new dashboards to do that.&#8221;</em></p><p><em>&#8220;There&#8217;s a strong business case for investing more in developer experience in next year&#8217;s budget. I can show you the ROI calculation we&#8217;ve done, but I would like your take before we move forward with the budget preparation.&#8221;</em></p></blockquote><p>You can find the full article by Anna here:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:178065441,&quot;url&quot;:&quot;https://refactoring.fm/p/the-engineer-executive-translation&quot;,&quot;publication_id&quot;:64099,&quot;embedding_publication_id&quot;:null,&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 Engineer &#8594; Executive Translation Layer &#128256;&quot;,&quot;truncated_body_text&quot;:&quot;Hey, Luca here! Today we are hosting a fantastic new article by Anna Shipman, CTO at Kooth.&quot;,&quot;date&quot;:&quot;2025-11-12T08:01:00.523Z&quot;,&quot;like_count&quot;:29,&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;id&quot;:411731536,&quot;name&quot;:&quot;Anna Shipman&quot;,&quot;handle&quot;:&quot;annashipman&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c41f7b58-210b-4e51-9ee9-eed131f347c5_3259x3259.jpeg&quot;,&quot;bio&quot;:&quot;Strategic technology leader. Previous: CTO at Kooth, Technical Director at the Financial Times, Technical Architect at GDS. Love Vim, cryptic crosswords and pool. I speak at conferences, and write about strategy and tech leadership on my blog, JFDI.&quot;,&quot;profile_set_up_at&quot;:&quot;2026-02-25T10:14:45.167Z&quot;,&quot;reader_installed_at&quot;:&quot;2026-02-25T10:23:36.696Z&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;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-engineer-executive-translation?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 Engineer &#8594; Executive Translation Layer &#128256;</div></div><div class="embedded-post-body">Hey, Luca here! Today we are hosting a fantastic new article by Anna Shipman, CTO at Kooth&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">9 months ago &#183; 29 likes &#183; Luca Rossi and Anna Shipman</div></a></div><div><hr></div><h2>3) &#128227; What makes for a great talk</h2><p>By the time you read this newsletter I&#8217;ll probably be in London to attend LDX3. This year I will interview the one and only Rands on stage, for a live episode of the Refactoring podcast.</p><p>So, while preparing for this, I thought about my <a href="https://refactoring.fm/p/diversity-ai-and-junior-engineers">interview with Meri Williams</a> last year. Meri is the long-time host of LeadDev conferences, and every year they have to run through hundreds of talk submissions to select only a handful of truly great ones.</p><p>I asked them what makes for an amazing talk, and they said it&#8217;s three things:</p><ol><li><p>&#128214; <strong>Personal story</strong> &#8212; or a case study. Anyway, a<strong> </strong>real experience that grounds the content.</p></li><li><p>&#129504; <strong>Framework</strong> &#8212; the author <em>abstracted</em> their experience into a theory that can be applied broadly.</p></li><li><p>&#9889; <strong>Practical application</strong> &#8212; the story + framework combination has clear takeaways that the audience can implement.</p></li></ol><p>You can find the full interview with Meri here:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;df7b727d-b44d-47d4-bdde-8914acacd433&quot;,&quot;caption&quot;:&quot;Listen now on YouTube, Apple, or Spotify&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Diversity, AI, and Junior Engineers &#127912; &#8212; with Meri Williams&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-15T06:00:24.746Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/949ed0e0-12c1-4b80-9c7b-71d918d0ea56_2560x1440.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://refactoring.fm/p/diversity-ai-and-junior-engineers&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;409ed378-d20e-4a9d-9a85-4a4802e539ad&quot;,&quot;id&quot;:170861146,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:19,&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><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></channel></rss>