<?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[Dev Leader Weekly]]></title><description><![CDATA[My weekly newsletter that simplifies software engineering for you, along with C# code examples. Join thousands of software engineers from companies like Microsoft and Amazon who are already reading!]]></description><link>https://weekly.devleader.ca</link><image><url>https://substackcdn.com/image/fetch/$s_!zuqM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee7b925-847a-411b-a8bb-86cec91a2098_1280x1280.png</url><title>Dev Leader Weekly</title><link>https://weekly.devleader.ca</link></image><generator>Substack</generator><lastBuildDate>Sun, 08 Nov 2026 15:59:14 GMT</lastBuildDate><atom:link href="https://weekly.devleader.ca/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Nick Cosentino]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[social@devleader.ca]]></webMaster><itunes:owner><itunes:email><![CDATA[social@devleader.ca]]></itunes:email><itunes:name><![CDATA[Dev Leader]]></itunes:name></itunes:owner><itunes:author><![CDATA[Dev Leader]]></itunes:author><googleplay:owner><![CDATA[social@devleader.ca]]></googleplay:owner><googleplay:email><![CDATA[social@devleader.ca]]></googleplay:email><googleplay:author><![CDATA[Dev Leader]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Desktop Apps Aren't Dead. Pick Your Tradeoffs]]></title><description><![CDATA[Dev Leader Weekly 163]]></description><link>https://weekly.devleader.ca/p/desktop-apps-arent-dead-pick-your</link><guid isPermaLink="false">https://weekly.devleader.ca/p/desktop-apps-arent-dead-pick-your</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 02 Nov 2026 07:39:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!EiJ3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/10/31/desktop-apps-arent-dead-pick-your-tradeoffs-dev-leader-weekly-163" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EiJ3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!EiJ3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!EiJ3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!EiJ3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EiJ3!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:2119111,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/10/31/desktop-apps-arent-dead-pick-your-tradeoffs-dev-leader-weekly-163&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/223118518?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.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_!EiJ3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!EiJ3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!EiJ3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!EiJ3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F047e3083-e4ab-4a00-a3f3-862ce83e97fb_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Pick the platform your users need.</p></li><li><p>Cross-platform doesn&#8217;t mean cost-free.</p></li><li><p>Lock-in isn&#8217;t the same as loyalty.</p></li><li><p><strong><a href="https://youtube.com/live/I-ASp6-juQ4?feature=share">Watch the livestream (or check out the recording) on Monday, November 2nd at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-I-ASp6-juQ4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;I-ASp6-juQ4&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/I-ASp6-juQ4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>Are Desktop Applications Obsolete?</strong></h2><p>Hey folks!</p><p>I came across a question on the ExperiencedDevs subreddit about software moving from desktop applications toward web apps. Why does that happen? And aren&#8217;t we losing something if the software no longer lives on our computers?</p><p>I think those are fair questions. But <strong>I don&#8217;t think desktop is dead, and I don&#8217;t think web automatically wins.</strong></p><p>I&#8217;ve been programming for more than 20 years. More than half of my programming career has been in desktop development. So this isn&#8217;t coming from someone who has only ever built things for a browser.</p><p>My perspective is that web apps can open up opportunities for a product. Desktop apps still make sense when their capabilities fit what you&#8217;re building. The interesting part is figuring out which tradeoffs you&#8217;re actually willing to make.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=S2Ld8vxIsy8">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-S2Ld8vxIsy8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;S2Ld8vxIsy8&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/S2Ld8vxIsy8?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><h2><strong>Cross-Platform Doesn&#8217;t Make The Cost Disappear</strong></h2><p>Let&#8217;s say you&#8217;re building an app for Windows customers.</p><p>If Windows is the only platform you need, building specifically for it might be a perfectly reasonable choice. But what happens when you also want Mac and Linux users?</p><p>You have options. You could build separate native interfaces and share the parts of the application that don&#8217;t depend on the platform. You could use a cross-platform framework. Or you could ask whether the product belongs in a browser.</p><p><strong>None of those options makes the engineering work disappear.</strong></p><p>With separate native interfaces, you have more platform-specific work to maintain. With a cross-platform framework, I would want to examine how much complexity moves into the framework and how the experience feels on each platform.</p><p>Maybe the interface doesn&#8217;t feel completely native. Maybe it does, but your team has more work to get it there. I&#8217;m not saying that makes cross-platform a bad choice. I&#8217;m saying you need to look for where you&#8217;re paying the cost.</p><p>The browser has its own version of this tradeoff. Reaching users through a URL can be attractive, but &#8220;it opens on a phone&#8221; and &#8220;it&#8217;s a good product on a phone&#8221; are not the same thing.</p><p>You still need to consider layout, interaction, and the devices your customers actually use. Mobile isn&#8217;t free just because the page loads.</p><h2><strong>Start With What The Product Must Do</strong></h2><p>What if your app needs frequent access to local files? What if it interacts with other things on the computer? What if a very specific native experience is part of what customers are buying?</p><p>Those are more useful questions than asking which platform is winning.</p><p>And I want to be careful here: <strong>the browser isn&#8217;t simply incapable of working with local files.</strong> The <strong><a href="https://developer.chrome.com/docs/capabilities/web-apis/file-system-access">File System Access API can read and save files after the user grants access</a></strong>. But browser support, permissions, and the exact workflow still matter. That is not the same as assuming every browser can provide every desktop interaction you need.</p><p>For a product where those boundaries keep getting in the way, I would seriously consider desktop. For a product where they aren&#8217;t important and reaching people on different platforms is valuable, I would explore web.</p><p>What about performance?</p><p>I wouldn&#8217;t choose based on a blanket statement that native is always faster or that browsers are now fast enough for everything. I would identify the interaction that matters, build a representative slice, and measure it on the devices we need to support.</p><p><em><strong>Actionable Tip</strong></em></p><p>Before choosing your stack, write down:</p><ul><li><p>Which platforms your customers actually need.</p></li><li><p>What must work without a network connection.</p></li><li><p>Which local files, devices, or system integrations matter.</p></li><li><p>What &#8220;fast enough&#8221; means for the important workflow.</p></li><li><p>Who will maintain the application after the demo works.</p></li></ul><p>Then compare the options against that list. Not against your favorite framework&#8217;s homepage.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Your Team Is Part Of The Decision</strong></h2><p>Historically, team familiarity has been a big factor for me.</p><p>If you have developers who are very effective in a particular stack, and no strong requirement pushing you away from it, leaning into that experience can help you get the product out the door.</p><p>A theoretically better technology doesn&#8217;t help much if you can&#8217;t ship.</p><p>I think AI can change some of that calculation. It may make an unfamiliar stack more approachable. That is part of why I&#8217;ve been talking about how <strong><a href="https://www.devleader.ca/2026/10/10/programming-languages-still-matter-ai-changes-why-dev-leader-weekly-160?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-163">AI changes the reasons we choose programming languages</a></strong>.</p><p>But &#8220;I can generate this&#8221; isn&#8217;t the same as &#8220;we can support this.&#8221;</p><p>You still need to evaluate the output and understand the important boundaries. <strong><a href="https://www.devleader.ca/2026/10/17/ai-writes-the-code-you-still-own-the-quality-dev-leader-weekly-161?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-163">Owning the quality of AI-written code</a></strong> doesn&#8217;t stop being your responsibility because the stack is new to you.</p><p>If your first attempt misses a requirement, use that to improve the process. <strong><a href="https://www.devleader.ca/2026/10/24/when-ai-code-fails-review-fix-the-loop-dev-leader-weekly-162?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-163">Fixing the feedback loop</a></strong> is more useful than repeatedly asking for a better result without explaining what better means.</p><h2><strong>Installed, Offline, And Owned Are Different Questions</strong></h2><p>The original question also brought up ownership. Maybe people feel better about buying software if they have a copy installed on their computer.</p><p>I can understand that preference. It&#8217;s just not a requirement I personally have for every product.</p><p>For example, I pay for Office outside of work, and I mostly use the web apps. I work at Microsoft, but this is my perspective as a paying customer, not a statement on Microsoft&#8217;s behalf. Whether Office is installed on my computer isn&#8217;t what makes that purchase valuable to me.</p><p>Would I prefer a one-time purchase over a subscription? Sure. But that&#8217;s a different question from whether I need a desktop application.</p><p>And offline access is another question again.</p><p>Imagine you have a document on your computer, but the application you need to open it requires an internet connection. If the network is down, being unable to view your own local file would feel pretty bad.</p><p>That&#8217;s a hypothetical workflow, not a claim that every Office application behaves that way.</p><p>The same concern comes up for me with single-player games that require an online connection. It feels weird even when it isn&#8217;t frequently stopping me from playing.</p><p>But <strong>web doesn&#8217;t automatically mean online-only, either.</strong> <strong><a href="https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps/how-to/offline">Progressive Web Apps can store data locally to support offline work</a></strong>. You have to deliberately build and test that experience. A product that depends on a remote service still needs a plan for what happens when that service is unavailable.</p><p>So ask the customer what they mean by ownership. Is it a one-time payment? Access to their data? Being able to keep working offline? Those answers can point you toward different product decisions.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Lock-In Is Not Loyalty</strong></h2><p>Another part of the question was whether a desktop app makes it harder for users to switch away.</p><p>Maybe. But I don&#8217;t think making it difficult to leave is the same as earning loyalty.</p><p>I would rather have people stay because the product does something valuable for them. Creating barriers can also give someone a reason not to buy in the first place.</p><p>From the business side, I can see why a subscription model might be attractive. You can think about retention, expanding usage, and offering more value to existing customers.</p><p>That doesn&#8217;t prove a subscription is the right model for your product. And it doesn&#8217;t prove web apps are more profitable. I&#8217;m describing why I think a business might explore that direction, not presenting market research.</p><p>The implementation and the pricing model deserve separate decisions. Don&#8217;t let &#8220;we want subscriptions&#8221; quietly turn into &#8220;therefore our users don&#8217;t need offline access.&#8221;</p><h2><strong>Don&#8217;t Rewrite A Working Product To Follow A Trend</strong></h2><p>If you already have a desktop application, this conversation isn&#8217;t automatically a reason to replace it.</p><p>What problem would the replacement solve?</p><p>If you&#8217;re weighing <strong><a href="https://www.devleader.ca/2023/11/26/rewriting-vs-refactoring-code-how-to-navigate-the-two?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-163">rewriting against refactoring</a></strong>, start with the capability you need rather than assuming a new platform fixes everything.</p><p>You might be able to share more of the underlying logic. You might need a new client for a particular audience. Or keeping the current product might be the right answer.</p><p>And remember the maintenance side. <strong><a href="https://www.devleader.ca/2023/10/24/how-to-dominate-technical-debt-and-build-better-code?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-163">Managing technical debt</a></strong> is still work in a web app. A different delivery mechanism doesn&#8217;t erase the cost of supporting what you&#8217;ve built.</p><p><em><strong>Actionable Tip</strong></em></p><p>Pick one important customer workflow. Try the smallest realistic version of it in the alternative you&#8217;re considering. Include the awkward parts, not just the happy-path screen.</p><p>Can it work offline when required? Can the user access what they need? Does it perform adequately? Can your team maintain it?</p><p><strong>Desktop isn&#8217;t dead. Web isn&#8217;t a universal answer.</strong></p><p>I think the opportunity is having more choices. Our job is to understand the product well enough to make one deliberately.</p><p>Which requirement has actually pushed your team toward desktop or web? I&#8217;d be interested in hearing the tradeoff, not just the technology you picked.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/desktop-apps-arent-dead-pick-your?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/desktop-apps-arent-dead-pick-your?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/desktop-apps-arent-dead-pick-your/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/desktop-apps-arent-dead-pick-your/comments"><span>Leave a comment</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x2Nh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!x2Nh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!x2Nh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!x2Nh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!x2Nh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!x2Nh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!x2Nh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!x2Nh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!x2Nh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c44cd-a794-4765-9951-e1b0363e0893_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[When AI Code Fails Review, Fix the Loop]]></title><description><![CDATA[Dev Leader Weekly 162]]></description><link>https://weekly.devleader.ca/p/when-ai-code-fails-review-fix-the</link><guid isPermaLink="false">https://weekly.devleader.ca/p/when-ai-code-fails-review-fix-the</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 26 Oct 2026 05:38:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8iv-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/10/24/when-ai-code-fails-review-fix-the-loop-dev-leader-weekly-162" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8iv-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!8iv-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!8iv-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!8iv-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8iv-!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:83940,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/10/24/when-ai-code-fails-review-fix-the-loop-dev-leader-weekly-162&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/222134876?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8iv-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!8iv-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!8iv-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!8iv-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcaea5f6-bd45-481c-bdd7-5510db91851f_1200x630.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Fix the rules, not just the patch.</p></li><li><p>Guide good behavior. Gate bad behavior.</p></li><li><p>Separate unfinished code from blocked verification.</p></li><li><p>No live stream this week! Sorry about that &#128550;</p></li></ul><div><hr></div><h2><strong>The Agent Wrote It. The Reviewer Said No.</strong></h2><p>What do you do when an agent writes the code, puts it up for review, and a human says, &#8220;We can&#8217;t integrate this&#8221;?</p><p>I got a submitted question about exactly that. How do you correct the process? How do you stop the same assumptions from carrying into the next change?</p><p>My answer isn&#8217;t just to tell the agent to try harder.</p><p><strong>I want to understand how it got there.</strong> Did it miss a rule? Was the rule ambiguous? Did my checks leave a gap? Or did it spend all its time fighting the process instead of finishing the work?</p><p>Those aren&#8217;t the same problem. And I&#8217;ve been running into both.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=mbmqC9hqGRo">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-mbmqC9hqGRo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;mbmqC9hqGRo&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/mbmqC9hqGRo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>And the irony of all of this? I am pretty sure it was a bot that submitted the anonymous question in at <strong><a href="https://codecommute.com/contact?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-162">Code Commute</a></strong>... But still a good topic!</p><h2><strong>First, Was This Supposed To Be Mergeable?</strong></h2><p>Sometimes I give Copilot a high-level architecture task because I want to see how the pieces could fit together.</p><p>I&#8217;m not necessarily expecting a production-ready result. I want something concrete to read. Show me the structure. Show me where these responsibilities might live. Then I can decide what I agree with.</p><p>That&#8217;s different from handing over a small feature with clear acceptance criteria.</p><p>If I asked for an exploratory prototype, I&#8217;m not going to get upset that I can&#8217;t immediately press merge. But I still want to learn from the parts that don&#8217;t fit. There are many situations that I find myself having an easier time digesting the concept once I see it applied to the codebase, and since code is cheap... why not? It doesn&#8217;t mean I have to merge it though -- that was not the goal.</p><p>For delivery work, I want a much tighter boundary. My walkthrough of <strong><a href="https://www.devleader.ca/2026/10/21/make-a-bounded-aspnet-core-change-with-claude-code?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-162">a bounded change with Claude Code</a></strong> is an example of defining the behavior you want while keeping existing contracts intact.</p><p><em><strong>Actionable Tip</strong></em>: Before delegating, say whether you want an exploration or a change ready for review. Don&#8217;t leave the agent to guess which finish line matters.</p><h2><strong>Working Code Can Still Break Your Architecture</strong></h2><p>A lot of my projects use vertical slices or plugin-based architectures. Those boundaries matter to me.</p><p>I&#8217;ve had agents produce something that works, but does it by making plugins know about each other or share code in ways I don&#8217;t allow.</p><p>From the agent&#8217;s perspective, it connected the pieces. From mine, it cheated. In one case, I was positive I already had instructions and tests preventing the pattern. So I went back to the session and asked about it! I was confident that this should have been borderline impossible to even happen.</p><p>The explanation was interesting: the guidance and tests existed, but this particular variation didn&#8217;t fall into what they covered.</p><p><strong>The rule in my head was broader than the rule in the repository.</strong></p><p>That&#8217;s useful information. Fixing only the generated patch would leave the same opening for the next task.</p><p>Instead, I wanted a separate, focused PR to close that gap: update the guidance, extend the tests, and update the analyzer where appropriate.</p><h2><strong>Guide Good Behavior And Gate Bad Behavior</strong></h2><p>I try to approach this from two directions.</p><ul><li><p>First, give the agent enough guidance to build things the right way.</p></li><li><p>Second, put checks in place to catch the things it gets wrong anyway.</p></li></ul><p>Only having instructions means I&#8217;m depending on the agent to follow them. Only having checks can mean it spends a bunch of time building something before discovering that the approach was never allowed.</p><p>Neither side is perfect. I want both. And I try to aggressively get these added into the repository if I am spending any time reviewing and adding feedback.</p><p>For my .NET projects, Roslyn analyzers are useful for rules I can express mechanically. <strong><a href="https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/overview">Analyzer diagnostics can be configured as errors</a></strong>, giving the agent build feedback rather than waiting for a human to spot the violation. That doesn&#8217;t mean an analyzer understands every architectural decision. The rule still has to exist and cover the offending pattern.</p><p>This is the same reason I emphasize <strong><a href="https://www.devleader.ca/2026/07/29/github-copilot-cli-for-net-developers-real-workflows-on-a-c-codebase?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-162">repository-specific conventions in my Copilot CLI workflow</a></strong>. The agent needs more than a feature description.</p><p><em><strong>Actionable Tip</strong></em>: Take one repeated review comment and ask two questions: &#8220;How do we explain the preferred approach?&#8221; and &#8220;What check would catch this violation?&#8221;</p><h2><strong>Your Teammate&#8217;s Agent Needs The Context Too</strong></h2><p>I&#8217;ve also hit this working with a colleague on <strong><a href="https://www.brandghost.ai/?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-162">BrandGhost</a></strong>.</p><p>He was using Claude Code. I had been creating guidance for Copilot, but I hadn&#8217;t properly synchronized it for his setup. His fault for not using the Microsoft product though, right?!</p><p>The resulting PR included patterns I couldn&#8217;t accept. But the agent hadn&#8217;t received the guidance I expected it to follow, and I didn&#8217;t have checks catching those patterns either.</p><p>That&#8217;s not a fair situation to turn into &#8220;Why did you build it wrong?&#8221; -- that&#8217;s very easy to happen when you aren&#8217;t operating under the same guidance.</p><p><strong>I had to take responsibility for the missing context.</strong> Holding back the PR was still the right call. Blaming my colleague for instructions his agent didn&#8217;t have wasn&#8217;t.</p><p>If your team uses different tools, check what each one actually receives. Don&#8217;t assume guidance written for one setup automatically reaches another. A <strong><a href="https://www.devleader.ca/2026/10/12/claude-code-for-net-developers-a-reviewable-repository-workflow?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-162">reviewable repository workflow</a></strong> starts with making those expectations and boundaries visible.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><h2><strong>The Code Wasn&#8217;t The Only Thing Getting Stuck</strong></h2><p>I had a working prototype built with Claude Code in roughly ten minutes. I gave it to Copilot to integrate into a hosted environment. Copilot tried it and reported that it could use it.</p><p>Heck yeah. Time to rock and roll!</p><p>About 72 hours elapsed while I kept giving it work on that integration. <strong>That wasn&#8217;t 72 hours of me sitting there continuously</strong>, but it was still a frustrating amount of time for something I&#8217;d already seen working. How could we be multiple days into this when I had literally handed over the working code?</p><p>When I inspected the remaining work, six items weren&#8217;t the features or fixes I&#8217;d asked for.</p><p>They were about the infrastructure and process being used to prove the work was done.</p><p>For example, it needed screenshot evidence for a before-and-after comparison, but it had run into trouble on the CI host. It was spending time investigating that instead of delivering the evidence.</p><p>I suspected waiting and retrying the job might have been enough. I hadn&#8217;t established the exact infrastructure cause. That&#8217;s a different failure from violating a plugin boundary.</p><p>Was the implementation incomplete? Or was the implementation ready to inspect while verification was blocked? I needed those separated, not flattened into one list of &#8220;things left.&#8221;</p><p>I&#8217;ve talked before about <strong><a href="https://www.devleader.ca/2026/08/15/gpt56-sol-impressed-me-then-it-wouldnt-stop-dev-leader-weekly-153?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-162">agent review loops expanding beyond the useful work</a></strong>. More activity isn&#8217;t automatically more progress.</p><p>In this case, the agent was busy working hard, but it was spending time on things that simply did not matter.</p><h2><strong>Review The Session, Not Just The Diff</strong></h2><p>My next step was to go through that session with a reflection skill and ask what went wrong.</p><p>I didn&#8217;t have the answer yet. Maybe my instructions were misleading. Maybe I hadn&#8217;t supplied guidance for recovering from those blockers. Maybe the session would reveal something else.</p><p>But asking it to &#8220;finish by morning&#8221; clearly wasn&#8217;t enough. We were several mornings in and I was still feeling the pain.</p><p>For your own workflow, I&#8217;d start by separating:</p><ul><li><p><strong>Implementation gaps</strong>: Which requested behaviors are still missing?</p></li><li><p><strong>Verification gaps</strong>: Which claims still need evidence?</p></li><li><p><strong>Process blockers</strong>: What is preventing that evidence from being collected?</p></li></ul><p>Then decide what a useful next attempt looks like and when it should stop and report the blocker. That&#8217;s not permission to call unverified work complete. It&#8217;s a way to make the actual problem visible.</p><p>I&#8217;ve found the instructions-and-checks loop repeatable and useful. Refining the agent&#8217;s development process is something I&#8217;m still figuring out. That&#8217;s the harder part of <strong><a href="https://www.devleader.ca/2026/07/19/github-copilot-cli-agentic-workflows-delegating-real-work-to-your-terminal?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-162">delegating bounded work to an agent</a></strong>: I want it to navigate the work, not just keep moving.</p><p><em><strong>Actionable Tip</strong></em>: On your next rejected agent PR, don&#8217;t stop at &#8220;fix this code.&#8221; Find the missing guidance, missing gate, or unproductive loop that helped produce it.</p><p>That&#8217;s the improvement I want to carry into the next task.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/when-ai-code-fails-review-fix-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/when-ai-code-fails-review-fix-the?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/when-ai-code-fails-review-fix-the/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/when-ai-code-fails-review-fix-the/comments"><span>Leave a comment</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p><ul><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R282!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!R282!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!R282!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!R282!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!R282!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!R282!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!R282!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!R282!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!R282!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f92ceb1-fd65-4d33-972d-ce553a10f448_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>Nick &#8220;Dev Leader&#8221; Cosentino<br><strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong><br><br>Socials:<br>- <strong><a href="https://www.devleader.ca/">Blog</a></strong><br>- <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong><br>- <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong><br>- <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong></p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[AI Writes The Code. You Still Own The Quality]]></title><description><![CDATA[Dev Leader Weekly 161]]></description><link>https://weekly.devleader.ca/p/ai-writes-the-code-you-still-own</link><guid isPermaLink="false">https://weekly.devleader.ca/p/ai-writes-the-code-you-still-own</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 19 Oct 2026 05:43:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wikR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/10/17/ai-writes-the-code-you-still-own-the-quality-dev-leader-weekly-161" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wikR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!wikR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!wikR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!wikR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wikR!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:89286,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/10/17/ai-writes-the-code-you-still-own-the-quality-dev-leader-weekly-161&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/221095854?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wikR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!wikR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!wikR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!wikR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94235cd4-ca38-4417-93fb-87866447f1a5_1200x630.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Delegate code, not your quality bar.</p></li><li><p>Turn recurring mistakes into automated checks.</p></li><li><p>Use telemetry, not just code familiarity.</p></li><li><p><strong><a href="https://youtube.com/live/6hd2QzRPTVk?feature=share">Watch the livestream (or recording) on Monday, October 19 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-6hd2QzRPTVk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;6hd2QzRPTVk&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/6hd2QzRPTVk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>The Demo Works. Do You Understand The System?</strong></h2><p>Hey folks!</p><p>I came across a post on the ExperiencedDevs subreddit about maintaining quality when agents are writing more of your code. What caught my attention wasn&#8217;t someone saying that AI produces terrible code.</p><p>It was almost the opposite.</p><p>They could get a demo working quickly. The code looked reasonable. But as the application grew, they felt increasingly disconnected from it. When something needed fixing, they weren&#8217;t sure how to direct the agent because they didn&#8217;t really know what had been built.</p><p>I think that&#8217;s a much more interesting problem than arguing about whether AI can write a function.</p><p><strong>Getting something operational and knowing how to keep it healthy are different things.</strong></p><p>I&#8217;ve been talking about how <strong><a href="https://www.devleader.ca/2026/10/10/programming-languages-still-matter-ai-changes-why-dev-leader-weekly-160?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-161">AI changes the reasons we choose programming languages</a></strong>. I think there&#8217;s a related shift here: if we spend less time personally writing every line, we need to be deliberate about how we maintain our standards.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=wG_1i_qRuxQ">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-wG_1i_qRuxQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;wG_1i_qRuxQ&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/wG_1i_qRuxQ?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><h2><strong>This Feels Familiar From Engineering Management</strong></h2><p>As an engineering manager, I don&#8217;t know every line of code my team writes.</p><p>That wasn&#8217;t always the case. Earlier in my career, I was managing people and writing code alongside them. As I spent more time managing and less time in that codebase, I became more detached from its implementation.</p><p>Does that mean I can&#8217;t help the team build good software?</p><p>Of course not. But it changes how I help.</p><p>I can discuss the problem, question a design, and help establish the patterns we want to follow. If someone needs help with a specific implementation, though, there comes a point where I need to roll up my sleeves and read the code with them.</p><p>I see a similar pattern with agents.</p><p>If an agent keeps failing to fix a behavior, repeating &#8220;make it better&#8221; isn&#8217;t much of a strategy. At some point, I need to understand the relevant part of the system well enough to ask a better question.</p><p><strong>Delegation changes where I spend my attention. It doesn&#8217;t remove my responsibility.</strong></p><p>That&#8217;s also part of what I&#8217;ve been exploring while <strong><a href="https://www.devleader.ca/2026/10/03/ai-built-my-game-then-the-art-got-weird-dev-leader-weekly-159?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-161">building a game with AI agents</a></strong>. Having something generated doesn&#8217;t mean I can stop judging whether the result is what I actually wanted.</p><h2><strong>Leave Better Breadcrumbs</strong></h2><p>So what do we do when we need to investigate code we didn&#8217;t personally write?</p><p>One thing I&#8217;d ask an agent to do is walk me through the relevant path. Where does the request enter? What makes the decision? Where does the data get written?</p><p>Then I&#8217;d check that explanation against the code. A confident summary is useful as a starting point, not proof.</p><p>Consistent patterns help here, too. If similar operations follow the same structure, I have fewer surprises to untangle. If every feature introduces another way of doing the same thing, navigating the code becomes harder. This is of course a tax that humans pay when reading code, but I feel convinced that this adds overhead and complexity to agents working in codebases as well.</p><p>This isn&#8217;t some special AI-only discovery. It&#8217;s a reason to care about cohesive software in the first place.</p><p><em><strong>Actionable Tip</strong></em>: When an investigation is painful, don&#8217;t stop at fixing the immediate bug. Ask what made the code difficult to navigate. An existing pattern worth reusing or a short explanation of a non-obvious constraint might save you from repeating the whole investigation.</p><h2><strong>Instructions Are Direction, Not Enforcement</strong></h2><p>Imagine investigating a slow write operation and discovering that it makes a separate database round trip for every item.</p><p>That&#8217;s an example to investigate, not a claim that every loop involving a database is wrong. The actual calls, provider, and workload matter.</p><p>But suppose you&#8217;ve confirmed the problem. You&#8217;ve measured it, found an appropriate batching approach, and fixed it.</p><p>What happens the next time an agent touches that area?</p><p>I want to capture the lesson somewhere it can use. Not &#8220;write performant code.&#8221; Something more useful: follow this repository&#8217;s established write pattern, avoid unnecessary round trips, and preserve the required transaction behavior.</p><p>Include the reason. Include where the existing pattern lives.</p><p>Repository instructions can give an agent that direction. They&#8217;re part of the practical workflow I discuss in my <strong><a href="https://www.devleader.ca/2026/07/29/github-copilot-cli-for-net-developers-real-workflows-on-a-c-codebase?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-161">GitHub Copilot CLI guide for .NET developers</a></strong>.</p><p>But here&#8217;s the important distinction: <strong>telling an agent what to do is not the same as proving it did it.</strong></p><p>We already understand this with people. You can explain a convention to someone and still need to check for it in review. Instructions help steer the work. They aren&#8217;t a guarantee.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Stop Reviewing The Same Mistake Forever</strong></h2><p>If a rule matters enough that we keep looking for violations, can we check it automatically?</p><p>As a .NET developer, one option I think about is a Roslyn analyzer. Analyzers inspect code for particular patterns and report diagnostics. If the relevant rule runs during the build and is configured as an error, a violation can fail that build.</p><p>That configuration matters. An analyzer suggestion isn&#8217;t automatically a blocked change.</p><p>Not every concern fits an analyzer, either. Some rules need information that isn&#8217;t available from static analysis. Some checks would take more effort to build and maintain than they&#8217;re worth.</p><p>For those cases, I might use a test instead:</p><ul><li><p>An architectural test for a dependency boundary we don&#8217;t want crossed.</p></li><li><p>A configuration test for a setting the application requires.</p></li><li><p>A behavior test for an outcome we need to preserve.</p></li></ul><p>And the tests need to check the actual requirement, not just produce a green result. My article on <strong><a href="https://www.devleader.ca/2026/09/03/how-to-unit-test-a-c-processing-pipeline?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-161">testing a processing pipeline</a></strong> is one concrete place to explore that kind of thinking.</p><p>There are tradeoffs. Instructions are relatively cheap to change, but they don&#8217;t enforce themselves. Automated checks provide a repeatable signal, but someone has to design and maintain them. Human review can consider context that a narrow check misses, but I don&#8217;t want to spend every review rediscovering the same mechanical violation.</p><p>I&#8217;d rather combine those approaches than pretend one replaces the others.</p><p><em><strong>Actionable Tip</strong></em>: Pick one recurring problem from your recent reviews. Write down the desired behavior, then decide whether a build check or a test can reliably catch it. Don&#8217;t start by trying to encode every preference you&#8217;ve ever had.</p><h2><strong>Your System Needs To Tell You What&#8217;s Happening</strong></h2><p>There&#8217;s another piece that becomes more important to me as I know fewer of the specific lines: logging and telemetry.</p><p>When you&#8217;ve written a feature yourself, you can sometimes recognize a symptom and think, &#8220;I know which code path would do that.&#8221;</p><p>When you don&#8217;t have that familiarity, what tells you the story?</p><p>With <strong><a href="https://www.brandghost.ai/?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-161">BrandGhost</a></strong>, I want signals I can inspect when something isn&#8217;t working. In the larger systems I work with at Microsoft, that need is even more obvious. There are many service instances and dependencies involved. Remembering how one method works isn&#8217;t enough to understand what&#8217;s happening across them.</p><p>Logs, metrics, and traces give us different views of system behavior. They don&#8217;t magically explain every failure, but they give us evidence to investigate instead of relying entirely on memory.</p><p>If you&#8217;re working in .NET, <strong><a href="https://www.devleader.ca/2026/07/28/opentelemetry-logging-net-ilogger-integration-and-structured-log-export?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-161">structured logging with OpenTelemetry</a></strong> is a concrete area to explore.</p><p>I wouldn&#8217;t take that as &#8220;log everything.&#8221; I&#8217;d start with the questions I need answered: Which operation failed? Where did the time go? Can I follow the work across the relevant components?</p><p><strong>If I understand less of the implementation from memory, I want better signals, not fewer.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Keep The Bar. Improve The Feedback.</strong></h2><p>I don&#8217;t think the answer is that you must personally memorize every line an agent produces.</p><p>I also don&#8217;t think the answer is to trust it because the demo worked.</p><p>The approach that makes sense to me is to keep improving the feedback around the work:</p><ol><li><p>Give the agent useful direction about the patterns you want.</p></li><li><p>Check important, repeatable requirements automatically where practical.</p></li><li><p>Review the decisions those checks don&#8217;t cover.</p></li><li><p>Make sure you can investigate the system when it behaves unexpectedly.</p></li></ol><p>When something slips through, use that failure to improve the process. Maybe an instruction was vague. Maybe a check was missing. Maybe you need to understand that part of the code more deeply.</p><p>None of this guarantees perfect software. Human teams don&#8217;t get that guarantee, either.</p><p>But I&#8217;d much rather build a process that helps me catch mistakes than keep asking an agent to &#8220;make no mistakes.&#8221;</p><p>That&#8217;s the quality bar I want to keep.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/ai-writes-the-code-you-still-own?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/ai-writes-the-code-you-still-own?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/ai-writes-the-code-you-still-own/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/ai-writes-the-code-you-still-own/comments"><span>Leave a comment</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NrTd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!NrTd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!NrTd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!NrTd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!NrTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!NrTd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!NrTd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!NrTd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!NrTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192c57de-36c3-4f67-8293-0fb28bd7bea1_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[Programming Languages Still Matter -- AI Changes Why]]></title><description><![CDATA[Dev Leader Weekly 160]]></description><link>https://weekly.devleader.ca/p/programming-languages-still-matter</link><guid isPermaLink="false">https://weekly.devleader.ca/p/programming-languages-still-matter</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Sun, 11 Oct 2026 18:38:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wJ5L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/10/10/programming-languages-still-matter-ai-changes-why-dev-leader-weekly-160" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wJ5L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!wJ5L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!wJ5L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!wJ5L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wJ5L!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:87438,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/10/10/programming-languages-still-matter-ai-changes-why-dev-leader-weekly-160&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/219910299?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wJ5L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!wJ5L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!wJ5L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!wJ5L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956dac34-b989-4cfc-98b4-f99710cbdd25_1200x630.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>AI reduces friction, not engineering responsibility</p></li><li><p>Pick languages for the problem you&#8217;re solving</p></li><li><p>Unfamiliar stacks still need credible validation</p></li><li><p><strong><a href="https://youtube.com/live/8pPZ372iMEY?feature=share">Join me for the live stream (or watch the recording) on Monday, October 12 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-8pPZ372iMEY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;8pPZ372iMEY&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/8pPZ372iMEY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>Are Programming Languages Dead?</strong></h2><p>I came across a question on the experienced developers subreddit: With AI writing more of our code, does the programming language even matter anymore?</p><p>My answer? <strong>Yes. But I think the reasons we choose a language are changing.</strong></p><p>That is a different conversation from declaring programming languages dead. AI can make an unfamiliar stack more accessible without making every stack interchangeable. It can help you build something without magically removing your responsibility for what you ship.</p><p>And honestly, I think that distinction is pretty exciting. We have more options. We still have decisions to make.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=6BKpdVVASEs">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-6BKpdVVASEs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;6BKpdVVASEs&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/6BKpdVVASEs?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><h2><strong>The Best Language Is Not Always the Best Decision</strong></h2><p>Imagine you have eight engineers. Seven are comfortable in one language, and one knows another language that looks like a better technical fit.</p><p>Do you automatically choose the technically better fit?</p><p>I wouldn&#8217;t.</p><p>Maybe that language gives you more performance. Great. But if adopting it significantly slows the team down, you have to weigh that against getting the product into people&#8217;s hands. A performance advantage does not help much if you never ship anything.</p><p>It is the same kind of thinking that makes me question whether a tiny product needs Kubernetes and microservices before it has a single user. You might be optimizing something that isn&#8217;t your actual problem.</p><p>Historically, <strong>team familiarity has been a pretty significant part of that tradeoff</strong>. I think it still belongs in the conversation. AI just changes how much friction an unfamiliar language introduces.</p><p>It doesn&#8217;t reduce that friction to zero. It gives us another way to work through it.</p><h2><strong>I&#8217;ve Built Things in Languages I Don&#8217;t Know</strong></h2><p>C# and .NET are usually my tools of choice. Not because I think they&#8217;re the best answer to every problem. I&#8217;ve used them for a long time, they&#8217;re well suited to a lot of what I build, and I can get things done effectively with them.</p><p>But I&#8217;ve also used <strong><a href="https://www.devleader.ca/projects/google-keyword-planner-mcp?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-160">Copilot to build MCP servers in Go</a></strong>. I hadn&#8217;t written Go before. I wasn&#8217;t purposefully reading Go code either.</p><p>Why choose it?</p><p>For those little servers, I liked the smaller package and the ability to distribute something that could just run without asking the user to install additional dependencies. Could I bundle dependencies with .NET? Absolutely. Go wasn&#8217;t the only viable answer.</p><p>The difference was that I could consider it without first deciding to spend a bunch of time learning Go just to build an MCP server.</p><p>I&#8217;ve also <strong><a href="https://nexussoftwarelabs.com/products/konclave-cloud?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-160">built things in Rust with AI</a></strong>. For those projects, performance and dependency-free distribution were characteristics I wanted to lean into from the beginning. Did the projects absolutely need Rust? No.</p><p><strong>AI made the choice accessible. It didn&#8217;t make the choice mandatory.</strong></p><p>There is an important caveat here: These were side projects, not mission-critical systems with tons of paying customers. A bug in one of those MCP servers is not the same kind of problem as an outage in a service people depend on.</p><p>That distinction matters. <strong><a href="https://www.devleader.ca/2026/10/03/ai-built-my-game-then-the-art-got-weird-dev-leader-weekly-159?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-160">Building a game with AI still left me responsible for checking what it produced</a></strong>. A different language doesn&#8217;t change that relationship.</p><p><em><strong>Actionable Tip:</strong></em> If you want to try an unfamiliar stack, pick a small project where a mistake is recoverable. Be explicit about what you want to learn and what level of risk you&#8217;re accepting.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Your Team Still Has to Own the Result</strong></h2><p>I&#8217;ve lived through a team adopting Rust for a new product because its language characteristics were a good fit. The engineers didn&#8217;t have prior professional experience with it, and the decision included accepting that development would take longer while they learned.</p><p>That was a tradeoff, not an oversight.</p><p>With AI, I think a decision like that can become easier to make or rationalize. You have tools that can help engineers navigate unfamiliar syntax and implementation details.</p><p>But you still need to ask: <strong>How confident are we in the software we&#8217;re building?</strong></p><p>If your team isn&#8217;t comfortable having agents generate code in a stack nobody understands, that is a meaningful constraint. Don&#8217;t pretend it disappears because someone says the models are getting better.</p><p>If something goes wrong, your customers aren&#8217;t going to accept, &#8220;Well, the agent wrote it.&#8221; Neither is your boss.</p><p>You own what you ship.</p><p>I&#8217;ve talked about <strong><a href="https://www.devleader.ca/2026/08/22/ai-can-write-the-code-what-part-do-you-keep-dev-leader-weekly-154?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-160">deciding what part of software development you keep when AI writes the code</a></strong>. For this conversation, accountability is one part you don&#8217;t get to hand away.</p><p><em><strong>Actionable Tip:</strong></em> Before adopting a new stack, answer three questions with your team:</p><ol><li><p>What benefit are we choosing it for?</p></li><li><p>How will we establish confidence that it works?</p></li><li><p>Who can diagnose and recover from a failure?</p></li></ol><p>If the answers are vague, generating more code isn&#8217;t going to make them clearer.</p><h2><strong>Syntax Familiarity and Technical Fit Are Different Things</strong></h2><p>I don&#8217;t particularly enjoy reading Rust. That&#8217;s my personal preference, not a verdict on Rust as a tool.</p><p>With AI doing more of the implementation, I can put less weight on whether I enjoy the syntax and more weight on whether the technology fits what I&#8217;m building.</p><p>That doesn&#8217;t mean software engineering knowledge stops mattering. I&#8217;ve been programming for a couple of decades. I&#8217;m still defining what I want the product to do, thinking about the architecture, and deciding how systems should integrate.</p><p>I&#8217;m changing how the code gets written. I&#8217;m not abandoning those decisions.</p><p>The ecosystem matters too. If you&#8217;re building a web application, you might choose TypeScript or JavaScript because the libraries and tooling fit your needs. That isn&#8217;t a claim that Rust, Go, or C# can&#8217;t do the job. It&#8217;s a reason to look beyond the syntax.</p><p>Sometimes you don&#8217;t need to move your whole application to another stack at all. <strong><a href="https://www.devleader.ca/2026/10/02/vercel-eve-explained-durable-ai-agents-and-c-integration?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-160">Connecting a C# application to a separate agent runtime</a></strong> is one example of keeping a familiar application boundary while using another technology where it fits.</p><p>And an existing product is a different decision from a greenfield project. AI helping with a port doesn&#8217;t automatically make a rewrite worth doing. There still needs to be a reason to incur that cost.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Confidence Needs Something Behind It</strong></h2><p>When I say you need confidence in how the software is built, I don&#8217;t mean you need to feel impressed by the output.</p><p>I&#8217;ve had <strong><a href="https://www.devleader.ca/2026/08/15/gpt56-sol-impressed-me-then-it-wouldnt-stop-dev-leader-weekly-153?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-160">an AI model catch useful bugs while review loops expanded the scope and time</a></strong>. Those two things can both be true. A tool can be valuable without every behavior being something you want.</p><p>So if you&#8217;re using an unfamiliar language, give yourself something concrete to evaluate.</p><p>Can you run the result? Can you check the behavior you actually need? What happens when an input is wrong or a dependency fails? Does the packaging advantage you chose the language for actually show up?</p><p>For example, <strong><a href="https://www.devleader.ca/2026/09/03/how-to-unit-test-a-c-processing-pipeline?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-160">testing a processing pipeline means checking faults, cancellation, and cleanup</a></strong>, not just confirming that the happy path returned something. The implementation language might change, but those kinds of engineering questions don&#8217;t go away.</p><p><em><strong>Actionable Tip:</strong></em> Build one small, end-to-end slice in the proposed stack. Evaluate the characteristic that motivated the choice, and exercise a failure path. Use that evidence to decide whether to expand the experiment.</p><h2><strong>Where I Think This Goes</strong></h2><p>My hypothesis is that knowing a language&#8217;s syntax will matter less in our decision to use it as these tools become more capable.</p><p>Not that every language becomes equally good at everything. Not that everyone suddenly stops writing code. And definitely not that knowing how to engineer software becomes irrelevant.</p><p>I think we get more room to choose based on the problem rather than being boxed in by which syntax we already know.</p><p>Could programming languages eventually be designed more around agents than humans? Maybe. I&#8217;m curious about that, but I don&#8217;t know enough about LLM training to make a strong claim about what would actually work better.</p><p>That is a thought experiment, not something I&#8217;d use to justify a technology decision for my team.</p><p>For now, my position is pretty simple: <strong>Programming languages still matter. AI is changing the tradeoffs around choosing them.</strong></p><p>Use that flexibility where it helps. Keep the responsibility that comes with it.</p><p>Would you trust your team to ship something in a language none of you know well? What would you need to see before you&#8217;d be comfortable doing it?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/programming-languages-still-matter?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/programming-languages-still-matter?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/programming-languages-still-matter/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/programming-languages-still-matter/comments"><span>Leave a comment</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sOn-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!sOn-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!sOn-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!sOn-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!sOn-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!sOn-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!sOn-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!sOn-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!sOn-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64eb4041-b4e0-4090-a4d0-44da24dbbccd_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[AI Built My Game -- Then the Art Got Weird]]></title><description><![CDATA[Dev Leader Weekly 159]]></description><link>https://weekly.devleader.ca/p/ai-built-my-game-then-the-art-got</link><guid isPermaLink="false">https://weekly.devleader.ca/p/ai-built-my-game-then-the-art-got</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Sun, 04 Oct 2026 23:56:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!W5oz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/10/03/ai-built-my-game-then-the-art-got-weird-dev-leader-weekly-159" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W5oz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!W5oz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!W5oz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!W5oz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W5oz!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:84440,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/10/03/ai-built-my-game-then-the-art-got-weird-dev-leader-weekly-159&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/218856148?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W5oz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!W5oz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!W5oz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!W5oz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ea5cc3-80fe-4132-8126-a01100487c87_1200x630.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>AI agents need scoped, reviewable slices</p></li><li><p>Autopilot still needs experienced checkpoints</p></li><li><p>Expertise matters most at the boundaries</p></li><li><p><strong><a href="https://youtube.com/live/fEhKm6nHrqA?feature=share">Join me for the live stream (or watch the recording) on Monday, October 5 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-fEhKm6nHrqA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;fEhKm6nHrqA&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/fEhKm6nHrqA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>Building a Game With AI Is the Easy Part</strong></h2><p>I got into software development because I wanted to make games. That was the original spark for me, and even after more than 20 years of programming, I keep coming back to it.</p><p><strong><a href="https://nexussoftwarelabs.com/games/macerus?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">One of my role-playing games</a></strong> has been evolving on and off for roughly two decades. Another project, currently called <strong><a href="https://nexussoftwarelabs.com/games/evo-habitat-zero?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">EVO: Habitat Zero</a></strong>, is a creature breeding and caretaking game inspired by something I played as a kid. These are not the only things I am building either. I still have <strong><a href="https://www.brandghost.ai/?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">BrandGhost</a></strong> moving full speed ahead, a <strong><a href="https://nexussoftwarelabs.com/products/skweel?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">SQL workbench project called Skweel</a></strong>, and a <strong><a href="https://nexussoftwarelabs.com/products/konclave-cloud?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">secure agent-to-agent communication platform</a></strong> in progress.</p><p>Why keep all of these projects around? Because <strong><a href="https://www.devleader.ca/2026/08/01/why-i-still-build-side-projects-and-what-im-building-next-dev-leader-weekly-151?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">side projects give me a place to explore ideas that matter to me</a></strong>. They let me test technology, architecture, product decisions, and now AI-assisted development without pretending every experiment needs to become a polished business.</p><p>The interesting part is not that an AI agent can generate code for a game. We already know these tools can generate code. The interesting part is what happens when you give one a backlog, let it run on autopilot, and then discover where your own judgment is still doing the real work.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=43lANdMppB4">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-43lANdMppB4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;43lANdMppB4&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/43lANdMppB4?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><h2><strong>Start With Decisions, Not a Giant Prompt</strong></h2><p>I did not begin by telling an agent, &#8220;Go make me a game.&#8221;</p><p>While I was traveling, I used ChatGPT to talk through the high-level mechanics and capture the decisions in Markdown. I chose Unity. I wrote down architectural ideas. I described how the creatures should behave and how the player should interact with the systems. This was not a giant specification with every detail locked down. It was enough context to establish direction.</p><p>Then I handed those files to Astra and asked it to do three things:</p><ol><li><p>Decompose the design into high-level GitHub issues.</p></li><li><p>Put those issues into a sensible implementation order.</p></li><li><p>Deliver the game through small vertical slices.</p></li></ol><p>I was also explicit about what <strong>not</strong> to do. I did not want every issue fully specified up front. When an issue was ready to be worked, the agent could break it down with the latest context instead of following a stale plan written weeks earlier.</p><p>That distinction matters. A huge prompt can produce a huge amount of output, but output is not the same thing as progress.</p><p><em><strong>Actionable Tip:</strong></em> Give your agent enough context to make the next decision well. Do not force it to predict every decision for the rest of the project before the first useful slice exists.</p><h2><strong>Build the Smallest Thing You Can Inspect</strong></h2><p>The implementation plan started with questions I could answer by looking at the game:</p><ul><li><p>Can Unity display a creature?</p></li><li><p>Can that creature animate?</p></li><li><p>Can it move through the scene?</p></li><li><p>Can its animation change with its internal state?</p></li></ul><p>Each answer moved the project forward. More importantly, each answer gave me something concrete to inspect.</p><p>This is exactly why I like <strong><a href="https://www.devleader.ca/2023/10/10/vertical-slice-development-a-comprehensive-how-to-for-modern-teams?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">vertical slice development as a way to deliver useful behavior incrementally</a></strong>. The agent was not spending weeks building disconnected infrastructure and promising that a game would appear eventually. It was producing visible, playable behavior.</p><p>There is a tradeoff here. Horizontal groundwork can be necessary. You still need systems that support future features. But when an agent is generating a large amount of code quickly, vertical slices create feedback points before the volume gets away from you.</p><p><strong>Fast code generation makes short feedback loops more important, not less important.</strong></p><h2><strong>Autopilot Does Not Mean Unattended</strong></h2><p>I have let Astra work through the backlog on autopilot. That sounds like I handed over the repository and disappeared, but that is not what happened.</p><p>I check in regularly. I ask it to open Unity to a scene that demonstrates the latest functionality. While the main session continues working on the next slice, I can see what has actually changed in the game. Every check gives me evidence instead of a progress summary.</p><p>That is the part people can miss when they hear &#8220;autonomous agent.&#8221; Autonomy changes how often I need to type instructions. It does not eliminate accountability.</p><p>The workflow is closer to:</p><ol><li><p>Give the agent a bounded objective.</p></li><li><p>Let it implement and validate the slice.</p></li><li><p>Inspect the behavior in the real application.</p></li><li><p>Correct the direction while the change is still understandable.</p></li><li><p>Continue only when the project still makes sense as a whole.</p></li></ol><p>I use the same philosophy when I am <strong><a href="https://www.devleader.ca/2026/07/19/github-copilot-cli-agentic-workflows-delegating-real-work-to-your-terminal?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">delegating real work through agentic development workflows</a></strong>. The point is not to hover over every generated line. The point is to establish boundaries and feedback loops that make drift visible.</p><p><em><strong>Actionable Tip:</strong></em> Ask the agent to demonstrate the feature in the environment where users will experience it. A written summary is useful, but it is not proof that the software works.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>The Playable Test Case Surprise</strong></h2><p>One of those check-ins exposed something awkward.</p><p>The agent had been delivering the vertical slices as separate demo scenes. Each scene showed that a capability worked, but they did not yet feel like one cohesive game. It was almost like I had a collection of playable test cases:</p><ul><li><p>One little experience for this mechanic</p></li><li><p>Another little experience for that mechanic</p></li><li><p>A different scene for the next capability</p></li></ul><p>Was that wrong? Not entirely. Those scenes made the behavior easy to isolate and verify. They were useful artifacts.</p><p>But they were not the product I had in mind.</p><p>So I asked whether the roadmap included bringing those pieces together into the actual gameplay experience. It did. The agent could explain where that integration work belonged and why the current phase was still focused on isolated mechanics.</p><p>That was a good answer, but I only got it because I noticed the gap and asked.</p><p>This is where your role shifts. You are not just reviewing syntax. You are reviewing whether the implementation strategy still leads to the intended outcome.</p><h2><strong>Your Expertise Sets the Ceiling</strong></h2><p>The software side of the project has gone well. I have been programming for more than 20 years, and I am comfortable evaluating architecture, behavior, and implementation choices.</p><p>The art side? That has been a different story.</p><p>I am not a 3D modeler. I do not have deep experience with game materials, textures, or professional art direction. So I gave the agent a vague version of &#8220;make professional game assets and do not make mistakes.&#8221;</p><p>You can probably guess how that went.</p><p>It produced a space station interior. It made creature models. It checked boxes about polygon counts and materials. It was also <strong>hilariously bad</strong>. One creature started as a strange-looking fox and somehow became a compressed, ball-shaped version of that fox. The agent was proud of the result. I was trying to understand how we had arrived there.</p><p>The problem was not simply that the model failed. The problem was that I lacked the domain expertise to give it a strong target and evaluate the process early.</p><p>This is one reason I keep coming back to the question of <strong><a href="https://www.devleader.ca/2026/08/22/ai-can-write-the-code-what-part-do-you-keep-dev-leader-weekly-154?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">what developers should retain when AI can write more of the code</a></strong>. Your judgment, taste, and ability to recognize a bad direction become more valuable as execution gets cheaper.</p><p><strong>AI can amplify expertise. It can also amplify ambiguity.</strong></p><h2><strong>Better Inputs Beat Louder Instructions</strong></h2><p>My next move is not to yell &#8220;make it professional&#8221; more forcefully.</p><p>I need to give the art agent better references. That might mean finding a high-quality texture that communicates the material I want, providing a model that demonstrates the proportions, or assembling a small visual language the agent can follow.</p><p>I do not want the final game to look like a pile of unrelated free asset packs. But a reference asset can establish the direction in a way that paragraphs of vague adjectives cannot.</p><p>This is not unique to game art. Templates, examples, constraints, and known-good starting points help agents reason about the result you actually want. I have seen the same thing while <strong><a href="https://www.devleader.ca/2026/07/04/feeding-my-ai-workers-templates-dev-leader-weekly-147?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-159">feeding AI workers reusable project templates</a></strong>. The fancy orchestration is useful, but a strong foundation often creates the biggest improvement.</p><p><em><strong>Actionable Tip:</strong></em> When an agent repeatedly misses the mark, stop adding adjectives. Give it a concrete reference and define what should be preserved, changed, and validated.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Keep the Agent Fast and the Feedback Faster</strong></h2><p>I am genuinely excited by how much of Evo Habitat Zero has come together while an agent works through the backlog. Seeing new mechanics appear in Unity is fun. Watching the art agent confidently produce nightmare fuel is also fun, just in a very different way.</p><p>But the biggest takeaway is not &#8220;AI can build games now.&#8221;</p><p>It is this:</p><p><strong>Give the agent clear direction, small slices, concrete references, and frequent opportunities to prove the work.</strong></p><p>Let it move quickly where you have the expertise to evaluate the result. Slow down where you do not. Bring in stronger references or actual domain experts when your own judgment cannot reliably close the gap.</p><p>That is not a limitation of agentic development. That is the discipline that makes it useful.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/ai-built-my-game-then-the-art-got?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/ai-built-my-game-then-the-art-got?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/ai-built-my-game-then-the-art-got/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/ai-built-my-game-then-the-art-got/comments"><span>Leave a comment</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gTc2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!gTc2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!gTc2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!gTc2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!gTc2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!gTc2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!gTc2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!gTc2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!gTc2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945eda68-3673-45d9-b7ab-ccb563bcfc7a_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[Should You Leave A Stable Job For An AI Startup?]]></title><description><![CDATA[Dev Leader Weekly 158]]></description><link>https://weekly.devleader.ca/p/should-you-leave-a-stable-job-for</link><guid isPermaLink="false">https://weekly.devleader.ca/p/should-you-leave-a-stable-job-for</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 21 Sep 2026 16:44:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gQQy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/09/19/should-you-leave-a-stable-job-for-an-ai-startup-dev-leader-weekly-158" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gQQy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!gQQy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!gQQy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!gQQy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gQQy!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:82254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/09/19/should-you-leave-a-stable-job-for-an-ai-startup-dev-leader-weekly-158&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/216681177?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gQQy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!gQQy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!gQQy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!gQQy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00e2c2e9-a7db-4ccc-ba49-1a3c1409883c_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Higher pay does not erase startup risk</p></li><li><p>Your risk tolerance changes over time</p></li><li><p>Treat equity as uncertain upside</p></li><li><p><strong><a href="https://youtube.com/live/HR42YwHCmJI?feature=share">Join me for the live stream (or watch the recording) on Monday, September 21 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-HR42YwHCmJI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;HR42YwHCmJI&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/HR42YwHCmJI?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>Should You Leave A Stable Job For An AI Startup?</strong></h2><p>A developer asked me about a decision that sounds exciting and uncomfortable at the same time.</p><p>They are already working for one of the top employers in their country. The role appears reasonably stable, the pay is fine, and they can generally log off around five. But recruiters are reaching out about AI startups offering <strong>50% to 60% more money</strong>.</p><p>So what is the catch?</p><p>Maybe longer hours. Maybe on-call work. Maybe less stability. Maybe equity that becomes incredibly valuable, or maybe equity that never becomes worth anything at all.</p><p>This is exactly the kind of decision where I do not think there is one correct answer. The useful thing is not for me to tell you, &#8220;Take the startup job,&#8221; or, &#8220;Stay where you are.&#8221; The useful thing is to make the tradeoffs visible enough that you can decide whether the risk actually fits your life.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=wLTBZO3CnGk">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-wLTBZO3CnGk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;wLTBZO3CnGk&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/wLTBZO3CnGk?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><h2><strong>There Is No Universal Risk Profile</strong></h2><p>My younger self and my current self would evaluate this opportunity very differently.</p><p>Early in my career, I had fewer responsibilities. I was not married. I did not have pets. I had paid down most of my school debt through internships, and I had already spent six internships working at small companies. I knew I liked that environment.</p><p>My first full-time role was at a startup. I would love to tell you that I researched every variable and made the mathematically perfect choice. I did not. Some of it was judgment, and some of it was luck.</p><p>What mattered was that I had room to take the chance. If the job demanded a lot from me, I was prepared to work hard and see where it went.</p><p>My life is different now. I am married. We have pets. If we decide to have children, that changes the equation again. My choices do not affect only me anymore.</p><p>That does not make the startup good or bad. It means <strong>the same offer can be a smart risk for one version of you and the wrong risk for another</strong>.</p><p>I wrote recently about how <strong><a href="https://www.devleader.ca/2026/09/13/is-anyone-actually-fulfilled-with-a-software-engineering-career-dev-leader-weekly-157?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-158">career fulfillment changes as your life changes</a></strong>. Risk tolerance works the same way. You need to revisit it instead of assuming the answer you had five years ago still applies.</p><p><em><strong>Actionable Tip</strong></em>: Before comparing jobs, write down what you are protecting right now.</p><ul><li><p>Time with your family</p></li><li><p>Predictable income</p></li><li><p>Health benefits</p></li><li><p>Career acceleration</p></li><li><p>Learning opportunities</p></li><li><p>Flexibility</p></li><li><p>A mission you care about</p></li></ul><p>If you do not know what matters most, the largest salary number will make the decision for you.</p><h2><strong>Compare The Full Trade, Not Just The Salary</strong></h2><p>A 50% to 60% raise is meaningful. I am not going to pretend otherwise.</p><p>But salary is only one line in the offer. If you move from a predictable schedule to consistently working nights, weekends, or on-call rotations, you are trading more than one employer for another.</p><p>You are trading time. You are trading energy. You may be trading certainty. Depending on the company, you may also be trading a clear role for whatever problem is on fire that week.</p><p>That environment can be energizing. It can also be exhausting.</p><p>I have talked about <strong><a href="https://www.devleader.ca/2024/08/24/4-years-in-big-tech-after-startups-dev-leader-weekly-58?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-158">what four years in big tech taught me after working at startups</a></strong>, and one of the biggest differences is not that one environment has problems and the other does not. It is that the problems often have a different shape.</p><p>At a large company, stability does not mean layoffs are impossible. We have all seen that. What it often means is that the company is not relying on one product, one small customer base, or the next funding round to make payroll.</p><p>At a startup, those business risks can be much closer to your day-to-day reality.</p><p><em><strong>Actionable Tip</strong></em>: Translate the offer into the actual trade you expect to make.</p><ol><li><p>What compensation is guaranteed?</p></li><li><p>What hours do people really work?</p></li><li><p>How often is the team on call?</p></li><li><p>How much runway does the company have?</p></li><li><p>What happens if the next funding round does not happen?</p></li><li><p>What would you lose by leaving your current role?</p></li></ol><p>The goal is not to make the startup look scary. The goal is to stop comparing one complete job with one attractive number.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Equity Is Not The Same As Cash</strong></h2><p>Startup equity can be exciting. It can also make an offer feel much larger than it really is.</p><p>The important reality is simple: <strong>the company has to become valuable for that equity to become valuable</strong>.</p><p>That can happen. People join startups, work incredibly hard, and end up with a life-changing outcome. It is also not the most common outcome.</p><p>My mental model would be to make sure the guaranteed compensation works for me first. Then I would treat the equity as uncertain upside.</p><p>Ask about:</p><ul><li><p>The number and type of shares or options</p></li><li><p>The current valuation</p></li><li><p>The strike price</p></li><li><p>The vesting schedule</p></li><li><p>The exercise window if you leave</p></li><li><p>Expected dilution</p></li><li><p>Whether there is any realistic liquidity path</p></li></ul><p>You do not need to become a venture-capital expert. You do need to understand enough to avoid mentally spending money that may never exist.</p><p>The same applies to the mission. If you strongly believe in what the company is building, that can absolutely matter. I have written about <strong><a href="https://www.devleader.ca/2026/03/15/how-much-does-company-alignment-really-matter-for-developers-dev-leader-weekly-131?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-158">how much company alignment matters for developers</a></strong>, because believing in the work can make a difficult season feel worthwhile.</p><p>Just do not let belief in the mission replace basic due diligence.</p><h2><strong>Startup Learning Can Be Incredible</strong></h2><p>I think startups can be some of the best learning environments available to a software engineer.</p><p>Why? Because there is usually so much happening that it is almost impossible not to learn.</p><p>There may not be a specialist for every problem. The company may be solving something for the first time. You might need to move between architecture, implementation, operations, customer feedback, hiring, and planning much faster than you would in a more established organization.</p><p>That chaos is not automatically bad. It can force you to develop range, judgment, and comfort with ambiguity.</p><p>Of course, constant switching has a cost. The <strong><a href="https://www.devleader.ca/2026/04/20/the-context-switching-problem-every-dev-faces-dev-leader-weekly-136?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-158">context-switching problem looks different across startups and large companies</a></strong>, but neither environment is magically free from it.</p><p>The question is whether the learning is worth the pace for you.</p><p>If your goal is to compress a huge amount of experience into a few years, a strong startup can be an incredible opportunity. If you are already near burnout, need predictability, or want to protect time outside work, the exact same environment may be a terrible fit.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Interview The Startup Back</strong></h2><p>A company can tell you that it has excellent work-life balance. You will learn more by asking for concrete examples.</p><p>Try questions like:</p><ul><li><p>What did the team work on outside normal hours in the last month?</p></li><li><p>How often are engineers paged while on call?</p></li><li><p>What happens when a deadline slips?</p></li><li><p>How many people have left the engineering team in the last year?</p></li><li><p>What is the company&#8217;s current runway?</p></li><li><p>Which assumptions must become true for the business to succeed?</p></li><li><p>Why is this role open?</p></li><li><p>What would make someone unsuccessful here?</p></li></ul><p>Listen for specifics.</p><p>&#8220;We care deeply about balance&#8221; is a value statement. &#8220;The team had two after-hours incidents in the last quarter, and here is how we handled them&#8221; is evidence.</p><p>You may still join without perfect answers. Startups are uncertain by definition. But uncertainty you understand is different from uncertainty hidden behind recruiting language.</p><h2><strong>Run The Failure Scenario</strong></h2><p>Most people spend a lot of time imagining the upside.</p><p>What if the company takes off? What if the equity becomes valuable? What if you learn more in two years than you would learn in five somewhere else?</p><p>Those are fair questions. Now run the other scenario.</p><p>What if the startup runs out of money? What if the role is not what you expected? What if you leave after six months? What if the job market is difficult when that happens?</p><p>Can you absorb that outcome financially and emotionally?</p><p>If the answer is yes, the risk may be completely reasonable. If the answer is no, that does not make you timid. It means the downside has consequences you are not willing to accept right now.</p><p><em><strong>Actionable Tip</strong></em>: Decide what failure would cost before you decide what success could pay.</p><p>Consider your savings, benefits, visa or residency constraints, family responsibilities, and how long a job search could realistically take. The more fragile the downside is, the more evidence you should demand before taking the bet.</p><h2><strong>My Answer Is Different Now</strong></h2><p>At this point in my life, I know how I work. I like working hard, sometimes to a fault. I can get deeply focused on making progress and do a poor job balancing everything else.</p><p>Because of that, if I joined a startup again, I would probably assume I was consciously giving up some work-life balance. Maybe the company would prove me wrong, but I would not build my decision around that hope.</p><p>I have also said that if I put startup-level energy into something again, it would most likely be my own company. There are a very small number of people who might convince me otherwise, but I know how much effort a successful startup can require. I do not think I have that effort available for somebody else&#8217;s vision right now.</p><p>That is part of why <strong><a href="https://www.devleader.ca/2026/08/01/why-i-still-build-side-projects-and-what-im-building-next-dev-leader-weekly-151?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-158">I still build side projects and think carefully about what I want to build next</a></strong>. They let me explore ideas and create things while keeping control over how much of my life I am willing to trade.</p><p>Your answer may be completely different, and that is the point.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><h2><strong>The Decision Is Big, But It Is Not Permanent</strong></h2><p>Changing jobs is a major decision. It is not a permanent identity.</p><p>You can join the startup and discover that it is not for you. You can stay in the stable role and reconsider when your circumstances change. You can interview, learn more, and decide the offer is not strong enough.</p><p>If a startup fails, that is not the end of your career. It may be inconvenient. It may be stressful. Finding another role may take time. But if you keep learning, working hard, and pursuing opportunities, one company failing does not erase what you gained.</p><p>So should you leave a stable job for an AI startup?</p><p>Maybe.</p><p>But do not make the decision because AI is exciting, the recruiter created urgency, or the salary number is large. Make it because you understand the workload, the business risk, the learning opportunity, the mission, and the downside, and you still believe the trade fits the life you have now.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/should-you-leave-a-stable-job-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/should-you-leave-a-stable-job-for?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/should-you-leave-a-stable-job-for/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/should-you-leave-a-stable-job-for/comments"><span>Leave a comment</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IR_L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!IR_L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!IR_L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!IR_L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!IR_L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!IR_L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!IR_L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!IR_L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!IR_L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67f5c4a7-a72c-4de9-88f8-4981dc17d498_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[Is Anyone Actually Fulfilled With A Software Engineering Career?]]></title><description><![CDATA[Dev Leader Weekly 157]]></description><link>https://weekly.devleader.ca/p/is-anyone-actually-fulfilled-with</link><guid isPermaLink="false">https://weekly.devleader.ca/p/is-anyone-actually-fulfilled-with</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 14 Sep 2026 04:52:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xxMo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/09/13/is-anyone-actually-fulfilled-with-a-software-engineering-career-dev-leader-weekly-157" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xxMo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!xxMo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!xxMo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!xxMo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xxMo!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:68040,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/09/13/is-anyone-actually-fulfilled-with-a-software-engineering-career-dev-leader-weekly-157&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/215602562?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xxMo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!xxMo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!xxMo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!xxMo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd69d4a51-3377-4876-96a3-a0aaa82ece78_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Fulfillment changes as your life changes</p></li><li><p>Career decisions are rarely permanent</p></li><li><p>Meaningful impact is personal</p></li><li><p><strong><a href="https://youtube.com/live/lvByy_5-Tk4?feature=share">Join me for the live stream (or watch the recording) on Monday, September 14 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-lvByy_5-Tk4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;lvByy_5-Tk4&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/lvByy_5-Tk4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>Is Anyone Actually Fulfilled With A Software Engineering Career?</strong></h2><p>A developer asked a question that sounds simple but gets complicated very quickly: <strong>Is anyone actually fulfilled by a career in software engineering?</strong></p><p>This was not really another conversation about AI taking jobs or changing how we write code. It was a much broader question about whether the career itself gives people what they hoped it would.</p><p>I have been thinking about this recently because I had an intern on my team, and we talked through some of the choices that show up early in a career. Do you go directly into the workforce? Do you continue school? What kinds of roles or industries might fit? Those decisions can feel enormous when you are making them.</p><p>The thing I wanted to make clear is that <strong>fulfillment does not have one permanent definition</strong>. It can look different from person to person, and it can look different for the same person as life changes.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=bT4Fd4PbbB8">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-bT4Fd4PbbB8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;bT4Fd4PbbB8&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/bT4Fd4PbbB8?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><h2><strong>Fulfillment Is Allowed To Change</strong></h2><p>I think most people have some core values that remain fairly stable. The way those values show up in your life, though, can absolutely shift.</p><p>At one point, career growth might be the thing you prioritize most heavily. At another point, family, flexibility, health, education, or time outside work might carry more weight. That does not mean you were wrong before. It means your situation changed.</p><p>This is why I do not think career fulfillment is something you answer once and then lock in forever.</p><p>If you never revisit it, five years can pass before you realize that four years and eleven months of a role have felt completely wrong. The first month was exciting because everything was new, and then the rest became something you tolerated.</p><p>That does not mean you need to conduct a dramatic career review every week. It means you should check in often enough to notice when the work no longer fits. I have written about <strong><a href="https://www.devleader.ca/2026/06/01/adhd-burnout-and-building-a-career-that-fits-your-wiring-dev-leader-weekly-142?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-157">building a career that fits how you operate</a></strong>, and the same idea applies even when burnout or ADHD is not part of the question. A career can look successful from the outside and still be a poor fit for the person living it.</p><p><em><strong>Actionable Tip</strong></em>: Put a recurring career check-in on your calendar. Quarterly might work. Yearly might work. The exact cadence matters less than making sure the reflection actually happens.</p><p>Ask yourself:</p><ul><li><p>Which parts of my work give me energy?</p></li><li><p>Which parts consistently drain me?</p></li><li><p>Am I learning, contributing, or moving toward something I value?</p></li><li><p>Has my answer changed since the last time I asked?</p></li></ul><p>You do not need to make a giant change every time. Sometimes the answer is simply, &#8220;This still works for me.&#8221; That is useful information too.</p><h2><strong>Most Career Decisions Are Not Permanent</strong></h2><p>Early career decisions can feel like doors that close behind you.</p><p>If you start working after school, can you ever go back for a master&#8217;s degree? If you choose graduate school, are you falling behind everyone who entered the workforce? If you move into management, have you permanently left technical work behind?</p><p>These choices have tradeoffs. Going back to school while working full-time is not trivial. Changing roles may cost time, money, comfort, or momentum. But difficult is not the same as impossible.</p><p>I have known people who completed a master&#8217;s degree part-time while working. Plenty of engineers have moved from individual contributor roles into management and then returned to individual contributor roles. People change industries. They take time away. They discover that the path they selected was not what they expected.</p><p>That flexibility matters because <strong><a href="https://www.devleader.ca/2026/08/09/what-comes-after-senior-software-engineer-dev-leader-weekly-152?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-157">what comes after senior software engineer</a></strong> is not one universal promotion ladder. Success might mean staff engineer, management, a different specialty, a smaller company, independent work, or staying exactly where you are because the work fits your life.</p><p>The goal is not to avoid making a choice. The goal is to stop treating every choice as a life sentence.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>The Role And The Career Are Different Questions</strong></h2><p>Sometimes people decide they are no longer fulfilled by software engineering when the actual mismatch is narrower.</p><p>Maybe the domain does not interest you. Maybe you do not believe in the company&#8217;s mission. Maybe the team environment is unhealthy. Maybe the role asks you to spend your time in ways that no longer line up with what you enjoy.</p><p>That distinction is important.</p><p>An engineering manager who keeps reaching for coding tasks might not hate software engineering. They might miss building things. Someone who feels disconnected from a product might not need a new profession. They might need a domain where the outcome matters more to them.</p><p>This is why I think the <strong><a href="https://www.devleader.ca/2026/06/08/the-management-trap-in-software-engineering-dev-leader-weekly-143?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-157">management trap in software engineering</a></strong> is worth understanding before treating management as the automatic next step. Management is a different job. It can be incredibly fulfilling, but it does not become fulfilling merely because it comes with a promotion or better compensation.</p><p>I have been managing teams for roughly thirteen years, and I still genuinely love building software. In my primary role, spending more time coding would usually mean spending less time on the people and organizational work that I am actually responsible for. That is a real tradeoff.</p><p>AI tools have created a few more opportunities for me to build things without taking focus away from the team, which I appreciate. But the underlying question remains: <strong>Do I still value the work my role needs from me?</strong></p><p>The same tension exists before management too. As <strong><a href="https://www.devleader.ca/2025/12/06/senior-engineers-spend-less-time-coding-dev-leader-weekly-118?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-157">senior engineers spend less time coding</a></strong>, their impact often shifts toward design, communication, mentoring, and helping other people move faster. If writing code is the only part that feels meaningful, that shift can be uncomfortable.</p><h2><strong>Impact Is More Than How Many People You Reach</strong></h2><p>When I think about fulfillment in my own career, I keep coming back to impact. Not performance-review impact. Not the biggest number I can put beside a project. I mean impact on an area of life that matters to me.</p><p>Earlier in my career, I worked on digital forensics software used by investigators, examiners, and law enforcement. The software helped people recover and understand evidence from digital devices. The total audience was much smaller than the audience touched by the work I do now, but the impact on an individual case could be enormous.</p><p>My current work can affect experiences for hundreds of millions of people. That is massive reach. At the same time, one request taking a little longer for one person does not feel as personally significant as helping uncover evidence that contributes to finding the truth in a case.</p><p>Neither form of impact is fake. They are simply different.</p><p>In my role now, much of the personal fulfillment comes from working directly with people. I get to help engineers grow, progress in their careers, and work through challenges. That gives me some of the individual impact that I value even when the product impact is broad and less personal.</p><p>This is also why <strong><a href="https://www.devleader.ca/2026/03/15/how-much-does-company-alignment-really-matter-for-developers-dev-leader-weekly-131?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-157">company alignment matters for developers</a></strong>. If the organization&#8217;s mission is deeply connected to something you care about, the work itself may provide a strong sense of purpose. If it is not, fulfillment may need to come from the craft, the people you support, the flexibility the job provides, or the life the job enables outside work.</p><p>There is no rule that says your employer must be the source of all meaning in your life. Some people want work to be a reliable nine-to-five that funds everything they care about after five. That is completely valid.</p><p>That is not how I personally think about work. I enjoy working, and I spend too much of my life doing it to settle indefinitely for, &#8220;This feels okay.&#8221; But that is my answer. You need to understand yours.</p><h2><strong>Run The Smaller Experiment</strong></h2><p>If your honest answer is that the work is not fulfilling, resist the urge to jump immediately to the largest possible conclusion.</p><p>&#8220;I hate this project&#8221; does not automatically mean &#8220;I hate software engineering.&#8221;</p><p>&#8220;I miss coding&#8221; does not automatically mean &#8220;I failed as a manager.&#8221;</p><p>&#8220;I want a different kind of impact&#8221; does not automatically mean &#8220;Everything I built in this career was wasted.&#8221;</p><p><em><strong>Actionable Tip</strong></em>: Identify the smallest change that could test what is actually missing.</p><ul><li><p>Try a different type of project</p></li><li><p>Ask for more mentoring or design responsibility</p></li><li><p>Explore another team or business domain</p></li><li><p>Talk with an individual contributor who returned from management</p></li><li><p>Take a course before committing to another degree</p></li><li><p>Build something outside work to see whether creation is the missing piece</p></li></ul><p>Small experiments give you evidence. They help separate dissatisfaction with one environment from dissatisfaction with the entire career.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Do Not Settle For &#8220;Fine&#8221; Without Checking</strong></h2><p>So, are software engineers actually fulfilled?</p><p>I hope many of us are. I enjoy what I do, and I can still say that I could be more fulfilled. Those statements are not contradictory.</p><p>Fulfillment is not a finish line you cross after getting the right title, salary, or employer. It is an ongoing alignment between what you value and how you spend your time. Because both sides can change, the conversation has to happen more than once every five years.</p><p>Check in with yourself. Separate the role from the industry. Think about the kind of impact that matters to you. Remember that most career decisions are not carved in stone.</p><p>You spend too much of your life working to never ask whether the work still fits.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/is-anyone-actually-fulfilled-with?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/is-anyone-actually-fulfilled-with?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/is-anyone-actually-fulfilled-with/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/is-anyone-actually-fulfilled-with/comments"><span>Leave a comment</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</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_!7864!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7864!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!7864!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!7864!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!7864!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!7864!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!7864!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!7864!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!7864!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!7864!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd9e8d7f-1d0b-4d79-a384-bf84f5892e3e_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[When A Developer Misses The Deadline, Who Owns It?]]></title><description><![CDATA[Dev Leader Weekly 155]]></description><link>https://weekly.devleader.ca/p/when-a-developer-misses-the-deadline</link><guid isPermaLink="false">https://weekly.devleader.ca/p/when-a-developer-misses-the-deadline</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Sat, 29 Aug 2026 19:46:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!n7ny!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/08/29/when-a-developer-misses-the-deadline-who-owns-it-dev-leader-weekly-155" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n7ny!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!n7ny!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!n7ny!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!n7ny!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n7ny!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:91034,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/08/29/when-a-developer-misses-the-deadline-who-owns-it-dev-leader-weekly-155&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/213321721?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n7ny!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!n7ny!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!n7ny!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!n7ny!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb492eb76-1b47-4594-bdfe-9ea6ba54ae7c_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>A missed date is not a PIP</p></li><li><p>Ownership means finding the next move</p></li><li><p>Manager accountability covers people and outcomes</p></li><li><p>No livestream... I am on vacation!</p></li></ul><div><hr></div><h2><strong>When A Developer Misses The Deadline, Who Owns It?</strong></h2><p>A question came up in the comments about what happens when an engineer does not deliver a project on time.</p><p>Does the developer get put on a performance improvement plan? If the manager cannot get the developer back on track, does the manager get put on one too?</p><p>It is a fair question, but it starts from a framing that I think is too simple. <strong>A project slipping does not automatically mean somebody failed at their job.</strong> Real projects have dependencies, changing constraints, technical surprises, and decisions that turn out differently than expected.</p><p>The more useful question is this: When the plan stops working, who takes ownership of figuring out what happens next?</p><p>You can <strong><a href="https://www.youtube.com/watch?v=fNQSIKwK8gc">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-fNQSIKwK8gc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;fNQSIKwK8gc&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/fNQSIKwK8gc?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><h2><strong>A Missed Milestone Is Not An Automatic PIP</strong></h2><p>Let&#8217;s start with the most important distinction.</p><p>A performance improvement plan is not supposed to be the automatic consequence of one missed milestone. A project can slip for all kinds of reasons:</p><ul><li><p>Another team misses a dependency</p></li><li><p>An external vendor falls behind</p></li><li><p>The original technical approach does not work</p></li><li><p>The scope was larger than anyone understood</p></li><li><p>A higher-priority incident interrupts the plan</p></li><li><p>The date was unrealistic from the beginning</p></li></ul><p>None of those automatically means the engineer assigned to the project is performing poorly.</p><p>There is a difference between <strong>the outcome being off track</strong> and <strong>the person refusing or failing to engage with the problem</strong>. That distinction matters. I have written about <strong><a href="https://www.devleader.ca/2026/07/18/when-should-you-tell-your-manager-a-developer-is-struggling-dev-leader-weekly-149?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-155">when a struggling developer should be raised with their manager</a></strong>, and the same principle applies here: early communication creates room for coaching and correction. Silence removes options.</p><p>If you miss a date because a dependency moved, that is one problem. If you knew the dependency moved, said nothing, explored no alternatives, and let everyone discover the delay at the deadline, that is a different problem.</p><h2><strong>Ownership Starts When The Plan Breaks</strong></h2><p>When I talk about accountability, I am not saying that you must personally control every variable. You cannot.</p><p>What you can control is how you respond.</p><p>If the project is slipping, ownership means communicating that clearly. It means looking for alternatives instead of sitting back and hoping the problem fixes itself.</p><p>Maybe the date can move. Maybe the scope can shrink. Maybe there is a temporary implementation that meets the immediate need. Maybe your team can help the dependency team finish its work. Maybe you need to abandon the original design and choose something that is available now.</p><p><em><strong>Actionable Tip</strong></em>: When you raise a delivery risk, bring the clearest options you have.</p><ul><li><p>What changed?</p></li><li><p>What does it affect?</p></li><li><p>What can still be delivered?</p></li><li><p>What tradeoffs could protect the date?</p></li><li><p>Who needs to make the decision?</p></li></ul><p>You do not need to have every answer before speaking up. But &#8220;the project is late&#8221; is much less useful than &#8220;the project is at risk, here is why, and here are the three paths I see.&#8221;</p><p>This is where <strong><a href="https://www.devleader.ca/2024/10/12/radical-accountability-vs-blame-culture-dev-leader-weekly-65?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-155">radical accountability differs from a blame culture</a></strong>. Accountability is about improving the situation. Blame is about finding the person who should absorb the discomfort.</p><p>Those are not the same thing.</p><h2><strong>Managers Own More Than Individual Performance</strong></h2><p>As an engineering manager, one of the most important parts of my job is helping people do their best work and grow in their careers.</p><p>But that is not my entire job.</p><p>I am also responsible for the charters of my teams. I currently have three sub-teams working in different areas of a routing plane for Microsoft 365. Those teams have different focus areas, including firewall technology, but they contribute to a larger mission.</p><p>If everyone is happy, growing, and producing excellent work that has nothing to do with our charter, I am still failing in my role.</p><p>On the other hand, if we deliver everything by grinding people down, ignoring their careers, and treating them like interchangeable output machines, I am also failing.</p><p><strong>The job requires both.</strong> I need to support the people and help the organization get the outcomes those teams exist to produce. That balance is part of <strong><a href="https://www.devleader.ca/2021/05/05/engineering-manager-whats-expected-in-the-role?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-155">what is expected from an engineering manager</a></strong>.</p><p>So when a project slips, I cannot point at the engineer and say, &#8220;That was their project.&#8221; I might not be the person writing the code or coordinating every dependency, but I am accountable for whether the team has the clarity, support, coaching, and escalation paths needed to move forward.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Accountability Bubbles Up The Organization</strong></h2><p>This does not stop at the engineering manager.</p><p>If I repeatedly ignore my team&#8217;s charter, miss important outcomes, or fail to coach people who need support, my manager should notice. If that continues for months and nobody addresses it, accountability moves another level up.</p><p>Every layer has expectations of the layer below it.</p><p>That does not mean every missed delivery triggers a chain of performance plans. It means leaders should be able to explain what they own, how they know whether it is healthy, and what they are doing when it is not.</p><p>This is why <strong><a href="https://www.devleader.ca/2026/05/04/measuring-manager-effectiveness-can-you-even-quantify-it-dev-leader-weekly-138?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-155">measuring manager effectiveness</a></strong> is so difficult. You cannot reduce the role to one number. Technical direction, delivery, hiring, coaching, team health, and stakeholder trust all matter.</p><p>A manager might be strong at supporting people but weak at connecting their work to the team&#8217;s charter. Another might drive delivery while leaving a trail of burned-out engineers. Neither extreme is what I would call effective management.</p><h2><strong>Coaching Is Part Of The Manager&#8217;s Deliverable</strong></h2><p>The original question also called out hiring and coaching. Yes, managers should be accountable for both.</p><p>If I repeatedly make poor hiring decisions, someone should ask whether I need help improving how I assess candidates. If an employee needs performance support and I neglect them, that is not the employee&#8217;s failure alone. Coaching and mentoring are part of my job.</p><p>That does not mean every unsuccessful performance plan proves the manager failed. Sometimes a manager can provide clear expectations, frequent feedback, practical support, and reasonable opportunities to improve, and the employee still does not meet the role&#8217;s requirements.</p><p>The accountability is in doing the work properly.</p><p><em><strong>Actionable Tip</strong></em>: If you manage people, do not wait for a formal process before providing useful feedback.</p><p>Use regular conversations to make expectations visible. Talk about what is going well, what needs to change, and what support would help. <strong><a href="https://www.devleader.ca/2015/04/21/one-on-one-evolution?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-155">Effective one-on-ones should evolve around the person and the situation</a></strong>, not become a calendar ritual where neither person says anything meaningful.</p><p>If a formal performance process becomes necessary, it should not be the first time the employee hears that there is a problem.</p><h2><strong>Ask What Each Person Did Next</strong></h2><p>When something goes wrong, I would avoid jumping immediately to, &#8220;Who gets put on a PIP?&#8221;</p><p>Instead, ask:</p><ul><li><p>When did the risk become visible?</p></li><li><p>Who communicated it?</p></li><li><p>What alternatives were explored?</p></li><li><p>What support did the engineer request?</p></li><li><p>What coaching did the manager provide?</p></li><li><p>What decisions did stakeholders make?</p></li><li><p>Did this happen once, or is it a repeated pattern?</p></li></ul><p>Those questions give you a much better picture of accountability than the missed date by itself.</p><p>Projects will slip. Dependencies will fail. Estimates will be wrong. That is software engineering in the real world.</p><p><strong>Ownership is not pretending you can prevent every problem. Ownership is refusing to become passive when the problem appears.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/when-a-developer-misses-the-deadline?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/when-a-developer-misses-the-deadline?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/when-a-developer-misses-the-deadline/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/when-a-developer-misses-the-deadline/comments"><span>Leave a comment</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</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_!rslT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rslT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!rslT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!rslT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!rslT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!rslT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!rslT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!rslT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!rslT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!rslT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1298d49-99f5-4e53-ae92-a9664024785a_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[AI Can Write The Code -- What Part Do You Keep?]]></title><description><![CDATA[Dev Leader Weekly 154]]></description><link>https://weekly.devleader.ca/p/ai-can-write-the-code-what-part-do</link><guid isPermaLink="false">https://weekly.devleader.ca/p/ai-can-write-the-code-what-part-do</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 24 Aug 2026 04:26:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1rhF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/08/22/ai-can-write-the-code-what-part-do-you-keep-dev-leader-weekly-154" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1rhF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!1rhF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!1rhF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!1rhF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1rhF!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:64842,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/08/22/ai-can-write-the-code-what-part-do-you-keep-dev-leader-weekly-154&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/212498928?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1rhF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!1rhF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!1rhF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!1rhF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1662cc4-f439-4609-8d1f-f0346ca267b4_1200x630.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>AI changes the work, not your interests</p></li><li><p>Keep the parts that energize you</p></li><li><p>Offload friction without surrendering judgment</p></li><li><p><strong><a href="https://youtube.com/live/Pso8NVT5fvY?feature=share">Join me for the live stream (or watch the recording) on Monday, August 24 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-Pso8NVT5fvY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Pso8NVT5fvY&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/Pso8NVT5fvY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>AI Can Write The Code -- What Part Do You Keep?</strong></h2><p>There is a version of the AI conversation that is mostly about fear: Are software engineers getting replaced? The question that caught my attention from the ExperiencedDevs subreddit was different.</p><p>This developer was not primarily worried about losing their job. They were worried about losing the part of software development that made them care in the first place.</p><p>They can hand increasingly complex work to an LLM and get something useful back. That&#8217;s impressive, but it also leaves them wondering where <em>they</em> fit into the process. The building, the problem-solving, and the feeling of making something are starting to feel different.</p><p>I&#8217;ve talked before about how <strong><a href="https://www.devleader.ca/2026/04/27/ai-career-fears-are-evolving-heres-what-im-hearing-dev-leader-weekly-137?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-154">AI career fears are evolving</a></strong>, but this is not just another replacement-anxiety discussion. This is about engagement. If AI can perform more of the work, <strong>what part of the work do you actually want to keep?</strong></p><p>You can <strong><a href="https://www.youtube.com/watch?v=16fUSxdci2k">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-16fUSxdci2k" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;16fUSxdci2k&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/16fUSxdci2k?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><h2><strong>I Would Start With Questions, Not A Prescription</strong></h2><p>If I were talking directly to this person, I would not jump straight to, &#8220;Here&#8217;s the best AI stack,&#8221; or, &#8220;Here&#8217;s the correct way to stay motivated.&#8221;</p><p>I would ask questions.</p><ul><li><p>What part of software development used to pull you in?</p></li><li><p>Was it exploring a hard problem before the solution was obvious?</p></li><li><p>Was it designing the system?</p></li><li><p>Was it writing the implementation yourself?</p></li><li><p>Was it learning an unfamiliar technology?</p></li><li><p>Was it simply seeing an idea come to life?</p></li></ul><p>Those answers matter because two developers can do the same job and love completely different parts of it.</p><p>I&#8217;ve had people tell me they genuinely enjoy working in legacy codebases. They like the constraints. They like figuring out how to move one piece without breaking five others. Someone else might look at the same situation, read about <strong><a href="https://www.devleader.ca/2023/12/20/dealing-with-legacy-code-how-to-make-anything-more-testable?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-154">dealing with legacy code</a></strong>, and think, &#8220;Please let the AI handle all of this.&#8221;</p><p>Neither person is wrong. They are motivated by different challenges.</p><h2><strong>The Industry Is Optimizing For Throughput</strong></h2><p>My own experience with AI coding tools has changed quickly. Not that long ago, I could hand over a non-trivial feature and the result was somewhere between, &#8220;Cool, that worked,&#8221; and, &#8220;I just created more work for myself.&#8221;</p><p>There were tasks I would not even bother delegating because I expected the back-and-forth to cost more than doing the work myself.</p><p>That line keeps moving.</p><p>The models are more capable. The tools around them are better. Skills, instruction files, custom agents, and stronger development harnesses let us provide useful context without manually writing a 400-page specification for every task.</p><p>I do not think &#8220;one-shot everything&#8221; is a useful goal by itself. I also do not think the future of software development is engineers spending all day writing absurdly detailed specs. But the direction seems clear: <strong>AI is taking on more ambiguous work with less explicit supervision.</strong></p><p>That means organizations will keep looking at throughput. If one person can move several workstreams forward with AI while another person insists on manually completing every step, there may be pressure on the second person to change.</p><p>That is not a moral judgment. It is a constraint worth acknowledging.</p><p>I&#8217;ve shared some of my <strong><a href="https://www.devleader.ca/2026/07/29/github-copilot-cli-for-net-developers-real-workflows-on-a-c-codebase?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-154">real GitHub Copilot CLI workflows on a C# codebase</a></strong>, and the benefit is not that I can avoid thinking. The benefit is that I can spend more of my thinking time where it has the most value.</p><h2><strong>Find The Zoom Level You Actually Enjoy</strong></h2><p>I think about software development at different &#8220;zoom&#8221; levels. It&#8217;s actually something I apply when thinking about codebases, system architecture, workflows... and even careers!</p><p>At one level, you care about the exact loop, condition, and method. Zoom out, and you care about how the classes collaborate. Zoom out again, and you care about service boundaries, data movement, and the shape of the system.</p><p>Some people love the implementation details. Some love the architecture. Some love experimenting in the problem space before any architecture exists.</p><p>For the developer who raised this question on the original Reddit post, it sounded like the early problem-solving pass might be the part they want to preserve. They want to explore the difficult problem themselves and bring in AI afterward.</p><p>That can be a completely reasonable operating model. The important part is understanding the tradeoff. If that early pass becomes the bottleneck while everything around you is optimized for throughput, you may need to adjust how much of it you keep, how long you spend there, or what you hand off afterward.</p><p><em><strong>Actionable Tip:</strong></em> For one week, keep two short lists:</p><ul><li><p>Work that gave you energy</p></li><li><p>Work that drained your energy</p></li></ul><p>Do not write broad labels like &#8220;coding&#8221; or &#8220;meetings.&#8221; Be specific. Was it shaping an API? Untangling a production issue? Writing repetitive mapping code? Reviewing a design? Learning a new domain?</p><p>Patterns will show up. That kind of reflection matters well beyond AI, and it is part of <strong><a href="https://www.devleader.ca/2026/06/01/adhd-burnout-and-building-a-career-that-fits-your-wiring-dev-leader-weekly-142?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-154">building a career that fits how you are wired</a></strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Let AI Take The Friction</strong></h2><p>Once you know what you want to keep, look at the rest of the work.</p><p>Maybe you hate writing boilerplate. Maybe tests, observability, or security reviews are the tasks you procrastinate on. Maybe you love designing a feature but lose all momentum when the implementation becomes repetitive.</p><p>AI can help with those parts, but &#8220;give it to AI&#8221; is not the same as &#8220;stop being responsible for it.&#8221;</p><p>If I want an LLM to handle work that I do not enjoy, I still need to set it up to succeed:</p><ol><li><p>Explain the outcome, not just the task label.</p></li><li><p>Provide the constraints and relevant context.</p></li><li><p>Define how the result will be checked.</p></li><li><p>Review high-risk decisions instead of trusting plausible output.</p></li></ol><p>Otherwise, I have not removed the frustrating work. I have replaced it with babysitting an agent that keeps producing the wrong thing.</p><p>The goal is not to surrender judgment. The goal is to reduce the mechanical effort around the judgment.</p><h2><strong>What I Actually Love About Building Software</strong></h2><p>This thought exercise made me look at my own patterns.</p><p>Historically, I have loved building frameworks and reusable systems. Many many moons ago, I built UI framework experiments in XNA and Unity. I have spent time creating ridiculously overcomplicated libraries that almost nobody would use, sometimes including me.</p><p>Why? Because exploring the shape of those systems was fun.</p><p>The same pattern shows up in things like <strong><a href="https://brandghost.ai/">BrandGhost</a></strong> and Needlr. BrandGhost started because I needed a tool as a content creator and wanted to build it. Needlr grew out of the way I liked structuring C# applications. Both gave me a chance to take an idea, shape it, and watch it become real.</p><p>That is the key for me: <strong>I like seeing ideas come to life.</strong></p><p>I care about technical direction. I care about architecture. I care about patterns that will create headaches if they spread across a codebase. I do not feel emotionally attached to writing every <code>if</code> statement or choosing between a <code>for</code> loop and a <code>while</code> loop.</p><p>For a long time, writing all of that code was simply the price of admission.</p><p>There was also an almost inevitable point in some side projects where the design ballooned, I realized I needed to undo earlier decisions, and the recovery work felt bigger than the fun part. Historically, that could be where I abandoned the project.</p><p>AI changes that balance. It can help me refactor, recover, and fill in the mechanical pieces while I stay involved in the direction. That&#8217;s a big reason <strong><a href="https://www.devleader.ca/2026/08/01/why-i-still-build-side-projects-and-what-im-building-next-dev-leader-weekly-151?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-154">I still build side projects</a></strong>. I can explore more ideas without every idea demanding the same amount of manual implementation.</p><h2><strong>AI Can Expand Your Range</strong></h2><p>There is another benefit here: AI can help you move into areas where you do not have deep experience.</p><p>I had an agent put together front-end work for a private dashboard. I could inspect whether the behavior made sense. I could check whether the tests exercised real code instead of a fake system under test. But I did not have years of front-end experience that let me confidently debate every pattern in the implementation.</p><p>Without AI, I might have needed to learn an entire stack just to build a dashboard I needed. Blazor has often been useful to me for a similar reason: I can bring my C# experience into web UI work. AI gives me another way to cross that gap.</p><p>That does not instantly make me a front-end expert. It lets me produce something useful while being honest about where my judgment is strong and where I need more help.</p><p>The same applies to learning. I love the feeling of having learned something, but I am often uncomfortable at the beginning of a new challenge. AI can launch research in parallel, summarize a domain, and give me enough footing to start asking better questions.</p><p>It lowers the barrier. I still have to engage with the result.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Build A Personal Operating Model</strong></h2><p>There is no universal percentage of software development that you should keep for yourself.</p><p>Instead, build an operating model that reflects your interests, your role, and the risk of the work:</p><ul><li><p><strong>Keep</strong> the work that gives you energy and develops judgment you want to retain.</p></li><li><p><strong>Co-pilot</strong> the work you enjoy but can accelerate with feedback or parallel exploration.</p></li><li><p><strong>Delegate</strong> mechanical work where you can define a clear outcome and verify it.</p></li><li><p><strong>Review</strong> decisions involving architecture, security, data, and other expensive failure modes.</p></li></ul><p>Then revisit the model. AI capabilities will change. Your role will change. The parts you enjoy may change too.</p><p><em><strong>Actionable Tip:</strong></em> Pick one task you routinely dislike and improve the handoff to AI. Add the context, examples, constraints, and checks it was missing. Do not expand this to everything at once. Prove that the handoff actually saves time before you depend on it.</p><h2><strong>Humans Are Still In The Picture</strong></h2><p>I am not convinced the destination is, &#8220;People disappear and AI builds everything.&#8221;</p><p>My expectation is that people become much more amplified by AI and whatever tooling grows around it. I do not have a crystal ball, and I am not going to pretend that I know exactly how every software role changes.</p><p>But even in my own projects, the valuable part is not just code appearing faster. It is being able to explore more directions, recover from mistakes that previously killed momentum, and focus my attention on the parts where I have something meaningful to contribute.</p><p>That still requires a person deciding what should exist, what good looks like, and which tradeoffs are acceptable.</p><h2><strong>Wrapping Up</strong></h2><p>If AI could take over one part of your software development work tomorrow, what would you be relieved to lose?</p><p>Now flip it around: <strong>what part would you genuinely miss?</strong></p><p>That second answer is the important one. It tells you where your interest lives. Keep enough of that work to stay engaged, get better at it because you care, and use AI to reduce the friction around it.</p><p>You do not need to reject AI to preserve what you love about software development. You need to be deliberate about where you fit into the process.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/ai-can-write-the-code-what-part-do?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/ai-can-write-the-code-what-part-do?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/ai-can-write-the-code-what-part-do/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/ai-can-write-the-code-what-part-do/comments"><span>Leave a comment</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u0zc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!u0zc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!u0zc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!u0zc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!u0zc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!u0zc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!u0zc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!u0zc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!u0zc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F372722d2-9477-487f-b91c-ce1f14cce0fe_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[GPT-5.6 Sol Impressed Me -- Then It Wouldn't Stop]]></title><description><![CDATA[Dev Leader Weekly 153]]></description><link>https://weekly.devleader.ca/p/gpt-56-sol-impressed-me-then-it-wouldnt</link><guid isPermaLink="false">https://weekly.devleader.ca/p/gpt-56-sol-impressed-me-then-it-wouldnt</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 17 Aug 2026 16:47:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yrT2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/08/15/gpt56-sol-impressed-me-then-it-wouldnt-stop-dev-leader-weekly-153" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yrT2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!yrT2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!yrT2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!yrT2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yrT2!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:46588,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/08/15/gpt56-sol-impressed-me-then-it-wouldnt-stop-dev-leader-weekly-153&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/211586295?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yrT2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!yrT2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!yrT2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!yrT2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8a4645c-cc8d-43d0-95d2-6b1e264047fd_1200x630.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Better code does not guarantee efficiency</p></li><li><p>Review loops need stopping conditions</p></li><li><p>Scope control still belongs to you</p></li><li><p>YouTube would not let me schedule a stream so... no stream &#128550;</p></li></ul><div><hr></div><h2><strong>GPT-5.6 Sol Impressed Me -- Then It Wouldn&#8217;t Stop</strong></h2><p>One of the weirdest parts of using a stronger coding model is that the failures can start looking useful.</p><p>I had been using the Opus models pretty heavily, especially because the large context window was genuinely impressive. Then I switched back to a GPT model with GPT-5.6 Sol, and my first reaction was basically: <strong>holy crap, this thing is good</strong>.</p><p>I have written before about how <strong><a href="https://www.devleader.ca/2026/03/29/multimodel-support-in-github-copilot-sdk-gpt5-vs-claude-in-c?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-153">different models can change the shape of a Copilot workflow</a></strong>. This was one of the clearest examples I have felt in practice. Sol was not just producing code I liked. It was noticing things around the requested work that other models had missed.</p><p>That sounds great, right?</p><p>It was. Mostly.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=OYv-erYqVoM">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-OYv-erYqVoM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;OYv-erYqVoM&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/OYv-erYqVoM?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><h2><strong>Going Off The Rails Can Still Produce Gold</strong></h2><p>I was trying to explain model differences to my wife, who uses ChatGPT but does not spend her time comparing coding models like some of us do.</p><p>The example I gave her was scope drift.</p><p>You ask a coding model to change one thing. Then you review the diff and discover that it touched files you never mentioned. With some models, I have looked at those changes and thought, &#8220;What were you even doing over here?&#8221; The answer is usually some version of: yeah, that was unnecessary.</p><p>My early experience with Sol was different.</p><p>It touched unrelated tests, but the tests were actually wrong. It found behavior that technically passed the existing test while still being incorrect. It caught bugs in test code and bugs in underlying features that were outside the narrow task I had assigned.</p><p>That is a pretty incredible feeling. The model appears to wander, you prepare yourself for cleanup, and then you realize it found something real.</p><p>But there is an important distinction here: <strong>useful scope drift is still scope drift</strong>.</p><p>When I am using <strong><a href="https://www.devleader.ca/2026/07/29/github-copilot-cli-for-net-developers-real-workflows-on-a-c-codebase?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-153">GitHub Copilot CLI on a real C# codebase</a></strong>, I need to understand what changed, why it changed, and whether that extra work belongs in the same delivery. Finding a bug is valuable. Quietly folding every discovered bug into one feature is not automatically the right move.</p><h2><strong>A Better Result Can Still Be A Bad Workflow</strong></h2><p>This is where my opinion became more divided.</p><p>I noticed some Copilot sessions taking a <strong>really long time</strong>. Work that I expected to take maybe thirty minutes would keep going for several hours. I would check the session assuming something had broken in the harness or a sub-agent had died.</p><p>Instead, it was still working.</p><p>It had run a review. Then it was fixing review findings. Then it was reviewing the fixes. Then another perspective found something else. On one feature, I saw the pull request appear after roughly five hours of agent work, even though the feature itself was not a monumental coding effort.</p><p>Was the output good? Often, yes.</p><p>Was five hours the right tradeoff? I am not convinced.</p><p>We talk a lot about model quality, but delivery has more dimensions than whether the final code passes tests:</p><ul><li><p>How long did the work take?</p></li><li><p>How much unrelated code changed?</p></li><li><p>How expensive was the review loop?</p></li><li><p>How much attention did I need to spend supervising it?</p></li><li><p>Could we have shipped the intended scope much earlier?</p></li></ul><p>A model can produce better code and still create a worse overall workflow if nobody tells it when to stop.</p><h2><strong>The Review Loop Can Convince Itself</strong></h2><p>I like review agents. I like rubber-duck agents. I like asking for another perspective before I trust a change.</p><p>I also think they can create a nasty feedback loop.</p><p>AI is extremely good at sounding confident. Most of us have read an answer and thought, &#8220;That sounds believable,&#8221; even when we did not have the evidence to prove it. The same thing can happen between agents. A reviewer confidently proposes another improvement, the primary agent accepts the premise, and suddenly the task has a whole new branch of work.</p><p>This is not an argument against <strong><a href="https://www.devleader.ca/2026/07/23/github-copilot-cli-custom-agents-and-skills?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-153">custom agents and skills in Copilot CLI</a></strong>. I use them constantly. It is an argument for making their boundaries explicit.</p><p>One of my sessions started with a few changes to an evaluation harness. When I checked it later, the agent was hand-writing a custom Markdown parser.</p><p>What?</p><p>That was the software equivalent of walking into your house and finding animals casually having a conversation in the living room. Nobody is acting like anything is wrong, but you know this is absolutely not where the evening was supposed to go.</p><p>The parser was not the assignment. The agent had reasoned its way into creating more work, and every additional change gave the next review pass more surface area to inspect.</p><p><strong>Better review is not infinite review.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Prototype Mode And Hardening Mode Need Different Contracts</strong></h2><p>When I am building something, I am usually operating in one of two modes.</p><p>The first is prototyping. I want to know whether an idea is feasible. Can I connect these pieces? Does this service do what I need? Is the core experience even possible? The code may be throwaway, and that is fine.</p><p>The second is hardening. The feasibility question is already answered. Now I need regression tests, repeatable behavior, operational reliability, and confidence that I can keep changing the system without breaking it.</p><p>Those modes need different instructions.</p><p>If I am prototyping, an agent that spends hours polishing abstractions has missed the point. If I am hardening, an agent that proves the happy path once and declares victory has also missed the point.</p><p><em><strong>Actionable Tip</strong></em>: tell the agent which mode it is in before describing the task.</p><p>For a prototype, define the question you need answered and explicitly deprioritize polish. For hardening work, name the behaviors that need regression coverage and define which adjacent changes are allowed. If the agent discovers something outside that boundary, have it report the finding instead of automatically implementing it.</p><p>That one distinction can prevent a lot of &#8220;How did we end up building this?&#8221; moments.</p><h2><strong>A Million Tokens Does Not Remove Context Management</strong></h2><p>The other issue I have seen is around the context window.</p><p>GPT-5.6 Sol gives me a huge amount of context to work with, but in some longer Copilot sessions I have still hit a point where the session effectively stops making progress. In my case, this has happened with plenty of context apparently remaining, often somewhere around the final quarter to third of the window.</p><p>The frustrating part is that compaction can fail at exactly the moment I need it.</p><p>The workaround that helped me during this time was restarting the Copilot process for the same session with <code>/restart</code>, then running <code>/compact</code>. That has let the work continue, but it is not behavior I have seen in quite the same way with other models.</p><p>Is that the model? The harness? The interaction between them? I had <strong>no idea</strong> -- but I do know that it was a pain in the butt.</p><p>That uncertainty matters. I am describing what I have observed in my sessions, not declaring a universal GPT-5.6 Sol limitation. And for what it&#8217;s worth, Copilot CLI seemed to have been patched for this since I initially was ranting about it on Code Commute.</p><p>The broader lesson still holds: <strong><a href="https://www.devleader.ca/2026/03/21/managing-sessions-and-context-in-github-copilot-sdk-for-c-patterns-and-best-practices?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-153">session and context management remain part of agentic development</a></strong>. A larger context window delays some problems. It does not eliminate the need for checkpoints, compaction, and clean task boundaries.</p><h2><strong>What I Am Changing In My Workflow</strong></h2><p>I am still impressed with the model. I am not switching away because a few sessions ran too long.</p><p>But I am changing how I supervise the work.</p><p><em><strong>Actionable Tip</strong></em>: give every agentic task a scope budget and a stopping rule.</p><p>Here is what that looks like for me:</p><ol><li><p><strong>Define the delivery boundary.</strong> Name the behavior, files, or subsystem that belongs in the task.</p></li><li><p><strong>Separate discoveries from implementation.</strong> If the agent finds an unrelated bug, capture it unless it blocks the requested change.</p></li><li><p><strong>Bound review loops.</strong> One useful review pass is not permission to keep reopening the design forever.</p></li><li><p><strong>Create checkpoints.</strong> Ask for a status summary before a long-running session disappears into another branch of work.</p></li><li><p><strong>Watch elapsed time.</strong> If a modest feature is still running hours later, inspect the current plan instead of assuming more time means more quality.</p></li></ol><p>Permissions and tool restrictions are still important, and I have a full breakdown of <strong><a href="https://www.devleader.ca/2026/07/21/the-github-copilot-cli-permission-model-what-it-can-and-cant-touch?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-153">what Copilot CLI can and cannot touch</a></strong>. But permissions only answer whether an agent <em>can</em> do something. They do not answer whether that work belongs in the current task.</p><p>That part still belongs to us.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>The Model Can Be Impressive And Still Need Supervision</strong></h2><p>My first impression of GPT-5.6 Sol is still extremely positive.</p><p>It caught real problems that I did not ask it to find. It handled code with a level of awareness that surprised me. It made &#8220;going off the rails&#8221; look productive, which is not something I expected to say.</p><p>At the same time, I have watched it spend hours following review loops, expand a small task into a custom parser, and hit context problems before I expected them.</p><p>Both things can be true.</p><p>The model can be excellent, and the workflow around it can still need tuning. The output can be correct, and the process can still be too slow. The extra finding can be valuable, and it can still belong in a separate issue.</p><p>I do not want an agent that blindly stops the second it notices something outside the prompt. That would throw away one of the most valuable parts of a strong model. I want an agent that notices the problem, explains it, and lets the delivery boundary remain intentional.</p><p>That is the balance I am working toward: <strong>more capability without surrendering scope control</strong>.</p><p>If you are using GPT-5.6 Sol or another model for long-running coding work, pay attention to more than the final diff. Watch the route it took to get there. That is where the real workflow problems tend to show up.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/gpt-56-sol-impressed-me-then-it-wouldnt?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/gpt-56-sol-impressed-me-then-it-wouldnt?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/gpt-56-sol-impressed-me-then-it-wouldnt/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/gpt-56-sol-impressed-me-then-it-wouldnt/comments"><span>Leave a comment</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BS18!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!BS18!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!BS18!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!BS18!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!BS18!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!BS18!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!BS18!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!BS18!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!BS18!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcd78f90-6eff-4385-aa6e-4bd39a88a4e1_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[What Comes After Senior Software Engineer?]]></title><description><![CDATA[Dev Leader Weekly 152]]></description><link>https://weekly.devleader.ca/p/what-comes-after-senior-software</link><guid isPermaLink="false">https://weekly.devleader.ca/p/what-comes-after-senior-software</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 10 Aug 2026 04:24:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r_RF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/08/09/what-comes-after-senior-software-engineer-dev-leader-weekly-152" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r_RF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!r_RF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!r_RF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!r_RF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r_RF!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:85994,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/08/09/what-comes-after-senior-software-engineer-dev-leader-weekly-152&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/210554504?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r_RF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!r_RF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!r_RF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!r_RF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb487bd-8d90-4e5f-bd12-fdbd9372b09a_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Senior is a successful career destination</p></li><li><p>Higher levels require broader organizational scope</p></li><li><p>Career progression is not a straight line</p></li><li><p><strong><a href="https://youtube.com/live/NYYq9yVMJfE?feature=share">Join me for the live stream (or watch the recording) on Monday, August 10 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-NYYq9yVMJfE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;NYYq9yVMJfE&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/NYYq9yVMJfE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>What Comes After Senior Software Engineer?</strong></h2><p>Have you ever looked at a software engineering career ladder and wondered why everything seems to move reasonably well until senior, and then suddenly the next step feels like a wall?</p><p>You&#8217;re not imagining that shift.</p><p>I have talked before about <strong><a href="https://www.devleader.ca/2025/07/05/why-youre-stuck-at-senior-software-engineer-dev-leader-weekly-101?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-152">why engineers can feel stuck at senior</a></strong>, but I want to approach this from a slightly different angle. Sometimes the friction is about your growth, your manager, or unclear expectations. But sometimes the ladder itself genuinely changes shape after senior.</p><p>That does <strong>not</strong> mean you failed. It does not mean your company wants to hold you back. And despite how easy it is to blame every weird career problem on AI right now, I do not think AI created this one.</p><p>So what is actually going on?</p><p>You can <strong><a href="https://www.youtube.com/watch?v=faV_vitlEbg">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-faV_vitlEbg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;faV_vitlEbg&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/faV_vitlEbg?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><h2><strong>The Ladder Changes Shape After Senior</strong></h2><p>The first complication is that software engineering titles are wildly inconsistent.</p><p>Junior, mid-level, and senior are common concepts, even if a company calls them Software Engineer I, Software Engineer II, SDE, SWE, or something else. Beyond senior? Things get messy fast.</p><p>One company might have staff, principal, senior principal, distinguished, fellow, or partner roles. Another company might skip staff entirely. A smaller company might have nothing beyond senior on the individual contributor track.</p><p>That was my experience before Microsoft. For most of my eight years there, the technical path was basically developer and senior developer. There was an architect role that never felt fully defined. Even as a technical manager, I eventually reached a point where there was no clearly established next role on that track.</p><p>Was I suddenly incapable of growing? Of course not. <strong>The organization simply had not created an endless sequence of titles.</strong></p><p>That distinction matters. We often treat a career ladder like a universal map, but it is really a model of what one organization needs.</p><h2><strong>Title Inflation Makes The Wall Feel Worse</strong></h2><p>I want to be careful here because I do not have data to prove this. Treat it as an observation from roughly fifteen years in the industry, not a measured fact.</p><p>I suspect the expected time between early-career promotions has compressed. Companies use titles as recruiting tools. Employees move between organizations more often. Managers feel pressure to show progression. People understandably compare their timelines with everyone announcing promotions online.</p><p>The result is an expectation that every step should arrive on roughly the same schedule -- or at least that there should be very concrete steps in a prescribed amount of time to get there.</p><p>But careers are not linear. Going from level one to level two in a year does not mean every future level should take one more year. Follow that math far enough and everyone becomes a CTO before the end of the decade. Clearly, that is not how organizations work.</p><p>The higher you go, the larger the expected scope usually becomes. There are fewer roles with that scope, fewer opportunities to demonstrate it, and fewer people the organization actually needs operating there.</p><p>That curve was always going to get steeper. Title inflation just makes the change feel more abrupt.</p><h2><strong>Senior Can Be The Destination</strong></h2><p>The phrase people often use is <strong>terminal level</strong>. I don&#8217;t love it. It sounds dark, like your career has arrived at a dead end.</p><p>That&#8217;s not what it means.</p><p>A terminal level is a stable point where someone can perform successfully for the rest of their career. For many software engineering organizations, that point is somewhere in the senior band.</p><p>Think about what that says about you. You are trusted to solve difficult problems. You can deliver high-quality work consistently. Teams depend on you. You can guide other engineers, handle ambiguity, and operate without someone spelling out every step.</p><p>That <em><strong>is</strong></em> a successful career.</p><p>It can also be a demanding one. I have written about how <strong><a href="https://www.devleader.ca/2025/12/06/senior-engineers-spend-less-time-coding-dev-leader-weekly-118?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-152">senior engineers often spend less time coding</a></strong> because their impact increasingly includes design, mentoring, coordination, and helping others move faster. Staying at senior does not mean staying static.</p><p>Your skills can deepen. Your influence can grow. Your compensation can improve. You can take on new domains and become the person everyone relies on without collecting another title every eighteen months.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Compensation And Promotion Are Related, Not Identical</strong></h2><p>This is usually where someone asks: &#8220;Okay, but what happens to my compensation if I am not getting promoted?&#8221;</p><p>Fair question.</p><p>The exact answer depends on the company, but promotion should not be the only mechanism for recognizing strong performance. Salary growth, bonuses, stock, expanded ownership, and other rewards can continue while you remain in the same level.</p><p>A promotion usually comes with a larger adjustment because the expectations changed. But that does not mean every strong review must end with a new title.</p><p>You can be performing extremely well at senior, receive above-target rewards, and still not be operating at the next level. Those signals overlap, but they are not identical.</p><p>That can actually be a healthy balance. Maybe you are kicking ass at senior, being paid fairly, doing meaningful work, and preserving room for your family or everything else outside work. There is nothing lesser about that choice.</p><h2><strong>Organizations Cannot Be Made Entirely Of Principal Engineers</strong></h2><p>Now we get to the structural part.</p><p>Imagine an organization where every engineer is principal, staff, distinguished, or whatever the top levels are called. It sounds amazing if you picture a video game team where everyone has max stats. If you could build an NBA 2K team of max-stat players, or your RPG party was all max level, that&#8217;s what you&#8217;d want -- right?</p><p>In practice, what work are all of those people doing?</p><p>The next level after senior usually expects broader impact across teams, products, or an organization. If you are actively targeting that path, I have a separate breakdown of <strong><a href="https://www.devleader.ca/2026/07/11/what-it-actually-takes-to-become-a-principal-engineer-dev-leader-weekly-148?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-152">what principal-level scope actually looks like</a></strong>. The important point here is that cross-organization work is not infinite -- at least not infinitely done in parallel with all the other cross-organization work.</p><p>A company needs people setting technical direction across teams. It also needs many more people turning that direction into reliable products, systems, and customer outcomes.</p><p>You do not need hundreds of engineers independently trying to lead company-wide initiatives. At some point, everyone collides with everyone else.</p><p>This is not an argument for gatekeeping. It is an explanation of why the number of roles naturally narrows. <strong>The organization needs a different distribution of scope at each level.</strong></p><h2><strong>Healthy Teams Need A Spread Of Experience</strong></h2><p>The same idea applies within a team.</p><p>You do not want a team made entirely of brand-new engineers because the coaching and operational overhead would overwhelm the few experienced people supporting them. But stacking a team entirely with the highest-level engineers does not make sense either.</p><p>A healthy team usually has a spread:</p><ul><li><p>Junior engineers building fundamentals and taking on well-scoped work</p></li><li><p>Mid-level engineers carrying a large share of independent delivery</p></li><li><p>Senior engineers handling complex work, mentoring, and creating leverage</p></li><li><p>A smaller number of staff or principal engineers working across broader boundaries</p></li></ul><p>That spread creates continuity. Junior engineers learn from people with more experience. Senior engineers develop coaching and delegation skills. The organization builds its next generation instead of hoping experienced hires appear forever.</p><p>This is where AI enters the conversation, but not as the cause of the senior-level wall. Companies deciding they no longer need junior engineers because AI can replace them are creating a different problem. I have shared my concerns about <strong><a href="https://www.devleader.ca/2025/06/07/are-junior-developers-in-big-trouble-with-ai-usage-dev-leader-weekly-97?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-152">junior developers relying on AI without building fundamentals</a></strong>, and cutting off the junior pipeline removes mentoring opportunities and future senior talent too.</p><p>The whole system needs continuity. You cannot keep only the top of the pyramid and expect it to replenish itself.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>What To Do When You Feel Stuck</strong></h2><p>Understanding the structure does not make vague promotion feedback any less frustrating.</p><p>If your manager keeps telling you, &#8220;Maybe next time,&#8221; while you spend another review cycle trying to prove yourself, you need more than encouragement. You need clarity.</p><p><em><strong>Actionable Tip</strong></em>: ask questions that separate your performance from the organization&#8217;s available opportunities:</p><ol><li><p><strong>What specific evidence is missing?</strong> Ask for observable examples, not &#8220;more impact.&#8221;</p></li><li><p><strong>Am I consistently operating at the next level?</strong> A strong year at your current level is not automatically the same thing.</p></li><li><p><strong>Does this team have work with the required scope?</strong> You cannot demonstrate cross-team leadership if every meaningful decision is already owned elsewhere.</p></li><li><p><strong>Is a role realistically available?</strong> Sometimes the organizational shape creates more back pressure than anyone wants to say directly.</p></li><li><p><strong>What would make the next review materially different?</strong> If nobody can answer, that is useful information.</p></li></ol><p>You may discover that you have real gaps to close. Great. Now you can work on something concrete.</p><p>You may discover that you are ready, but the organization has no room. That does not automatically mean you should leave, but it gives you an honest tradeoff to consider. An internal move or another company may offer the scope that your current team cannot.</p><p>And please protect your energy. There is a difference between stretching into bigger responsibility and running yourself into the ground chasing a label. My advice on <strong><a href="https://www.devleader.ca/2025/10/11/promotions-without-burnout-dev-leader-weekly-112?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-152">pursuing promotions without burning yourself out</a></strong> still applies here.</p><h2><strong>Your Title Is Not Your Entire Career</strong></h2><p>I understand why titles matter. They affect compensation, opportunity, how recruiters find you, and how many of us measure whether we are moving forward.</p><p>But the ladder cannot be the only scoreboard.</p><p>Senior software engineer is not a waiting room where you sit until your real career begins. It is a high-skill, high-trust role that many people work very hard to reach. If you stay there and continue doing excellent work, that is not failure.</p><p>If you want principal, staff, management, or another path, go after it with clear eyes. Learn what the role actually requires. Find out whether your organization has the right opportunities. Build the evidence. Decide whether the tradeoffs fit the life you want.</p><p><em><strong>Don&#8217;t let the absence of another title erase everything you have already accomplished.</strong></em></p><p>Careers are not straight lines. Organizations are not infinite ladders. And success is much bigger than the word printed beside your name.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/what-comes-after-senior-software?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/what-comes-after-senior-software?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/what-comes-after-senior-software/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/what-comes-after-senior-software/comments"><span>Leave a comment</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6ApY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!6ApY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!6ApY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!6ApY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!6ApY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!6ApY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!6ApY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!6ApY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!6ApY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea558fcd-c066-4d0b-967d-00777795bf0f_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[Why I Still Build Side Projects (And What I'm Building Next)]]></title><description><![CDATA[Dev Leader Weekly 151]]></description><link>https://weekly.devleader.ca/p/why-i-still-build-side-projects-and</link><guid isPermaLink="false">https://weekly.devleader.ca/p/why-i-still-build-side-projects-and</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 03 Aug 2026 05:52:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QlNB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/08/01/why-i-still-build-side-projects-and-what-im-building-next-dev-leader-weekly-151" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QlNB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!QlNB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!QlNB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!QlNB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QlNB!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:153252,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/08/01/why-i-still-build-side-projects-and-what-im-building-next-dev-leader-weekly-151&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/209587699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QlNB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!QlNB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!QlNB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!QlNB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4404c100-13d6-488b-81aa-7e038b80d3d8_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Build the thing for yourself first</p></li><li><p>A thin paid layer beats abandonment</p></li><li><p>Free tools are still worth shipping</p></li><li><p>No livestream this week. Sorry!</p></li></ul><div><hr></div><h2><strong>Why I Still Build Side Projects (And What I&#8217;m Building Next)</strong></h2><p>I&#8217;m twenty-plus years into programming and about fifteen years into my career, and I am still building side projects. That is not an accident, and it is not nostalgia. <strong>Building things is still the fastest way I learn</strong>, and it is still the advice I give to almost everyone who tells me their resume feels thin.</p><p>But something has shifted for me lately. I&#8217;ve gotten to the point where if I am going to sink my limited free time into building something, I should at least be open to the idea of charging a couple bucks for it. Not building a business. Not quitting my job. Just putting a very thin layer on the front of something I was going to build for myself anyway.</p><p>That small mental shift turns out to be a surprisingly good cure for the &#8220;ooh, shiny&#8221; problem that kills most side projects.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=K6TEjY_JR2I">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-K6TEjY_JR2I" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;K6TEjY_JR2I&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/K6TEjY_JR2I?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><h2><strong>Twenty Years In And I Am Still Building</strong></h2><p>Whenever someone tells me their resume feels weak -- they&#8217;re not employed yet, or they&#8217;re junior and applications keep going nowhere -- my answer is almost always the same. <strong>Go build something.</strong></p><p>It works for two reasons. The obvious one is that it gives you something concrete to talk about instead of a list of technologies you have &#8220;familiarity with.&#8221; The less obvious one, and honestly the more important one, is that building things is how you actually learn. Reading about a pattern and shipping something that depends on that pattern are completely different experiences.</p><p>I have written about this before in the context of <strong><a href="https://www.devleader.ca/2026/01/31/side-projects-and-soft-skills-in-interviews-dev-leader-weekly-125?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-151">why side projects and soft skills keep coming up in interviews</a></strong>, and I stand by all of it. But I want to be clear that this is not advice I give from a distance. I am still doing it.</p><p>Most of my side project time goes into <strong><a href="https://www.brandghost.ai/">BrandGhost</a></strong>, which is my main thing outside of work. It takes up enough of my attention that I have pushed other things aside for it -- including making <strong><a href="https://youtube.com/@devleader">videos on my main YouTube channel</a></strong> for a stretch. There are only so many hours, and something has to lose.</p><p>But there is always a pile of other stuff I want to poke at.</p><h2><strong>The Free Things I Have Already Shipped</strong></h2><p>Before I get into what I want to build, here is what is already out there for free, because some of you might actually find these useful.</p><p><strong>Needlr</strong> is a dependency injection and assembly-scanning library I put together. It is extremely opinionated. I am not planning to sell it, and I am not trying to convince anyone it&#8217;s the one true way. I build basically all of my C# stuff with plugin frameworks, and that pattern kept showing up over and over, so I extracted it. If you want to use it, great. If not, that&#8217;s completely fine. If you want to see the shape of it, I have walked through <strong><a href="https://www.devleader.ca/2026/02/15/plugin-architecture-with-needlr-in-net-building-modular-applications?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-151">building modular .NET applications with Needlr&#8217;s plugin architecture</a></strong>.</p><p><strong>Homebase</strong> came directly out of frustration. If you spend any time on social media, you have clicked a hundred &#8220;link in bio&#8221; links that drop you on a landing page full of other links. Linktree is one of the platforms that does this, and I was a paying customer for a while. Then I hit a problem where video previews were rendering as black thumbnails. There is no good reason a YouTube thumbnail should just fail to show up. I opened a support ticket, got the runaround for about a month, and eventually thought: I pay for this, and I could just build it myself.</p><p>So I did, in roughly a weekend. <strong><a href="https://www.devleader.ca/projects/homebase">Homebase is on GitHub</a></strong>, it is free, you can clone it or fork it, and it is optimized for SEO, AEO, and GEO. You can add product links and a bunch of other things. And if you&#8217;re wondering how to configure it -- you point Claude or Copilot at the repo, tell it where your stuff goes, and it handles the config files.</p><p><strong>A few MCP servers</strong> for Google Search Console, Google Keyword Planner, and Google Analytics. Google did not have official MCP servers for these, which still surprises me. Mine are vibe coded, and I believe I have versions in both C# and Go because I wanted to mess around. <strong><a href="https://www.devleader.ca/projects">They&#8217;re on my GitHub</a></strong>. I genuinely hope Google ships their own and makes mine obsolete. If you want to understand what is actually happening under the hood in one of these, I have a full walkthrough on <strong><a href="https://www.devleader.ca/2026/07/06/building-mcp-servers-and-clients-in-c-the-complete-guide?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-151">building MCP servers and clients in C#</a></strong>.</p><p>None of those are businesses. They&#8217;re scratch-your-own-itch projects that happened to be useful enough to publish.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>The Thin Paid Layer</strong></h2><p>Here is where my thinking has changed.</p><p>I have a problem that I suspect a lot of you share: I could go build this, or I could go build that, and then something shinier appears and I drift toward it. The half-finished graveyard is real. Most side projects don&#8217;t die because they were bad ideas -- they die because nothing forces them across the line from &#8220;sort of works on my machine&#8221; to &#8220;actually usable.&#8221;</p><p><strong>A thin paid layer is the forcing function.</strong></p><p>The idea is simple. Build the thing for yourself, because you actually want it. Get it to the point where you would use it. Then put a very thin layer on the front -- pay a couple bucks, here&#8217;s a license key, done. If people pay, awesome. If nobody pays, I still have the tool I wanted.</p><p>What I am explicitly <em>not</em> doing is turning every idea into a full-fledged business with a marketing site, a support org, and a roadmap. That is a completely different commitment and it is the thing that makes people avoid starting at all.</p><p><em><strong>Actionable Tip</strong></em>: pick the side project you have abandoned closest to &#8220;done.&#8221; Define the smallest version you would personally use every week. Ship that, and only that. Whether you put a paywall in front of it is secondary -- the point is having a definition of finished that isn&#8217;t &#8220;everything I imagined.&#8221;</p><h2><strong>What I Actually Want To Build Next</strong></h2><p>These are all deeply opinionated, and you might read them and think &#8220;why would anyone pay for that?&#8221; That&#8217;s kind of the point. I am building them for me.</p><p><strong>A modern MySQL Workbench with an LLM attached.</strong> Workbench is being retired, and from what I have read the plan is a lighter-weight experience inside VS Code. That&#8217;s neat, but personally I want the actual Workbench form factor -- just less dated. And the thing I really want is to give a read-only connection to an LLM and have it optimize queries with me. Connect with whatever access level you want (admin, write, read-only), poke at your data, and then have an agentic back-and-forth about query plans. I already do a version of this by giving Copilot read-only database access and letting it run <code>EXPLAIN</code> and look for optimizations. I just want it to be a real tool instead of a workflow I re-assemble every time.</p><p><strong>A personal finance planner built for two people.</strong> My wife and I keep separate accounts but operate with full transparency -- the only exception being gifts we&#8217;re trying to keep a surprise. If she asks what&#8217;s in my 401k, the answer is just the number. We treat that stuff as ours. So I want something that pulls in financial data read-only across accounts and gives us a shared view plus a shared agentic session. She has really taken to using ChatGPT, so the idea is being able to ask questions like &#8220;where is most of our spend going?&#8221; or &#8220;how do the investments look?&#8221; against a central brain that can actually see across everything. If I build it, it will be configurable -- bring your own provider, or run a local LLM if you would rather your financial data never leave the house. I have no idea what the right form factor is yet.</p><p><strong>A voice companion for GitHub.</strong> This is the one I&#8217;m poking at most actively. I feel like the GitHub app should do this and probably will eventually, but it doesn&#8217;t today. A big chunk of how I get work done now is creating issues and assigning them to agents. What I want is a push-to-talk companion -- the same interaction model you get in ChatGPT -- that lets me navigate all of that by voice. &#8220;What new issues came in today?&#8221; I have automation that scans BrandGhost error logs and files issues automatically, so there&#8217;s usually something. &#8220;Give me more detail on issue 123.&#8221; &#8220;Cool, assign that to an agent.&#8221; And then later: &#8220;Check in on that agent session -- did the PR land? Did it add proper tests?&#8221; The goal is being able to have that conversation without reading code. Maybe the answer isn&#8217;t even a dedicated app -- maybe it&#8217;s just wiring an existing assistant to my repositories through an MCP server. I need to play with it. If it does end up being a mobile app, it goes on the app stores.</p><p><strong>A photo recovery tool.</strong> I used to work in digital forensics, and I spent about a decade building tools for exactly this. Since leaving, people still occasionally come to me with &#8220;I think these files are deleted, can you help?&#8221; -- and the funny part is I no longer have access to any of the tooling I helped build. I know how to build it again. Is that market saturated? Absolutely. But I have example code, it solves a real problem people bring to me, and there is no reason it can&#8217;t live on a website for a couple bucks.</p><p><strong>Websites for non-technical friends.</strong> This one isn&#8217;t a product, it&#8217;s a favor I keep repeating. I have a close friend in the trades doing drywall and restoration work who is reasonably technical but would never spend the time to learn web development. He would get real value out of a proper site. I did the same thing for my video editor when he started a business on the side -- he has been fantastic about turning videos around when I hand them over late, so building him a site was an easy yes. The key detail is that I structure them so the owner can maintain them: copy a config file into ChatGPT, ask for the change, paste it back, done. I might start advertising that.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Why I Trust Agents With Some Of This And Not All Of It</strong></h2><p>The voice companion idea probably sounds sketchy to some people. &#8220;You&#8217;re just going to let AI do your work?&#8221;</p><p>Sort of. Here&#8217;s the honest breakdown.</p><p>There is a category of work where I trust an agent to go end-to-end, and it&#8217;s not blind trust -- it&#8217;s because I have built a lot of guardrails. File-based instructions that encode how the codebase works. <strong><a href="https://www.devleader.ca/2026/07/24/realworld-roslyn-analyzer-examples-in-c-naming-null-checks-and-log-validators?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-151">Roslyn analyzers that enforce naming, null checks, and log validation</a></strong> so bad patterns fail at compile time rather than in review. Scoped <strong><a href="https://www.devleader.ca/2026/07/23/github-copilot-cli-custom-agents-and-skills?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-151">custom agents and skills in Copilot CLI</a></strong> so each task runs with a narrow, well-defined job. The gates are what make the trust reasonable.</p><p>Then there is the other end of the spectrum. Big feature work, architectural changes, large refactors -- I&#8217;m not handing those over and walking away. I will still assign them to an agent and let it crank, but <strong>my expectation is not that it gets it right</strong>. My expectation is that I learn something from watching how it approaches the problem.</p><p>Sometimes there are genuine gold nuggets in there. Other times I look at the approach and immediately think &#8220;oh, that&#8217;s definitely not what I want&#8221; -- and that&#8217;s still valuable, because I often didn&#8217;t have a strong opinion until I saw a concrete option. Getting to &#8220;no, not that&#8221; without spending my own hours on it is a legitimately good trade.</p><p>Yes, it costs tokens. Yes, it costs someone&#8217;s compute. But it didn&#8217;t cost my evening.</p><h2><strong>My Best Ideas Show Up When I Can&#8217;t Act On Them</strong></h2><p>I don&#8217;t know if this is universal, but it is extremely consistent for me: <strong>my best ideas arrive precisely when I am nowhere near a computer.</strong></p><p>Not at my desk. Not in a planning session. Walking, driving, at the gym -- suddenly I know exactly how to solve the thing I was stuck on last week, or a feature idea shows up fully formed. And then by the time I&#8217;m back at a keyboard, it has faded into something much blurrier.</p><p>That is honestly a big part of why the voice companion idea appeals to me so much. Not just &#8220;assign this issue to an agent,&#8221; but being able to talk through a half-formed idea out loud, argue with it a bit, and then say &#8220;open a GitHub issue on this repo with what we just worked out.&#8221; I have done exactly that with ChatGPT before, and the friction of translating it into the real repo is the only annoying part left.</p><p><em><strong>Actionable Tip</strong></em>: whatever your capture mechanism is, make it require zero setup. Voice memo, a note that&#8217;s one tap away, a text to yourself -- it doesn&#8217;t matter which. The ideas you lose aren&#8217;t the ones you rejected, they&#8217;re the ones you never wrote down.</p><h2><strong>Might As Well Turn The Fun Into Something</strong></h2><p>The through-line for me is that I am going to keep building this stuff regardless. That was true before there was any chance of making a dollar from it, and it will be true after.</p><p>But I&#8217;m at a point in my career and my life where if I&#8217;m already spending the time, and the thing I built is genuinely useful, it seems a little silly not to put it somewhere people can find it. Worst case, nobody buys it and I still have the tool. Best case, a few extra dollars show up and I get a nudge to actually finish the next one.</p><p>That&#8217;s the trade I&#8217;m making. Build for yourself first. Ship the smallest usable version. Let the thin paid layer be the reason you cross the finish line instead of drifting to the next shiny thing.</p><p>So -- what are you building? I&#8217;d genuinely like to hear, especially if you&#8217;re leaning on AI to crank out something interesting. Let me know.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/why-i-still-build-side-projects-and?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/why-i-still-build-side-projects-and?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/why-i-still-build-side-projects-and/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/why-i-still-build-side-projects-and/comments"><span>Leave a comment</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5XlQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!5XlQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!5XlQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!5XlQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!5XlQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!5XlQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!5XlQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!5XlQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!5XlQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51a35e64-d36d-4dd6-8158-cdb82c2e7dcf_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[Tech Lead in a Broken Team? What You Need to Do First]]></title><description><![CDATA[Dev Leader Weekly 150]]></description><link>https://weekly.devleader.ca/p/tech-lead-in-a-broken-team-what-you</link><guid isPermaLink="false">https://weekly.devleader.ca/p/tech-lead-in-a-broken-team-what-you</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 27 Jul 2026 16:46:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kzFW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/07/25/tech-lead-in-a-broken-team-what-you-need-to-do-first-dev-leader-weekly-150" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kzFW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!kzFW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!kzFW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!kzFW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kzFW!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:31136,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/07/25/tech-lead-in-a-broken-team-what-you-need-to-do-first-dev-leader-weekly-150&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/208711505?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kzFW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!kzFW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!kzFW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!kzFW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728e7cdb-ea4c-438c-ab5c-5554f4801664_1200x630.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Learn before changing the system</p></li><li><p>Clarify your authority and expectations</p></li><li><p>Automate recurring release pain incrementally</p></li></ul><div><hr></div><h2><strong>Tech Lead in a Broken Team? What You Need to Do First</strong></h2><p>Imagine stepping into your first tech lead role and discovering that every release needs four to six hours of manual testing. Old bugs keep coming back. Delivery dates seem disconnected from the engineering effort. The team is overloaded, and overtime is starting to feel like part of the plan.</p><p>Where do you even start?</p><p>My answer is not, &#8220;Walk in and fix everything.&#8221; You do not have enough context yet, and trying to change the whole system immediately is a great way to burn trust before you understand why the system behaves this way.</p><p>You need to <strong>learn, align, build relationships, and then create momentum with one measurable improvement at a time</strong>.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=Mpq1QTGq1O0">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-Mpq1QTGq1O0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Mpq1QTGq1O0&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/Mpq1QTGq1O0?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><h2><strong>Do Not Start By Rewriting The Team</strong></h2><p>When you inherit a struggling project, the problems are usually obvious before the causes are.</p><p>You can see the long manual test cycle. You can see the regressions. You can see the exhausted engineers and the aggressive delivery dates. What you cannot see yet is how the team arrived there, which constraints are real, and which previous attempts have already failed.</p><p>So the first move is observation.</p><p>Map out:</p><ul><li><p>How work enters the team.</p></li><li><p>Who decides what gets prioritized.</p></li><li><p>What &#8220;done&#8221; currently means.</p></li><li><p>Where releases slow down.</p></li><li><p>Which defects keep returning.</p></li><li><p>What engineers believe is causing the pain.</p></li><li><p>What product and management believe is causing the pain.</p></li></ul><p>That does not mean you sit quietly for six months while everything burns. It means you avoid prescribing a solution before you can explain the system.</p><p>Your other immediate job is clarifying the role itself. &#8220;Tech lead&#8221; means wildly different things at different companies. Are you expected to make technical decisions? Can you push back on scope? Are you accountable for delivery? Are you coaching engineers? When should your manager step in?</p><p>Ask your manager directly. Keep asking as new situations come up. This is not a one-time onboarding question.</p><p>I also think <strong><a href="https://www.devleader.ca/2026/07/18/when-should-you-tell-your-manager-a-developer-is-struggling-dev-leader-weekly-149?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-150">your manager should not be surprised by the problems you are seeing</a></strong>. Share the observations, explain what you are trying, and be clear about where you need support.</p><p><em><strong>Actionable Tip</strong></em>: bring your manager a short list of current risks, the evidence behind each one, and the first experiment you want to run. Ask which decisions you own and where they want to be involved.</p><h2><strong>Build A Working Relationship With Product</strong></h2><p>It is easy to walk into this situation and decide the product manager is the problem.</p><p>They keep pushing dates. Engineering keeps taking shortcuts. Quality drops. Therefore, product must not care about quality.</p><p>Maybe. But that conclusion is not especially useful, and you probably do not have enough information to make it anyway.</p><p>The product manager may be responding to customer commitments, revenue pressure, executive expectations, or information the engineering team does not have. At the same time, engineering may be carrying risks that product cannot see clearly.</p><p>That is exactly why you need the relationship.</p><p>There should be healthy tension between product and engineering. Product pushes for customer value and delivery. Engineering pushes for feasibility, sustainability, and quality. I have written about what happens when <strong><a href="https://www.devleader.ca/2026/06/28/when-your-product-manager-becomes-your-boss-dev-leader-weekly-146?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-150">that healthy tension between product and engineering disappears</a></strong>.</p><p>Your goal is not to defeat the product manager. Your goal is to help both sides make better tradeoffs.</p><p>I have had working relationships change when schedules and responsibilities shifted. Even when I already knew the product manager, I still needed to make time to understand what they needed from me and how I could support them better. It is mutual. I want them helping engineering, and I need to help them succeed too.</p><p><em><strong>Actionable Tip</strong></em>: set up a recurring conversation with your product partner. Ask what outcomes matter most, which dates are truly fixed, what risks they are carrying, and what engineering information would help them make better decisions.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Make Release Pain Visible</strong></h2><p>Four to six hours of manual testing before every release is a giant warning sign to me.</p><p>But you cannot simply delete that testing. The team is doing it because it catches defects. If you remove it without replacing the protection, you have not improved the process. You have just hidden the risk.</p><p>This is where the team needs to slow down enough to speed up.</p><p>Start by documenting every manual release check:</p><ol><li><p>What behavior is being verified?</p></li><li><p>How long does the check take?</p></li><li><p>What defects has it caught?</p></li><li><p>Can that behavior be covered at a lower test level?</p></li><li><p>What is the smallest useful slice you can automate?</p></li></ol><p>Do not wait for the perfect test architecture. If the code is tightly coupled and the only practical first step is a clunky behavioral test, write the clunky behavioral test. You can improve it later. The immediate goal is to stop the same regression from surprising you again.</p><p>Unit, integration, functional, and end-to-end tests all protect different boundaries. Understanding <strong><a href="https://www.devleader.ca/2023/12/02/unit-testing-vs-functional-testing-dev-leader-weekly-20?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-150">how unit testing and functional testing complement each other</a></strong> helps you avoid trying to solve every problem with one giant UI test suite.</p><p>I have lived this at a startup. We had enough technical debt that we needed UI-level behavioral tests before we could safely refactor parts of the application. A big chunk of that debt was mine, so I am not blaming anyone else. Those tests were not the final destination, but they gave us enough confidence to start changing the code underneath.</p><p>The manual release checklist should only get smaller. New regressions should produce new automated coverage, not another permanent item for a human to click through at release time.</p><p>Exploratory testing can still be valuable. Just do not make the hour before release the only time anyone explores the product. If you only look for surprises at the release gate, you will keep finding surprises at the release gate.</p><h2><strong>Dates And Engineering Effort Need An Honest Tradeoff</strong></h2><p>There is nothing inherently wrong with a fixed release date.</p><p>There is also nothing wrong with estimating a body of work and letting the date move.</p><p>The problem starts when scope and date are both treated as fixed while quality is expected to remain unchanged. Something has to move.</p><p>If a feature needs a month of engineering effort and somebody wants it in a week, you have a few honest choices:</p><ol><li><p>Reduce the scope.</p></li><li><p>Move the date.</p></li><li><p>Take a deliberate shortcut and document the debt.</p></li><li><p>Do not build it.</p></li></ol><p>What you cannot do is pretend that a month of work somehow became one week because everyone agreed the date was important.</p><p>This is where I strongly prefer smaller vertical slices. Ship one thin, working path through the feature. Let customers use it. Learn from the feedback. Then decide what deserves the next investment. <strong><a href="https://www.devleader.ca/2023/10/10/vertical-slice-development-a-comprehensive-how-to-for-modern-teams?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-150">Vertical slice development can help teams deliver useful value sooner</a></strong> without pretending the entire feature fits inside an impossible deadline.</p><p>Sometimes you will still choose debt. That can be a valid business decision, but only if everybody understands the cost. If you rush a feature into a shape that cannot support the next iteration, say that clearly. The next change must include paying down the shortcut.</p><p>Otherwise, &#8220;we will clean it up later&#8221; becomes the permanent operating model. That is why <strong><a href="https://www.devleader.ca/2023/10/20/how-to-balance-technical-debt-tackle-it-before-it-tackles-you?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-150">technical debt has to be balanced deliberately</a></strong>, not treated like invisible work engineering will somehow absorb.</p><p><em><strong>Actionable Tip</strong></em>: when somebody asks for a fixed date, respond with the smallest scope the team can confidently deliver by that date. Make the excluded scope and any accepted debt explicit.</p><h2><strong>Overtime Cannot Be The Capacity Plan</strong></h2><p>If the plan only works when engineers repeatedly work extra hours, the plan does not work.</p><p>That does not mean overtime can never happen. Production incidents happen. Unexpected customer problems happen. Teams sometimes make short-term pushes.</p><p>But sustained overtime is not additional capacity. It is borrowing energy from future delivery, quality, and retention.</p><p>As the tech lead, do not quietly absorb the gap. Make capacity visible:</p><ul><li><p>Here is what the team can complete safely.</p></li><li><p>Here is the work that does not fit.</p></li><li><p>Here is the quality risk if we force it in.</p></li><li><p>Here is the decision we need from product and management.</p></li></ul><p>If the pressure is already affecting people, <strong><a href="https://www.devleader.ca/2026/03/29/should-you-talk-to-your-manager-about-burnout-dev-leader-weekly-133?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-150">talking to your manager about burnout</a></strong> should happen before somebody reaches the point where they cannot keep going.</p><p>Pushing back is not refusing to deliver. Good pushback gives decision-makers a realistic set of tradeoffs.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Ownership Means Following Through</strong></h2><p>One of the most important parts of this role transition is realizing that agreement is not action.</p><p>You can explain the testing problem to the product manager. They can nod and say it sounds reasonable. Then everyone returns to the same priorities, and nothing changes.</p><p>That does not automatically mean they do not care. It probably means this improvement matters more to you than it does to them, so <strong>you need to drive it</strong>.</p><p>Pick one change. Give it an owner. Put time against it. Define what better looks like. Report the result.</p><p>For example:</p><ol><li><p>Choose the ten most expensive manual release checks.</p></li><li><p>Automate one of them this iteration.</p></li><li><p>Require a regression test for every recurring defect.</p></li><li><p>Measure the release time and escaped defects.</p></li><li><p>Share the result with engineering, product, and your manager.</p></li><li><p>Repeat.</p></li></ol><p>That first win matters. People support changes more easily when they can see that the change saved time, reduced risk, or made delivery more predictable.</p><p>You do not need to repair the entire organization in your first month. You need to understand the system, clarify your authority, build the relationships, and prove that one better way of working is possible.</p><p>Then do it again.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/tech-lead-in-a-broken-team-what-you?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/tech-lead-in-a-broken-team-what-you?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/tech-lead-in-a-broken-team-what-you/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/tech-lead-in-a-broken-team-what-you/comments"><span>Leave a comment</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</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_!CW9l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CW9l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!CW9l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!CW9l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!CW9l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!CW9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!CW9l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!CW9l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!CW9l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!CW9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c010dc3-9ec1-48b9-9976-5c32f248ae53_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[When Should You Tell Your Manager A Developer Is Struggling?]]></title><description><![CDATA[Dev Leader Weekly 149]]></description><link>https://weekly.devleader.ca/p/when-should-you-tell-your-manager</link><guid isPermaLink="false">https://weekly.devleader.ca/p/when-should-you-tell-your-manager</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 20 Jul 2026 02:58:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DLJx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/07/18/when-should-you-tell-your-manager-a-developer-is-struggling-dev-leader-weekly-149" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DLJx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!DLJx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!DLJx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!DLJx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DLJx!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:47986,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/07/18/when-should-you-tell-your-manager-a-developer-is-struggling-dev-leader-weekly-149&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/207728786?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DLJx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp 424w, https://substackcdn.com/image/fetch/$s_!DLJx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp 848w, https://substackcdn.com/image/fetch/$s_!DLJx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp 1272w, https://substackcdn.com/image/fetch/$s_!DLJx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78fa857-3d21-431f-82bb-194222af9fa9_1200x630.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Raise concerns early, without jumping to termination</p></li><li><p>Coaching needs observations, support, and follow-through</p></li><li><p>Managers remain accountable for the whole team</p></li><li><p><strong><a href="https://youtube.com/live/8JRQFdwZ_bU?feature=share">Join me for the live stream (or watch the recording) on Monday, July 20 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-8JRQFdwZ_bU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;8JRQFdwZ_bU&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/8JRQFdwZ_bU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>When Should You Tell Your Manager A Developer Is Struggling?</strong></h2><p>I came across a question from a team lead who had been coaching a junior developer for roughly 20 months. Progress had been difficult, and from the team lead&#8217;s perspective, the developer had actually started moving backward. They were less proactive, still needed a lot of direction, and did not seem to be responding to the coaching.</p><p>The question was basically: <strong>When should I tell my manager this is not working?</strong></p><p>My immediate reaction was that this conversation should have started much earlier. But I want to be extremely clear about what I mean by that.</p><p>Raising awareness early does <strong>not</strong> mean asking your manager to terminate someone early. It means sharing what you are observing while there is still time to understand the problem, adjust the support, and give the person a fair opportunity to improve.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=BHU0Nnca-Sg">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-BHU0Nnca-Sg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;BHU0Nnca-Sg&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/BHU0Nnca-Sg?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><h2><strong>Raising Awareness Is Not A Verdict</strong></h2><p>Some people hear &#8220;I need to tell the manager&#8221; and immediately translate that into &#8220;I am trying to get this person fired.&#8221;</p><p>Those are not the same thing.</p><p>A useful conversation with your manager is not:</p><ul><li><p>&#8220;This developer sucks.&#8221;</p></li><li><p>&#8220;They are never going to make it.&#8221;</p></li><li><p>&#8220;We need to get rid of them.&#8221;</p></li></ul><p>Those are conclusions. They skip over all the information your manager actually needs.</p><p>A better conversation sounds more like this:</p><ul><li><p>Here is the work the developer has been trying to complete.</p></li><li><p>Here is where they are consistently getting stuck.</p></li><li><p>Here is the coaching or support I have already tried.</p></li><li><p>Here is the progress I expected to see.</p></li><li><p>Here is the trajectory I am seeing instead.</p></li><li><p>Here is where I need help.</p></li></ul><p>That distinction matters because <strong><a href="https://www.devleader.ca/2024/05/25/feedback-is-deeper-than-you-think-dev-leader-weekly-45?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-149">feedback is deeper than a single verdict</a></strong>. If all you provide is a label, your manager cannot tell whether the issue is skill, unclear expectations, poor coaching, team fit, missing context, or something else entirely.</p><p><em><strong>Actionable Tip</strong></em>: bring observations, not character judgments. Describe what happened, what support was attempted, what changed, and what you need from your manager next.</p><h2><strong>There Is No Magic Ramp-Up Number</strong></h2><p>The Reddit discussion had people at both extremes.</p><p>Some people claimed they could tell within a week whether a developer was going to work out. Other people pushed back and said new hires need months before anyone should be concerned.</p><p>Honestly? I do not believe there is one magic number.</p><p>A junior developer learning their first professional codebase is in a different situation from a senior developer joining a familiar domain. A new graduate may need help learning how work moves through the team. A transfer may know the company but not the product. Someone may be technically capable but completely lost in the domain.</p><p>The important signal is not whether they reached full productivity by an arbitrary date. It is whether you can see a reasonable <strong>trajectory</strong>.</p><p>Are they asking better questions? Are they retaining what they learned? Are they taking on slightly more responsibility? Are the same blockers repeating without any change? Does the support they need seem to be increasing instead of decreasing?</p><p>You may not know the answer after one week. But if you have worked closely with someone for a few weeks or a couple of months and the trajectory concerns you, that is enough reason to share what you are seeing.</p><p>You do not need certainty before you communicate.</p><h2><strong>Your Manager Should Not Be Surprised</strong></h2><p>If I pair a new developer with a team lead, technical lead, intern buddy, or another engineer, I still expect to check in.</p><p>How is the new person doing? Where are they getting stuck? What is going well? Does the person helping them need anything from me?</p><p>I do not need a formal performance report every few days. I do want enough communication that the next conversation makes sense.</p><p>If a team lead tells me after several months, &#8220;This person is not working out,&#8221; and that is the first concern I have heard, my response is going to be: <strong>Wait, what happened?</strong></p><p>The concern may be completely valid. But now we have lost months where we could have changed the coaching, clarified expectations, or added support.</p><p>Regular check-ins are one reason I care so much about helping people <strong><a href="https://www.devleader.ca/2025/04/05/make-the-most-of-your-one-on-ones-dev-leader-weekly-90?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-149">make the most of their one-on-ones</a></strong>. These conversations should surface small signals before they become enormous surprises.</p><p><em><strong>Actionable Tip</strong></em>: give your manager lightweight progress updates. &#8220;Going well,&#8221; &#8220;still learning this area,&#8221; &#8220;we are trying a different approach,&#8221; and &#8220;I need help&#8221; are all useful signals.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Clarify What Your Lead Role Actually Owns</strong></h2><p>&#8220;Team lead&#8221; and &#8220;technical lead&#8221; can mean completely different things from one company to another.</p><p>In one organization, a lead may be expected to actively coach developers, adjust how work is delegated, and drive onboarding. Somewhere else, the lead may own technical direction while the manager handles nearly every people-related concern.</p><p>This ambiguity is one of the <strong><a href="https://www.devleader.ca/2025/08/23/top-mistakes-of-new-managers-and-leads-dev-leader-weekly-106?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-149">mistakes new managers and leads can make</a></strong>. Everyone assumes they understand the role, nobody states the boundaries, and important work falls into the gap.</p><p>If you are the lead, ask your manager:</p><ol><li><p>What coaching do you expect me to handle directly?</p></li><li><p>What kinds of concerns should I raise immediately?</p></li><li><p>How often do you want onboarding updates?</p></li><li><p>What decisions can I make without checking first?</p></li><li><p>What support can I ask you to provide?</p></li></ol><p>You should feel empowered to help. You should not quietly inherit full responsibility for another employee&#8217;s performance without the authority, context, or support to handle it.</p><h2><strong>Do Not Just Drop The Problem And Walk Away</strong></h2><p>There is another failure mode here.</p><p>You tell your manager, &#8220;Bob is not ramping up very well.&#8221;</p><p>Then... nothing happens.</p><p>Did you expect the manager to take over? Did the manager expect you to keep coaching? Is someone changing the plan? Does the developer even know what they need to improve?</p><p>Raising awareness without agreeing on a next action is not enough.</p><p>Depending on the situation, the next step might be:</p><ul><li><p>Pairing the developer with someone else for a different perspective.</p></li><li><p>Giving them a smaller, better-defined area to own.</p></li><li><p>Spending more time on domain context instead of only code.</p></li><li><p>Setting clearer expectations for initiative and communication.</p></li><li><p>Having the manager join a coaching conversation.</p></li><li><p>Identifying training, documentation, or tools that are missing.</p></li><li><p>Checking whether the team or role is simply a poor fit.</p></li></ul><p>The point is not that every struggling employee can be turned around. Sometimes the role will not work out. But if the only action is repeatedly saying &#8220;they are struggling,&#8221; nobody is actually helping.</p><h2><strong>Make Sure The Coaching Is Not Part Of The Problem</strong></h2><p>Managers often hear different versions of the same situation.</p><p>The junior developer says, &#8220;Things are going well. I hit a few blockers, but I am working through them with the senior developer.&#8221;</p><p>The senior developer says, &#8220;This person takes no initiative. I have shown them this five times and they still cannot do it.&#8221;</p><p>So what is actually happening?</p><p>Maybe the junior developer is disengaged. Maybe they are not retaining information. Maybe they are afraid to ask questions. Those are all possible.</p><p>But maybe the senior developer&#8217;s idea of coaching is screen sharing, clicking every button, writing all the code, and saying, &#8220;Watch what I do.&#8221; Then they are frustrated when the other person cannot reproduce the process alone.</p><p>I have written about how <strong><a href="https://www.devleader.ca/2026/02/04/these-junior-developers-suck-they-just-dont-understand-my-code?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-149">senior developers can accidentally make learning harder</a></strong>, especially when expertise makes the difficult parts feel obvious. Watching an expert move quickly is not the same as practicing the skill.</p><p><em><strong>Actionable Tip</strong></em>: let the learner drive. Have them share their screen, choose the next step, explain what they think is happening, and ask for guidance when they get stuck. It may feel slower, but you can finally see how they reason.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Technical Aptitude Might Not Be The Whole Story</strong></h2><p>When someone seems unmotivated or passive, it is easy to jump straight to a personality judgment.</p><p>Sometimes that judgment is wrong.</p><p>Maybe they do not understand the domain well enough to know why the work matters. Maybe every task feels like an isolated technical request with no connection to a user or business outcome. Maybe they are overwhelmed by the codebase and trying not to expose how lost they feel.</p><p>Managers and leads often say, &#8220;There are no stupid questions. Ask anything.&#8221;</p><p>I genuinely mean that when I say it. But I also understand that new employees may still worry about looking unqualified in front of their manager. Pairing them with another engineer can create a safer place to ask those questions and build confidence.</p><p>That is part of why a manager needs multiple perspectives. Talk to the developer. Talk to the person coaching them. Look at the work. Ask what each person has tried. Do not assume one story gives you the complete picture.</p><h2><strong>Accountability Still Belongs To The Manager</strong></h2><p>As a manager, I can delegate pieces of onboarding. I can ask a senior engineer to be an intern buddy. I can give a team lead room to coach someone and adjust the day-to-day approach.</p><p>I cannot delegate away my accountability for the team as the manager for the team.</p><p>At the end of the day, the manager is responsible for making sure employees have clear expectations, appropriate support, useful feedback, and a fair process when performance concerns exist.</p><p>That does not mean the manager personally performs every coaching session. It means the manager remains engaged enough to understand what is happening and act when the team needs help.</p><p>This is where <strong><a href="https://www.devleader.ca/2024/10/12/radical-accountability-vs-blame-culture-dev-leader-weekly-65?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-149">accountability without sliding into blame</a></strong> matters. The goal is not to decide which person deserves to be attacked. The goal is to understand the system, clarify ownership, support improvement, and make a responsible decision.</p><h2><strong>A Practical Way To Escalate The Concern</strong></h2><p>If you are a lead and you are worried about someone&#8217;s progress, you do not need a dramatic speech.</p><p>You can use a simple structure:</p><ol><li><p><strong>State the observation.</strong> What specific behavior or outcome concerns you?</p></li><li><p><strong>Describe the trajectory.</strong> Is it improving, flat, inconsistent, or getting worse?</p></li><li><p><strong>Explain the support.</strong> What coaching, pairing, documentation, or context have you tried?</p></li><li><p><strong>Share the impact.</strong> How is this affecting the developer, the work, or the rest of the team?</p></li><li><p><strong>Ask for help.</strong> What do you need the manager to clarify, provide, or decide?</p></li><li><p><strong>Set a checkpoint.</strong> When will you compare notes again?</p></li></ol><p>That might sound like:</p><blockquote><p>I have been pairing with this developer on the deployment workflow. They can complete the steps with direct guidance, but they are still unable to complete the same workflow independently, and the same questions are repeating. I have tried written steps and two driver sessions. I would like your help understanding whether we should change the coaching plan or clarify the role expectations. Can we check in again after the next two tasks?</p></blockquote><p>That is specific. It leaves room for investigation. It creates an action. And it does not pretend you know the final outcome before the manager has even joined the conversation.</p><h2><strong>Earlier Communication Can Be Kinder</strong></h2><p>Waiting can feel compassionate because you do not want to get someone in trouble.</p><p>But silence is not always kind.</p><p>If the developer needs different coaching, earlier communication helps them get it. If expectations are unclear, earlier communication gives the manager time to clarify them. If the team is a poor fit, earlier communication creates more options. If a formal performance process eventually becomes necessary, the concern should not appear out of nowhere after nearly two years.</p><p>The time horizon for <strong>raising awareness</strong> is much shorter than the time horizon for <strong>giving someone a fair opportunity to improve</strong>.</p><p>Those ideas are not in conflict.</p><p>You can communicate early, coach patiently, gather better information, and avoid rushing to a conclusion. In fact, early communication is what makes that patience more responsible.</p><h2><strong>The Question Is Not &#8220;When Do I Give Up?&#8221;</strong></h2><p>The better question is: <strong>When do I create enough visibility for the right support to happen?</strong></p><p>My answer is early and regularly.</p><p>Do not wait until you are completely frustrated. Do not turn one difficult week into a permanent label. Do not hide the concern for 20 months and then hand your manager a final verdict.</p><p>Share the signal. Ask for help. Agree on the next step. Keep checking the trajectory.</p><p>Maybe the developer turns things around with better coaching. Maybe they thrive on a different team. Maybe the role ultimately does not work out. You cannot know that from the first concern.</p><p>What you can do is make sure the concern is handled with clarity, accountability, and enough time for people to respond.</p><p>If you have a software engineering or career question, leave it in the video comments or submit it anonymously at <strong><a href="https://codecommute.com/">codecommute.com</a></strong>. I would love to hear how your organization divides coaching responsibilities between leads and managers.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/when-should-you-tell-your-manager?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/when-should-you-tell-your-manager?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/when-should-you-tell-your-manager/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/when-should-you-tell-your-manager/comments"><span>Leave a comment</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TKtL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!TKtL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!TKtL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!TKtL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!TKtL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!TKtL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!TKtL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!TKtL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!TKtL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b790861-4483-4fd4-9d51-5b2bcc99fc55_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[What It Actually Takes To Become A Principal Engineer]]></title><description><![CDATA[Dev Leader Weekly 148]]></description><link>https://weekly.devleader.ca/p/what-it-actually-takes-to-become</link><guid isPermaLink="false">https://weekly.devleader.ca/p/what-it-actually-takes-to-become</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 13 Jul 2026 00:13:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YfpB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/07/11/what-it-actually-takes-to-become-a-principal-engineer-dev-leader-weekly-148" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YfpB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!YfpB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!YfpB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!YfpB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YfpB!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:87256,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/07/11/what-it-actually-takes-to-become-a-principal-engineer-dev-leader-weekly-148&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/206770731?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YfpB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!YfpB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!YfpB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!YfpB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc596de43-40e8-453a-848f-20b05caead6d_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Principal impact crosses team boundaries</p></li><li><p>Sustained ownership beats one heroic project</p></li><li><p>Visibility should follow meaningful impact</p></li><li><p><strong><a href="https://youtube.com/live/RRXi4lraNmc?feature=share">Join me for the live stream (or watch the recording) on Monday, July 13 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-RRXi4lraNmc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;RRXi4lraNmc&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/RRXi4lraNmc?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>What It Actually Takes To Become A Principal Engineer</strong></h2><p>I came across a question from someone trying to understand what getting promoted to principal engineer actually looks like. Not the generic career-ladder language. Not &#8220;increase your impact&#8221; and &#8220;show more visibility.&#8221; They wanted specifics, because the advice they had heard felt inconsistent and the target kept moving.</p><p>Honestly? I think that criticism is fair.</p><p>Before I get into my take, there is an important caveat: <strong>my perspective comes from working at Microsoft</strong>, and I am an engineering manager. Titles, levels, and expectations vary dramatically between companies. Some organizations go from senior directly to principal. Others have staff between them. Some swap the staff and principal labels entirely. So I am not claiming this is the universal definition.</p><p>What I <em>can</em> do is explain the pattern I have seen, the path I took, and what seems to separate someone doing excellent senior-level work from someone operating at principal scope.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=6rCAj2wnxg4">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-6rCAj2wnxg4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;6rCAj2wnxg4&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/6rCAj2wnxg4?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><h2><strong>Principal Is A Scope Change, Not A Coding Upgrade</strong></h2><p>The simplest framing I have is this: becoming principal is usually not about being a senior engineer who types code even faster.</p><p>By the time you are being considered for principal, the expectation is already that you are technically strong. If you interview at a big tech company, coding questions may still be part of the process. System design will probably matter even more. But being excellent at those things is the baseline, not the entire case.</p><p>The bigger change is <strong>the surface area of your responsibility</strong>.</p><p>A senior engineer can have a huge impact within a team. A principal engineer is usually expected to influence work across teams, products, or an organization. That does not mean you personally write every line of code or dictate every design. In fact, I have written before about why <strong><a href="https://www.devleader.ca/2025/03/01/senior-developer-means-coding-less-dev-leader-weekly-85?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-148">senior developers often end up coding less</a></strong>, and principal scope pushes that shift even further.</p><p>You are increasingly responsible for questions like:</p><ul><li><p>Can several teams align around a technical direction?</p></li><li><p>Can this platform support an entirely new class of customers or partner teams?</p></li><li><p>Can a risky initiative move from an idea to a durable, supported capability?</p></li><li><p>Can stakeholders trust that you will drive the work without chasing you for updates?</p></li><li><p>Can other engineers lead meaningful pieces of the mission and succeed because of the structure you created?</p></li></ul><p>That is a very different job from being the person who solves the hardest ticket in the sprint.</p><h2><strong>You Can Be Promoted In Or Hired In</strong></h2><p>The person asking the question wanted to know what it took to get promoted into principal. My path was different: <strong>I was hired into Microsoft at the principal level</strong>.</p><p>That distinction matters because changing companies can be one route into the next level. Maybe you are already operating near that level, but your current team has limited opportunities. Maybe there are already several principal engineers and the organization cannot create enough principal-scope work for everyone. Maybe you have been close to promotion multiple times and now have a strong collection of examples to take into interviews elsewhere.</p><p>None of that means the interview is easy or that you get to skip demonstrating the scope. You still need the evidence.</p><p>When I joined Microsoft, I did not have another big tech company on my resume to provide a neat level-to-level comparison. I came from a much smaller digital forensics company, and I had never worked on globally distributed deployment systems at anything close to Microsoft&#8217;s scale. I go deeper into that transition in <strong><a href="https://www.devleader.ca/2024/04/29/break-into-big-tech-my-journey-from-startup-to-microsoft?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-148">my journey from a startup into Microsoft</a></strong>.</p><p>What I <em>did</em> have were concrete stories about operating across an organization.</p><p>One example was taking a product idea that had been outsourced, bringing the work in-house, building the team around it, and leading that area successfully for years. I could explain the business outcome, the technical ownership, the team growth, and the sustained responsibility. The domain was different, but the leadership and engineering skills transferred.</p><p>That is the key. You do not need to have solved the exact same problem at the exact same scale. You need to show that you have repeatedly handled <strong>comparable complexity, ambiguity, and organizational reach</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Make &#8220;Organizational Impact&#8221; Concrete</strong></h2><p>&#8220;You need more impact&#8221; is frustrating feedback because it sounds important while telling you almost nothing.</p><p>So what does organizational impact actually look like?</p><p>Imagine you work on a platform that supports three kinds of internal services. You lead an initiative that lets the platform support <em><strong>entirely new classes</strong></em> of services. Now you are not just improving one feature for your immediate team. You are expanding the value of everything your team already built and making it available to whole new groups across the company.</p><p>But even that outcome is not enough if your involvement was just proposing the idea or making a couple of code changes.</p><p>At principal scope, you might:</p><ol><li><p>Help shape the original idea and clarify the business value.</p></li><li><p>Lead the design and architecture across several teams.</p></li><li><p>Get partner teams bought into a shared direction.</p></li><li><p>Break the work into areas other engineers can own.</p></li><li><p>Navigate risks, dependencies, and changing requirements.</p></li><li><p>Keep stakeholders informed without turning communication into theater.</p></li><li><p>Carry the initiative through delivery and into sustained operation.</p></li></ol><p>That combination is what turns &#8220;I worked on a large project&#8221; into &#8220;I led an organizationally important outcome.&#8221;</p><p>And yes, influence is part of it. The technically best proposal does not automatically win. If you are struggling to build support across teams, the same dynamics I discussed in <strong><a href="https://www.devleader.ca/2026/05/25/why-your-ideas-keep-getting-shut-down-dev-leader-weekly-141?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-148">why good ideas keep getting shut down</a></strong> absolutely show up here too.</p><h2><strong>Visibility Should Be A Consequence Of Impact</strong></h2><p>I have mixed feelings about the word <strong>visibility</strong>.</p><p>I have personally been put forward for promotion and received feedback that I did not have enough visibility. That was incredibly frustrating. My reaction was basically: <em>what do you mean? I am doing the work my leadership asked me to do. Am I supposed to replace useful engineering work with a bunch of artificial self-promotion?</em></p><p>Communication matters. Project updates, stakeholder notes, demos, and reaching out to groups that might benefit from the work can all help. You should not hide important work and then be shocked when nobody knows it happened.</p><p>But I heard a framing from a VP that changed how I think about this: <strong>the impact should be large enough that the relevant parts of the organization naturally have some visibility into it</strong>.</p><p>Not every person needs every implementation detail. The point is that the work touches a broad enough surface area that leaders and partner teams can say, &#8220;Yes, I know that initiative. I understand why it matters, and I know this person is driving it.&#8221;</p><p>That is different from doing small-scope work and trying to amplify it until it <em>sounds</em> organizational.</p><p><em><strong>Actionable Tip</strong></em>: treat communication as a multiplier for real impact, not a substitute for it. Learn to explain the mission, risks, tradeoffs, and outcomes in language each audience understands. That skill is a big part of why I think <strong><a href="https://www.devleader.ca/2026/03/08/the-gap-between-good-developers-and-great-ones-dev-leader-weekly-130?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-148">communication separates good developers from great ones</a></strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Ownership Is The Signal Behind The Title</strong></h2><p>When I think about the strongest principal promotion cases I have seen, two words keep coming up: <strong>ownership</strong> and <strong>accountability</strong>.</p><p>People trust this person with an important initiative. They are not waiting for someone else to define every next step. They are not being chased down to see whether anything is moving. They create clarity, pull the right people together, surface risks, and keep driving toward the outcome.</p><p>Usually this is not someone who suddenly appeared, completed one enormous project, and immediately became principal. The pattern is more often:</p><ul><li><p>They have already been contributing at a high level on important work.</p></li><li><p>They consistently make the teams around them more effective.</p></li><li><p>They take on ambiguous problems without waiting for a perfect plan.</p></li><li><p>They build trust across technical and non-technical groups.</p></li><li><p>Then they lead one or two especially visible, high-impact initiatives that make the existing pattern undeniable.</p></li></ul><p>That last project may become the cleanest promotion story, but it is not the entire story. It is evidence that confirms sustained behavior.</p><p>This is also why principal scope cannot be reduced to a checklist of code contributions. If your project requires coordination across teams, the difficult parts may be alignment, decision-making, sequencing, communication, and creating ownership for other engineers. Those are not distractions from the technical work. At that scale, they <em>are part of the engineering work</em>.</p><h2><strong>The Goalposts Can Move</strong></h2><p>Here is the part nobody loves hearing: sometimes the target really does move.</p><p>Organizations change. They grow, contract, reorganize, and end up with different distributions of engineers at each level. A company may decide it has too many people at a certain level and quietly raise the bar. The work that earned a promotion several years ago may not be enough under the current expectations.</p><p>That does not make the process feel any less unfair when you are on the receiving end.</p><p>You can do strong work, get told you were close, receive vague feedback, and then wait another six months while wondering whether anything you are doing matters. I have experienced the disappointment of being put forward and not getting the result. I have also experienced this on behalf of my employees when I am working for putting them forward for promotion. It is demotivating, especially when you thought you were following the guidance you had been given.</p><p>If that happens, try to get specific:</p><ul><li><p>What evidence was missing from the promotion discussion?</p></li><li><p>Who needed to see a broader scope of impact?</p></li><li><p>Was the concern about the work itself or how it was represented?</p></li><li><p>What would make the next review materially different?</p></li><li><p>Are principal-level opportunities actually available on your current team?</p></li></ul><p>If your manager cannot turn the feedback into something concrete, that is useful information too.</p><p>And protect your energy. There is a real difference between stretching into bigger responsibility and running yourself into the ground chasing a title. I have shared more thoughts on <strong><a href="https://www.devleader.ca/2025/10/11/promotions-without-burnout-dev-leader-weekly-112?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-148">pursuing promotions without burning yourself out</a></strong>, because no level is worth destroying yourself over.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Principal Impact Is Shared, Not Hoarded</strong></h2><p>One of the projects that helped demonstrate my own impact within the principal band was a multi-month resiliency initiative across an entire platform. It had visibility well beyond my immediate team, and I was responsible for coordinating work across a much larger group.</p><p>But I did not personally do all of that work. Not even close.</p><p>The engineers leading individual parts of the initiative did the work. My role was to help create the direction, coordination, accountability, and conditions for those pieces to succeed together.</p><p>This is important because large impact is not a fixed pie where the principal engineer takes the biggest slice and everyone else gets less credit. Done well, it is closer to one plus one equaling three. The overall initiative becomes a strong impact story, <em>and</em> the engineers leading its different areas get meaningful stories of their own.</p><p>If your version of principal leadership requires absorbing all the credit, you are doing it wrong.</p><p>The best evidence of principal-level leadership is not that everything depended on you personally. It is that the organization could take on a larger mission because you helped many people move effectively in the same direction.</p><h2><strong>A Practical Plan If You Are Targeting Principal</strong></h2><p>So what can you actually do with all of this?</p><p><em><strong>Actionable Tip</strong></em>: stop asking only, &#8220;What task gets me promoted?&#8221; Start asking, &#8220;What important outcome is too large for one team, and how can I help the organization deliver it?&#8221;</p><p>Then work through this:</p><ol><li><p><strong>Learn your company&#8217;s definition.</strong> Get examples of people who were recently promoted and the evidence that mattered.</p></li><li><p><strong>Inventory your real scope.</strong> Write down the teams, systems, stakeholders, and business outcomes your work already touches.</p></li><li><p><strong>Find the missing dimension.</strong> Maybe you need broader technical ownership. Maybe you need cross-team influence. Maybe you need sustained delivery instead of another short project.</p></li><li><p><strong>Choose work that serves the mission.</strong> Do not manufacture a vanity project for promotion. Find an actual organizational problem worth solving.</p></li><li><p><strong>Practice telling difficult stories.</strong> Be ready to explain projects that went off track, how you built buy-in, where you changed direction, and what you learned.</p></li><li><p><strong>Create opportunities for other engineers.</strong> Principal impact should multiply the people around you, not turn you into a bottleneck.</p></li><li><p><strong>Consider the external path honestly.</strong> If your organization cannot offer the scope, another company may evaluate the experience you already have differently.</p></li></ol><p>None of this guarantees a promotion. That uncertainty is part of why the process feels so nebulous.</p><p>But it does move the conversation away from &#8220;do more stuff and be more visible&#8221; toward evidence you can actually reason about: scope, ownership, trust, organizational outcomes, and sustained impact.</p><h2><strong>Do Not Let The Level Become The Mission</strong></h2><p>I understand why people focus on titles and levels. They are the clearest quantitative signal we have for career progression. Compensation follows them. Responsibility follows them. It is natural to care.</p><p>The part I do not love is when the entire incentive becomes: <em>what do I need to do so I personally get promoted?</em></p><p>That framing can make a group of talented people optimize as individuals while the company hopes useful business outcomes appear as a side effect. It feels backwards.</p><p>The healthier question is: <strong>how do we work together more effectively on the mission, and how do I grow my ability to contribute at a larger scale?</strong></p><p>If you keep expanding the complexity you can navigate, the people you can align, the outcomes you can own, and the success you can create for others, you are building principal-level evidence. The title may still depend on timing, organizational shape, and a process you do not fully control.</p><p>But the capability is yours.</p><p>If you have questions about software engineering or career development, drop them in the comments or submit them anonymously at <strong><a href="https://codecommute.com/">codecommute.com</a></strong>. I would love to hear how principal expectations differ where you work too, because there absolutely is not one universal path.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/what-it-actually-takes-to-become?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/what-it-actually-takes-to-become?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/what-it-actually-takes-to-become/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/what-it-actually-takes-to-become/comments"><span>Leave a comment</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RUvb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!RUvb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!RUvb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!RUvb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!RUvb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!RUvb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!RUvb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!RUvb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!RUvb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F362c78e3-3ddc-4046-91d0-4fd36c9e6cc0_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[Feeding My AI Workers Templates]]></title><description><![CDATA[Dev Leader Weekly 147]]></description><link>https://weekly.devleader.ca/p/feeding-my-ai-workers-templates</link><guid isPermaLink="false">https://weekly.devleader.ca/p/feeding-my-ai-workers-templates</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 06 Jul 2026 07:15:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ui42!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ui42!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ui42!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!ui42!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!ui42!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!ui42!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ui42!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:304418,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/205464811?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ui42!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!ui42!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!ui42!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!ui42!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F101961cf-44cf-4066-b9cf-2cf328a4b234_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Ralph loops make failed AI attempts cheap</p></li><li><p>My template library is the real unlock</p></li><li><p>First real end-to-end AI build succeeded</p></li><li><p><strong><a href="https://youtube.com/live/iU61NrBHmMI?feature=share">Join me for the live stream (or watch the recording) on Monday, July 6 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-iU61NrBHmMI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;iU61NrBHmMI&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/iU61NrBHmMI?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>Feeding My AI Workers Templates</strong></h2><p>I like doing these AI recaps after I&#8217;ve had a real stretch of time to sit down and actually build, and this one&#8217;s a good one. I recently had a week off work -- my wife was back in Canada visiting friends for her birthday, so I had the house (and the animals) to myself. I still ended up doing some work every day in some capacity, but I also had the flexibility to focus on what I actually wanted to build. Fair warning up front: this is an extension of the stuff I&#8217;ve been talking about recently with building things using AI.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=QXIcGSYTyqA">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-QXIcGSYTyqA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;QXIcGSYTyqA&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/QXIcGSYTyqA?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><h2><strong>Too Many Copilot Tabs, Not Enough Brain</strong></h2><p>For context: I lean on Copilot CLI for basically everything these days. I keep telling myself I should try other tools more -- I&#8217;ve poked at a few this year -- but the flow is working so well that pulling myself away feels actively disruptive. Add in the fact that I&#8217;ve got my token limits lifted, and there&#8217;s a lot of incentive to just stay put.</p><p>My day-to-day looks like juggling a handful of different repositories at once. There&#8217;s <strong><a href="https://brandghost.ai/?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-147">BrandGhost</a></strong>, the side business I run for automating social media posting and SEO work for other businesses. There&#8217;s Needlr, my <strong><a href="https://www.devleader.ca/2026/02/05/getting-started-with-needlr-fluent-di-for-net-applications?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-147">dependency injection framework for .NET</a></strong>. There&#8217;s a consumer app I&#8217;m helping a friend build. And then a handful of smaller supporting projects on top of that. In practice, that means I&#8217;ve got a PowerShell window open with something like twelve tabs, and I&#8217;m just bouncing between them -- prompting Copilot in one, checking on another, prompting a third.</p><p>I saw someone online recently put a name to the mental toll of doing this -- and that&#8217;s really pointing to the significance of this way of working. Constantly juggling too many AI sessions is a real cognitive cost, and it&#8217;s messing with people&#8217;s heads a little. I&#8217;ve <strong><a href="https://www.devleader.ca/2026/04/20/the-context-switching-problem-every-dev-faces-dev-leader-weekly-136?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-147">written about the context-switching problem before</a></strong>, but this is a new flavor of it -- it&#8217;s not just switching between tasks, it&#8217;s switching between <em>agents</em>, each with its own context, its own state, its own thing it&#8217;s in the middle of.</p><h2><strong>Ralph Loops, Orchestration, Spec Kit, and Templates</strong></h2><p>The system I&#8217;ve been building has multiple layers, and the important part is that every layer is optional on its own.</p><p>At the bottom is what&#8217;s known as a <strong>Ralph loop</strong> -- a pattern named after Geoffrey Huntley&#8217;s tongue-in-cheek nod to Ralph Wiggum, and it&#8217;s dead simple: a worker picks up a task, iterates on it inside some constraints, and if it doesn&#8217;t meet those constraints in the time it&#8217;s given, the work gets thrown away. No wasted human time arguing with an agent that&#8217;s gone sideways -- you just scrap the attempt.</p><p>On top of that sits an orchestration layer, which follows an open-source specification from OpenAI called <strong>Symphony</strong>. I&#8217;ve got my own C# implementation of it. This is the piece that schedules work across however many Ralph-loop workers are running.</p><p>And the third layer is an integration with <strong>Spec Kit</strong> -- GitHub&#8217;s open-source toolkit for spec-driven development. This is what lets you start the whole thing off just by handing it a spec. And I don&#8217;t know if I would call this a layer above or below the spec kit integration, but I have a template library that I am building for scaffolding. So it&#8217;s not exactly the same as spec kit, but it&#8217;s a a solo (or complementary) part of what the spec could include -- all up to my own standards and expectations for how I want something started.</p><p>Here&#8217;s the part I actually like: none of these layers are required. You can use the inner Ralph loop by itself. You can use the orchestration layer without ever touching a spec. Or -- and this is the version I&#8217;ve been testing -- you can hand the whole system a single one-shot prompt and let it use Spec Kit to build out the spec, then use the orchestration layer to schedule the work, then let the agents go execute it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>The One-Shot Calculator Test</strong></h2><p>To actually test this, I&#8217;ve been feeding it about as simple a prompt as I could come up with: <em>&#8220;I want a desktop-based calculator app in C#.&#8221;</em> That&#8217;s it. That&#8217;s the entire prompt, on purpose -- I wanted to see whether, given almost nothing, the system would actually finish.</p><p>Given how trivial that ask is, my bar was low: I expected spec documents to get created, and I expected a simple app with some buttons that does calculations -- the same basic calculator UI you&#8217;ve got on your phone. Tech stack didn&#8217;t matter to me -- WinForms, WPF, whatever, I wasn&#8217;t specifying it in the prompt. And since it&#8217;s such a simple app, I gave it a budget of an hour to get it done.</p><p>The early attempts weren&#8217;t failures exactly, but I wasn&#8217;t happy with them either. The problem was mostly glue -- the connective tissue between all the pieces. I&#8217;d come back and find it had burned 30 minutes retrying a single step because a worker session had literally frozen, or gotten stuck in a loop trying to build something it was missing a dependency for. That&#8217;s half an hour of a 60-minute budget gone to something completely silly, not to the actual work.</p><p>Eventually, though, I got a real end-to-end success. First one. And that felt like a genuine milestone, even for a calculator app -- because it meant the scaffolding, the orchestration, and the loop logic were all finally working together instead of fighting each other.</p><h2><strong>Why Templates Are the Real Unlock</strong></h2><p>If you take away one thing from this issue, I&#8217;d want it to be this: the real unlock isn&#8217;t the fancy orchestration layer. It&#8217;s the <strong>template library</strong>.</p><p>I&#8217;ve been building up a set of templates -- somewhere north of 10, under 20 -- that represent the foundation I&#8217;d expect for any codebase, depending on what I&#8217;m building. Want a desktop app in C#? I&#8217;ve got an Avalonia template that&#8217;s great for getting a cross-platform desktop app off the ground fast, which is exactly what kicked off the calculator build. Every one of these templates already reflects how I like to <strong><a href="https://www.devleader.ca/2026/04/07/plugin-architecture-in-c-the-complete-guide-to-extensible-net-applications?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-147">build things with a plugin architecture</a></strong>, and how I like to wire up dependency injection.</p><p>But a template isn&#8217;t just a starting solution file and a couple of projects. That&#8217;s part of it, sure. The bigger part is that every template ships with my coding standards already turned on -- analyzers and linters configured the way I want them by default. It also ships with my agent instructions: a library of shared instructions that match against file paths. So if an agent is working in a file that ends in <code>test.cs</code>, it automatically gets my standards for what a good test file looks like in C#. And because those instruction files are themselves templated, I can swap in different pieces depending on the stack -- xUnit instructions versus TUnit instructions, for example.</p><p><em><strong>Actionable Tip</strong></em>: if you&#8217;re experimenting with anything like this yourself, don&#8217;t start with the orchestration layer. Start with a small library of your own project templates and coding standards. That&#8217;s the piece I use every single day, regardless of whether the fancier orchestration experiment ever fully pans out.</p><p>Put it together and the goal is simple: when I kick off a brand-new project, it&#8217;s scaffolded well <em>from the very first commit</em>, fully on autopilot -- instead of me getting an agent to reinvent my standards from scratch every single time.</p><h2><strong>This Isn&#8217;t Just For New Projects</strong></h2><p>The other half of this system isn&#8217;t about kicking off brand-new projects -- it&#8217;s about ongoing work. There&#8217;s a small web server sitting there listening, and I can just queue work items up to it. It schedules agents against that queue, and if a backlog builds up, an orchestrator looks at priority and dependencies and figures out how to work through it.</p><p>Some pieces of this I use constantly, some are still very much an experiment. The templating library and the reusable instruction files -- I&#8217;m in those every single day. Because I&#8217;m running across so many different Copilot sessions and repos, I keep spotting the same small pattern show up more than once: &#8220;oh, this is clearly a recurring problem, let&#8217;s get it into the instructions&#8221; -- and that feeds straight back into the template library. The same thing happens when I&#8217;m building a new feature: sometimes I realize I need a template for this shape of work, sometimes I realize I just need better instruction coverage.</p><p>That&#8217;s honestly why I&#8217;m not worried if the fancier orchestration experiment doesn&#8217;t pan out. The templating system is something I get value from regardless -- and it also syncs just the instruction files (not the whole template) across my different projects, so if I improve a standard in one repo, it can propagate to the others.</p><p>... Besides, people smarter than me I am sure are already lightyears ahead on the orchestration part!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Teaching the Agent to Ask About UX</strong></h2><p>After that first successful run, I went and looked at the actual calculator -- and it looked <em>terrible</em>. So I asked Copilot directly: based on the spec, was there anything in there about UX? Nope. Nothing.</p><p>So for the next attempt, I changed the one-shot prompt -- and I mean changed it barely at all, because I wanted to keep it close to a true &#8220;give it nothing&#8221; test. I just added one line: <em>I want a consistently styled user interface that looks modern.</em> That goes in right at the start, and then the same pipeline runs: Spec Kit turns it into a spec, orchestration schedules the work, agents execute.</p><p>The part that still catches me off guard, even though I built it: there&#8217;s an <em>agent</em> driving the entire Spec Kit conversation on my behalf. I didn&#8217;t invent that pattern -- it&#8217;s not novel -- but actually watching an agent have that back-and-forth about what I want built, fully hands-off, still feels a little nuts. When we&#8217;re this hands-off, we either need to expect things to be done in odd ways or provide significant enough guard rails to keep things on track.</p><p>Worth saying too: none of this requires Spec Kit at all. If I want to bring my own spec, or my own prompt, or skip that step entirely, I can just start a new repo and start sending work items straight to the queue. Those work items can just as easily be GitHub issues -- the system integrates with GitHub directly.</p><h2><strong>Turning This Into Real Eval Scenarios</strong></h2><p>Once I&#8217;ve got this working end-to-end reliably, the next step is turning scenarios like the calculator app into actual <strong>eval scenarios</strong>. The idea: define requirements that apply across every scenario -- has to finish within a given time window, has to stay under a token budget, has to actually deliver on the spec. That last one needs an LLM judge that reviews the spec against the output and decides whether it actually delivered. I&#8217;ve written before about <strong><a href="https://www.devleader.ca/2026/03/21/evaluating-ai-agents-with-microsoftextensionsaievaluation-in-c?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-147">building LLM-as-judge evaluation harnesses in C#</a></strong>, and this is exactly the kind of system that needs one -- I don&#8217;t have a ton of eval experience yet, so I&#8217;m actively building that muscle.</p><p>Why bother? Because it gives me a way to tune the system honestly. If I change how conflict resolution works, or how retries behave, or how work gets scheduled across multiple parallel workers, I want to be able to run it against a handful of eval scenarios and say &#8220;yep, this still meets my bar&#8221; -- instead of just eyeballing one run and hoping.</p><p>One optimization idea that came out of watching this calculator run: it only used a single worker because there wasn&#8217;t enough parallel work to justify more. But for anything more complex -- multiple workers, potential conflicts, retry logic -- there&#8217;s a real efficiency question buried in here. Instead of spinning up a brand-new working session for every single work item, what if a worker just kept reusing the working directory it&#8217;s already sitting in? If a build takes a minute, and you&#8217;re chewing through 10 work items, that&#8217;s a minimum of 10 minutes out of your budget spent purely on rebuilding from scratch every time. On a 60-minute budget, that&#8217;s not a rounding error -- that&#8217;s a huge chunk of it.</p><h2><strong>Why I&#8217;m Actually Doing This</strong></h2><p>Zooming out, I think about all of this in two ways.</p><p>The first is that I&#8217;m trying to build things, and using AI well, so I need to get <em>better</em> at building the scaffolding that makes AI effective -- that&#8217;s my templating library, that&#8217;s my instruction file library, and I&#8217;m actively working on both.</p><p>The second is that I&#8217;m experimenting because that&#8217;s genuinely how I learn best. Long before AI was part of the picture, this looked like me <strong><a href="https://www.devleader.ca/2025/08/09/building-complex-side-projects-with-purpose-dev-leader-weekly-105?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-147">building a role-playing game as a side project</a></strong> -- not because I ever expected to ship a finished game, but because building it forced me to learn different corners of software engineering I wouldn&#8217;t have touched otherwise. Playing around with agent orchestration right now is the same instinct. I&#8217;m not sitting here thinking I&#8217;ve invented agent orchestration -- I haven&#8217;t, and there are people and companies way further ahead of me on this, which is completely fine. I&#8217;m happy to go use their stuff when it makes sense. This is just me playing around so I can learn, because that&#8217;s how learning has always worked for me.</p><p>If you&#8217;ve got questions about software engineering, AI, or your career, drop them in the comments, or head to <strong><a href="https://codecommute.com/">codecommute.com</a></strong> and submit them anonymously -- I&#8217;ll make a video response for you and everyone else watching.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/feeding-my-ai-workers-templates?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/feeding-my-ai-workers-templates?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/feeding-my-ai-workers-templates/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/feeding-my-ai-workers-templates/comments"><span>Leave a comment</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EUh4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!EUh4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!EUh4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!EUh4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!EUh4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!EUh4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!EUh4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!EUh4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!EUh4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b4fdb-a530-4362-a849-ffa85026084a_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://www.devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[When Your Product Manager Becomes Your Boss]]></title><description><![CDATA[Dev Leader Weekly 146]]></description><link>https://weekly.devleader.ca/p/when-your-product-manager-becomes</link><guid isPermaLink="false">https://weekly.devleader.ca/p/when-your-product-manager-becomes</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Sun, 28 Jun 2026 05:13:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YCc6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/06/28/when-your-product-manager-becomes-your-boss-dev-leader-weekly-146" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YCc6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!YCc6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!YCc6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!YCc6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YCc6!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:114158,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/06/28/when-your-product-manager-becomes-your-boss-dev-leader-weekly-146&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/203921955?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YCc6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!YCc6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!YCc6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!YCc6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a82aabc-bd87-491f-82d6-f02b9b878af4_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Healthy conflict between product and engineering matters</p></li><li><p>A non-technical boss isn&#8217;t an automatic dealbreaker</p></li><li><p>Surface tech debt before it gets ignored</p></li><li><p><strong><a href="https://youtube.com/live/ncolE0sW-Do?feature=share">Join me for the live stream (or watch the recording) on Monday, June 29 at 7:00 PM Pacific</a></strong>!</p><div id="youtube2-ncolE0sW-Do" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ncolE0sW-Do&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/ncolE0sW-Do?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></li></ul><div><hr></div><h2><strong>When Your Product Manager Becomes Your Boss</strong></h2><p>This week&#8217;s topic comes from a post over on the ExperiencedDevs subreddit, and it&#8217;s a good one: <em>is it normal for the product owner or product manager to be your boss?</em> The person who posted it had their engineering manager leave -- and instead of backfilling that role, leadership made the product manager who already worked with the team the new manager of the engineers. So now the engineers report into a product manager, and as far as I can tell there&#8217;s no engineering manager replacement coming. That&#8217;s just the path forward. They were asking the obvious question: is this normal, and what should I make of it?</p><p>You can <strong><a href="https://www.youtube.com/watch?v=GTjkcvOMZ-8">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-GTjkcvOMZ-8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;GTjkcvOMZ-8&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/GTjkcvOMZ-8?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><h2><strong>One Detail Changes the Whole Picture</strong></h2><p>Right at the end of the post, they dropped in a piece of context that I think matters a lot: this is a company that&#8217;s <em>primarily a marketing company</em>. Software is an aspect of what they do, not the whole business. And they wondered if maybe that was a factor.</p><p>I think it&#8217;s a huge factor, and I want to call out <em>why</em> I love that they included it. We talk about a ton of different software engineering topics, and the right answer almost always depends on the situation. A tiny startup is not a giant enterprise. A company that&#8217;s effectively 100% a software business is not the same as a company where software supports some other product or service. When I read something like this and feel a strong gut reaction -- <em>wait, what the heck is that?</em> -- the most useful thing I can do is check whether the context is just very different from what I&#8217;m used to. It usually is. So keep that in mind as I share my take: your situation might not map cleanly onto mine, and that&#8217;s exactly the point.</p><h2><strong>Why You Actually Want Conflict Between Product and Engineering</strong></h2><p>Here&#8217;s the meta point I really want to land, because everything else hangs off of it. I think it&#8217;s genuinely important for a team or an organization to have <em>healthy conflict</em> between engineering and product. &#8220;Conflict&#8221; is almost too strong a word -- think of it as healthy tension between two groups motivated by different priorities.</p><p>If you only have product representation, you get pulled toward what I&#8217;d only half-jokingly call feature factory hell -- crank out features, crank out more features, and never make space for the work that keeps the foundation from getting brittle. Flip it around: if you only have engineering representation, you exaggerate the other way into tech-debt-and-architecture hell, endlessly refactoring and re-architecting while shipping very little customer value. Both extremes are caricatures, obviously. But that&#8217;s the whole reason you want both voices in the room. They pull against each other, and that tension is what keeps you focused on what actually matters: shipping real value without quietly rotting the codebase.</p><p>So when a team loses its engineering manager and folds entirely under product, my first concern isn&#8217;t &#8220;a PM can&#8217;t manage people.&#8221; It&#8217;s &#8220;who&#8217;s representing the engineering side of that tension now?&#8221;</p><h2><strong>The Traditional Setup, and What&#8217;s Really Shifting</strong></h2><p>In a more traditional org, engineers report up to an engineering manager, and the product manager works <em>with</em> the team. Those are two different things, and it&#8217;s worth separating them. The product manager absolutely helps understand and set priorities -- they&#8217;re translating what customers and the broader industry are asking for, figuring out which direction the product should go, and often bridging into sales and marketing. But the engineers aren&#8217;t reporting to that person for career development. They report to an engineering manager, and the engineering manager partners with the product manager on what to actually go focus on. If you want my full breakdown of that role, I wrote about <strong><a href="https://www.devleader.ca/2021/05/05/engineering-manager-whats-expected-in-the-role?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-146">what&#8217;s actually expected of an engineering manager</a></strong>.</p><p>What&#8217;s changing in this Redditor&#8217;s case is that the reporting line <em>and</em> the engineering representation are both collapsing into the product manager. The partnership tension I just described doesn&#8217;t have an obvious counterweight anymore.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Ownership Moves Around -- a Lot</strong></h2><p>I want to paint a picture from my own career, because the balance between product and engineering is not fixed. It moves.</p><p>Back when I worked at a <strong><a href="https://www.devleader.ca/2024/04/29/break-into-big-tech-my-journey-from-startup-to-microsoft?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-146">digital forensics company before I landed at Microsoft</a></strong>, most of the time product management set the direction of the product and made it very clear what we needed to deliver -- they sat between engineering, sales, marketing, and customers. We shipped monthly, and we&#8217;d prep hard for some big conferences, so product would shape a lot of the roadmap around those. From the engineering side, as an engineering manager and a software engineer, our job was to make it real -- and to push back in a healthy way. &#8220;You want these things, but you may not see all the detail that goes into doing them well, so let us represent that side.&#8221; Then we&#8217;d meet in the middle. Funny thing is, even though a lot was set by product, I never felt like I lacked input or control. We just had a genuinely good working relationship.</p><p>Then I came to Microsoft, onto a deployment platform team in Microsoft 365. Early on, it felt almost the opposite -- engineering managers were quite literally defining the roadmap, and the product managers were there to facilitate that vision, jumping into cross-team dependencies and smoothing things out. Then there was a reorg, and it flipped dramatically. Product went from facilitating to owning every priority, work stream, and deliverable -- to the point where it sometimes felt like I barely had a say. A complete 180, on the same org, in the span of a few years.</p><p>On the team I&#8217;m on now, it&#8217;s more of a hybrid. I feel like I have a lot of say in what we work on, and the product managers do a great job bridging the business needs down -- &#8220;here&#8217;s the initiative, here&#8217;s the spend or performance goal we need to hit&#8221; -- and then leaving the <em>how</em> to engineering. Three very different balances, all in one career. So when someone asks &#8220;is it normal for product to run things?&#8221; -- honestly, the ratio swings all over the place depending on where you are.</p><h2><strong>The Two Things That Get Weird</strong></h2><p>So what actually gets harder when a product manager is directly managing engineers? I see two big ones.</p><p><strong>Career development.</strong> In this case the poster said their PM isn&#8217;t technical at all. That can make career growth genuinely tricky. Not impossible -- I want to be careful here, because I&#8217;ve had non-technical managers I thought were fantastic, and plenty of people will disagree with me on that. There are real strengths a non-technical manager can bring. The hard version is when someone is non-technical <em>and</em> struggles to communicate effectively with technical people. That&#8217;s when it gets rough -- it&#8217;s hard to feel relatable to a manager when you don&#8217;t think they can follow what you&#8217;re working on or understand what career progression looks like for an engineer. Even if they actually do get it, that gap erodes the trust and respect that make the relationship work. I went deeper on how you even evaluate this in <strong><a href="https://www.devleader.ca/2026/05/04/measuring-manager-effectiveness-can-you-even-quantify-it-dev-leader-weekly-138?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-146">measuring manager effectiveness</a></strong>.</p><p><strong>Delivery and representation.</strong> This is the thread running through everything above. When you drop the engineering voice out of priority-setting, you lose the person who&#8217;s supposed to argue for the foundation. You&#8217;re left with a product focus -- and like a bunch of the Reddit commenters warned, <em>get ready for the feature factory</em>: more and more features, less and less room for the work that keeps your base from getting brittle. It&#8217;s not that it can&#8217;t work. It&#8217;s that the structure quietly removes the counterweight. Getting non-feature work onto the roadmap is already hard enough with an engineering manager in the room -- I broke down that whole battle in <strong><a href="https://www.devleader.ca/2026/06/15/how-to-get-tech-debt-prioritized-dev-leader-weekly-144?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-146">how to get tech debt prioritized</a></strong>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><h2><strong>How You Actually Make It Work</strong></h2><p>Here&#8217;s the part I care about most, because it&#8217;s the part you can control. If you&#8217;re in this spot and you&#8217;re not immediately heading for the door, do two things.</p><p>First, invest early in communication. Figure out <em>how</em> to talk to this manager so they actually get it. If you start going on about classes and code structure, a non-technical PM may have no idea what you mean and no interest in it. So learn -- quickly -- the level you need to communicate at, and ideally help them learn how to communicate effectively back to you. You don&#8217;t control their half of that, but you fully control yours, and getting this right is what lets you set clear expectations when you&#8217;re not seeing eye to eye. This, by the way, is the exact skill I&#8217;d argue <strong><a href="https://www.devleader.ca/2026/03/08/the-gap-between-good-developers-and-great-ones-dev-leader-weekly-130?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-146">separates good developers from great ones</a></strong> -- being able to translate technical reality for a non-technical audience.</p><p>Second, be proactive about surfacing the engineering side. A non-technical product manager probably isn&#8217;t going to ask, &#8220;hey, where&#8217;s our tech debt, do we need to re-architect anything?&#8221; -- not out of malice, but because it&#8217;s genuinely not on their radar. So you&#8217;ve got two options. You can sit and sulk -- &#8220;well, I guess we&#8217;re a feature factory forever, no tech debt work, no improving our test infrastructure, no re-architecting.&#8221; Or you can say: they&#8217;re not going to ask because they don&#8217;t know to ask, so <em>we&#8217;ll</em> bring it up. Lay out the pros, cons, and risks for the areas they don&#8217;t have exposure to. Whether they act on it is a separate story -- but the part you control is making sure it gets raised. And if they consistently won&#8217;t factor it in when prioritizing? That itself is a useful signal about whether this is a good long-term fit.</p><h2><strong>My Best Boss Was a Product Leader Running Engineering</strong></h2><p>I&#8217;ll leave you with a story that complicates the whole &#8220;product running engineering is bad&#8221; narrative. At that same digital forensics company, there was a stretch where our VP of engineering left, and the interim VP of engineering was our <em>product management leader</em>. So product was, quite literally, in charge of all of engineering -- a different level in the hierarchy than this Reddit situation, but the same basic shape.</p><p>And honestly? In my eight years there, that person was the best engineering leader I worked with at that level. Which sounds wild given the framing of &#8220;oh no, product is in charge, there&#8217;s no engineering voice.&#8221; So what made it work? He wasn&#8217;t writing code and wasn&#8217;t a software engineer, but he was technical <em>enough</em> in how he communicated. He listened to the engineering side. He clearly understood that you need that healthy conflict between product and engineering to prioritize well. And when he didn&#8217;t follow a technical detail, he&#8217;d just say so -- &#8220;I don&#8217;t get it, can you explain it a different way?&#8221; -- no bluffing, never frustrating to work with. A lot of it came down to his willingness to genuinely take in engineering concerns instead of just handing down &#8220;product decided, go ship it by next week, figure it out.&#8221; Even reporting into him, I always felt well supported in my own growth.</p><h2><strong>So, Is It Normal -- and Should You Worry?</strong></h2><p>My honest read: it&#8217;s not an absolute dealbreaker, but I&#8217;d also be lying if I said I&#8217;d love being in this exact situation. I think statistically I got pretty lucky with that interim VP, and more often than not, I suspect this setup doesn&#8217;t pan out quite as well. But the outcome isn&#8217;t fully out of your hands. If you&#8217;re aware of the parts you can influence -- communicating in a way your manager actually understands, and proactively making sure engineering concerns reach the prioritization table -- you can tilt the odds. And if you give that a real shot and it still doesn&#8217;t work? Then yeah, it&#8217;s probably time to go find a place where engineering gets a seat at the table.</p><p>If you&#8217;ve got a situation like this you&#8217;re wrestling with, you can submit it anonymously over at <strong><a href="https://codecommute.com/">codecommute.com</a></strong> and I&#8217;ll do my best to make a video response. Hope this one helps.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/when-your-product-manager-becomes?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/when-your-product-manager-becomes?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/when-your-product-manager-becomes/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/when-your-product-manager-becomes/comments"><span>Leave a comment</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GJR-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa630713-cb4c-4255-932d-9b2405817318_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!GJR-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa630713-cb4c-4255-932d-9b2405817318_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!GJR-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa630713-cb4c-4255-932d-9b2405817318_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!GJR-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa630713-cb4c-4255-932d-9b2405817318_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!GJR-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa630713-cb4c-4255-932d-9b2405817318_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa630713-cb4c-4255-932d-9b2405817318_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!GJR-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa630713-cb4c-4255-932d-9b2405817318_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!GJR-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa630713-cb4c-4255-932d-9b2405817318_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!GJR-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa630713-cb4c-4255-932d-9b2405817318_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!GJR-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa630713-cb4c-4255-932d-9b2405817318_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[Debugging When You Have No Idea What's Going On]]></title><description><![CDATA[Dev Leader Weekly 145]]></description><link>https://weekly.devleader.ca/p/debugging-when-you-have-no-idea-whats</link><guid isPermaLink="false">https://weekly.devleader.ca/p/debugging-when-you-have-no-idea-whats</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 22 Jun 2026 02:40:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WXcv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/06/21/debugging-when-you-have-no-idea-whats-going-on-dev-leader-weekly-145" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WXcv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!WXcv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!WXcv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!WXcv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WXcv!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:144450,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/06/21/debugging-when-you-have-no-idea-whats-going-on-dev-leader-weekly-145&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/203032479?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WXcv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!WXcv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!WXcv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!WXcv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c5c15d6-28d4-4aae-b5df-8f8cddbac9ae_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Not knowing everything is completely normal</p></li><li><p>Prove or disprove every hypothesis, then write it down</p></li><li><p>Disproving is just as valuable as proving</p></li><li><p><strong><a href="https://youtube.com/live/7EbZvuNTXIc?feature=share">Join me for the live stream (or watch the recording) on Monday, June 22 at 7:00 PM Pacific</a></strong>!</p></li></ul><div id="youtube2-7EbZvuNTXIc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;7EbZvuNTXIc&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/7EbZvuNTXIc?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>Debugging When You Have No Idea What&#8217;s Going On</strong></h2><p>Something is on fire. A live service is doing something it absolutely should not be doing, the metrics look wrong, and you&#8217;re sitting there staring at it thinking: <em>I genuinely have no idea what&#8217;s going on.</em> If you&#8217;ve ever felt that creeping sense of shame in that moment -- like a &#8220;real&#8221; engineer would already know the answer -- I want to talk to you. Because that feeling is incredibly common, and it&#8217;s almost entirely self-inflicted.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=ofureG6lIOw">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-ofureG6lIOw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ofureG6lIOw&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/ofureG6lIOw?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><h2><strong>The Shame of Not Knowing Is Almost Entirely Self-Inflicted</strong></h2><p>This whole topic came out of a post on the ExperiencedDevs subreddit. Someone framed it really honestly: it feels <strong>shameful</strong> as a software engineer when something is happening that you don&#8217;t understand, and you genuinely don&#8217;t know what&#8217;s going on or how to make progress on it. And I get it. I really do. But I want to say this as clearly as I can: that is completely okay, and it&#8217;s completely normal.</p><p>No one in the world expects you to know everything. They shouldn&#8217;t expect it, and honestly, they <em>can&#8217;t</em> expect it -- it&#8217;s not possible. Part of being an engineer isn&#8217;t having every answer in your back pocket. It&#8217;s being curious and working toward a better understanding when you don&#8217;t have the answer yet. A lot of this pressure is self-inflicted, and a lot of it is just software engineering culture. We tend to be a group of strong problem-solvers, so hitting a wall where we just <em>don&#8217;t know</em> is wildly uncomfortable. That discomfort is normal. It does not make you a bad engineer.</p><p>This is also one of the big reasons we build software in teams. If everyone on your team thought exactly the way you do, then the moment <em>you</em> got stuck, the entire team would be stuck right alongside you. Diversity of skill, experience, and perspective is a feature, not a nicety. A lot of <strong><a href="https://www.devleader.ca/2024/04/15/8-things-i-wish-i-understood-earlier-in-my-career?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-145">the things I wish I understood earlier in my career</a></strong> come right back to exactly this.</p><h2><strong>Even Multiple Levels Up, We Don&#8217;t Always Have the Answer</strong></h2><p>I was recently talking with one of my engineers who was deep in a live site investigation. For context, the service area my team is responsible for in Microsoft 365 is... a bit outrageous. The sheer amount of traffic flowing through our systems makes it genuinely impossible for any single person to know every detail about everything. Should people on the team get better and better at investigating and understanding it over time? Absolutely -- that&#8217;s the whole game. But no single person knows everything all the time. The surface area is just too big.</p><p>So there we were, talking it through. A very sharp engineer, and me, several levels up -- and between the two of us, there was no obvious answer. In that moment, as a manager, part of me felt that same pull: <em>man, I wish I just had the answer in my head.</em> But my boss doesn&#8217;t expect me to know everything. My skip level doesn&#8217;t expect me to know everything. We have to make space for that. If your goal is to never be in a situation where you don&#8217;t know the next step, you&#8217;re going to fail at that goal. You <strong>will</strong> end up there. And that&#8217;s fine, because what actually matters is that you try to make progress.</p><p>If you&#8217;ve ever been on the receiving end of someone expecting you to instantly understand everything, <strong><a href="https://www.devleader.ca/2026/02/04/these-junior-developers-suck-they-just-dont-understand-my-code?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-145">this rant about &#8220;junior developers who just don&#8217;t get it&#8221;</a></strong> digs into that expectations mismatch between experience levels.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>My Framework: If You Can Prove It or Disprove It, Write It Down</strong></h2><p>Okay, so with all of that out of the way -- how do I actually approach a problem when I have no idea what&#8217;s going on?</p><p>Here&#8217;s the core of it: most people treat problem-solving as proving a hypothesis <em>right</em>. I treat it as building a matrix of what&#8217;s <strong>known fact</strong> versus what&#8217;s still <strong>assumption</strong>.</p><p>When most people debug, they form a hypothesis, go chase it, and if it turns out to be right, great -- they keep progressing. But if it turns out to be <em>wrong</em>, it gets quietly dismissed as wasted effort. &#8220;We thought it might be this, we looked into it, it wasn&#8217;t, so we got nowhere.&#8221; I want to push back on that hard. <strong>Disproving something is just as valuable as proving it.</strong></p><p>So whenever I can prove a statement true <em>or</em> false -- by reproducing something, by reading through the code, by finding a log that contradicts the theory -- I write it down. On a whiteboard, in a shared doc, wherever the team can see it. Back when we worked more in person, I used to fill entire whiteboards with assumptions, each one marked as proven or disproven. The magic of this is that <strong>none of the investigation is wasted</strong>. Every hypothesis you resolve, in either direction, shrinks the unknown. While something stays an assumption, it&#8217;s a live question hanging over the whole investigation. The goal is to keep converting assumptions into facts.</p><p>For the C# side of actually getting useful signal out of failures, I&#8217;ve got a guide on <strong><a href="https://www.devleader.ca/2023/10/22/how-to-handle-exceptions-in-csharp-tips-and-tricks-for-streamlined-debugging?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-145">handling exceptions in a way that streamlines debugging</a></strong>. For everything else: Build out your matrix of assumptions. Validate them.</p><h2><strong>There Are No Stupid Hypotheses</strong></h2><p>One of my favorite side effects of this approach: there are no dumb ideas. When nobody knows what&#8217;s going on, someone will eventually say, &#8220;This is going to sound kind of crazy, but... could it be something with the operating system?&#8221; And the room groans -- &#8220;come on, the OS is the <em>last</em> thing that&#8217;s going to have a problem.&#8221;</p><p>But... maybe it is? If you can&#8217;t state as a matter of <em>fact</em> that it isn&#8217;t, then it&#8217;s an assumption, and it&#8217;s completely valid to go prove or disprove. Across thousands of machines, could there be something off with a specific OS version in a specific scenario? One hundred percent. Is it common? Nope. Is it possible? Absolutely. So write it down and go check. Often the &#8220;crazy&#8221; hypothesis is exactly the one worth checking, <em><strong>because it&#8217;s the last thing anyone would have looked at</strong></em> -- and you already admitted you don&#8217;t know what&#8217;s going on.</p><h2><strong>Watch the Correlations Emerge</strong></h2><p>Here&#8217;s where it gets genuinely satisfying. Once you start turning assumptions into proven facts, patterns start to surface that you couldn&#8217;t see before.</p><p>You check the OS angle: &#8220;Nope, we see it across versions X and Y, so it&#8217;s not <em>the</em> operating system.&#8221; Fine, that&#8217;s a fact now. What about hardware? &#8220;We see it on configurations A and B, but not C... so C is still open, but A and B definitely reproduce it.&#8221; Now you&#8217;re not holding a pile of vague guesses in your head -- you&#8217;re drawing a map. And when you lay those proven facts side by side, you might suddenly notice: <em>wait, we only ever see this on these specific combinations.</em> Only this software version. Only this region. Only this traffic pattern.</p><p>That&#8217;s the moment the investigation stops being vibes and starts being <strong>data-driven</strong>. You go from &#8220;I don&#8217;t know, so let&#8217;s just guess&#8221; into actual experimentation, and then into higher-level correlations between signals you&#8217;ve <em>proven</em> are real. For live systems, this is also where good <strong><a href="https://www.devleader.ca/2026/04/02/opentelemetry-and-observability-in-microsoft-agent-framework?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-145">observability and telemetry</a></strong> earns its keep -- the more real signal you&#8217;ve instrumented, the faster those correlations show up.</p><p>And a bonus point here: get comfortable with AI and MCP servers. Being able to rely on an LLM to pull data and help you correlate it is SIGNIFICANTLY more effective than you being in the weeds just trying to pull the actual data. Let it do the boring work so you can use your brain for what&#8217;s more valuable.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Where This Came From: Debugging With Almost No Information</strong></h2><p>This framework actually goes back to my digital forensics days. The software we built essentially scanned devices -- mostly hard drives at the time -- and turned the data into a structured report so an investigator looking for digital evidence had something readable to work through. Think of it as a giant search engine plus an interactive dashboard.</p><p>Here&#8217;s the brutal part for debugging: because this was forensics, the data on those devices was highly sensitive material tied to active criminal cases, and a lot of it legally could not be copied or reproduced. So the usual &#8220;just send me a repro&#8221; was frequently off the table. On top of that, many of these workstations were often air-gapped by design. So when something broke, you might get a terse &#8220;it doesn&#8217;t work&#8221; and <em>maybe</em> a log file -- and you&#8217;d better hope there was something obvious in the stack trace, because a lot of the time there wasn&#8217;t.</p><p>When you&#8217;re debugging with limited information and no ability to reproduce the problem, you cannot afford to waste effort chasing hypotheses you&#8217;ve already implicitly ruled out. That constraint is exactly what forged this prove-or-disprove habit. It&#8217;s the same energy as untangling a gnarly dependency injection <strong><a href="https://www.devleader.ca/2024/03/19/autofac-in-asp-net-core-how-to-avoid-this-debugging-nightmare?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-145">debugging nightmare</a></strong> -- you methodically eliminate possibilities until the real cause has nowhere left to hide.</p><p>And yes -- afterward, always reflect: <em>if this happened again, could we add better logging, telemetry, or monitoring to catch it faster next time?</em> That follow-up is worth doing every single time. It just usually doesn&#8217;t help you in the heat of the moment, so treat it as a separate step.</p><h2><strong>The Keys Are in Your Hand</strong></h2><p>One last thing. Sometimes the reason you&#8217;re stuck is an assumption you never bothered to prove because it seemed <em>too</em> obvious to check. &#8220;Why would I look at that? It&#8217;s obviously not the problem.&#8221; But did you actually prove it?</p><p>It&#8217;s like tearing the house apart looking for your keys while they&#8217;re in your hand the whole time. I did this constantly as a kid building LEGO -- convinced they forgot to include the one piece I needed, when it was the next piece in the instructions, sitting right in my hand. Investigations have the exact same trap. The thing you &#8220;know&#8221; is fine is sometimes the very thing that&#8217;s broken.</p><h2><strong>You&#8217;re Not a Bad Engineer for Not Knowing</strong></h2><p>So if you take one thing from this issue, let it be this: you are not a bad engineer because you don&#8217;t know the next step. Don&#8217;t let the shame paralyze you. Accept that not knowing everything is completely normal -- it <em>has</em> to be, because no one can possibly know everything. The point isn&#8217;t to have the answer instantly. The point is to get curious, start writing down hypotheses, and start proving or disproving them one at a time. If you stay curious and keep exploring the problem space, you&#8217;ll keep making progress. And that&#8217;s all any of us can really ask for.</p><p>If you&#8217;ve got questions about software engineering or career development, drop them in the comments or head over to <strong><a href="https://www.codecommute.com/">CodeCommute.com</a></strong> and write in anonymously. I&#8217;m always happy to make a response and share a perspective if it helps.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/debugging-when-you-have-no-idea-whats/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/debugging-when-you-have-no-idea-whats/comments"><span>Leave a comment</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/debugging-when-you-have-no-idea-whats?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/debugging-when-you-have-no-idea-whats?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SNKU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!SNKU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!SNKU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!SNKU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!SNKU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!SNKU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!SNKU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!SNKU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!SNKU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd701b0cd-4ab7-4c50-a80a-fdd2f037dc5e_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[How to Get Tech Debt Prioritized]]></title><description><![CDATA[Dev Leader Weekly 144]]></description><link>https://weekly.devleader.ca/p/how-to-get-tech-debt-prioritized</link><guid isPermaLink="false">https://weekly.devleader.ca/p/how-to-get-tech-debt-prioritized</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 15 Jun 2026 05:55:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YOJC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/06/15/how-to-get-tech-debt-prioritized-dev-leader-weekly-144" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YOJC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!YOJC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!YOJC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!YOJC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YOJC!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:126270,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/06/15/how-to-get-tech-debt-prioritized-dev-leader-weekly-144&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/202080638?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YOJC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!YOJC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!YOJC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!YOJC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eda30e3-23b1-4b73-aff7-edd57988a418_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Decision-makers are detached from your code</p></li><li><p>&#8220;The code is a mess&#8221; never wins</p></li><li><p>Reframe tech debt as future velocity</p></li><li><p><strong><a href="https://youtube.com/live/sbNAWEMSgyI?feature=share">Join me for the live stream (or watch the recording) on Monday, June 15 at 7:00 PM Pacific</a></strong>!</p><div id="youtube2-sbNAWEMSgyI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;sbNAWEMSgyI&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/sbNAWEMSgyI?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></li></ul><div><hr></div><h2><strong>How to Get Tech Debt Prioritized</strong></h2><p>This week&#8217;s topic comes from a post on the ExperiencedDevs subreddit. A developer was asking for perspective on getting their manager to prioritize tech debt. It used to get prioritized, they said, but lately their manager keeps pushing back because the team needs to deliver features. If you&#8217;ve been writing software for any length of time, you know this one -- the age-old battle between shipping more things and making the code better. And if you haven&#8217;t hit it yet, it&#8217;s probably just about to happen.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=uSA_ot1FdX0">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-uSA_ot1FdX0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;uSA_ot1FdX0&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/uSA_ot1FdX0?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><h2><strong>This Is a Prioritization Problem, Not a Code Problem</strong></h2><p>The first thing I want to get out of the way is that this is genuinely tricky, and it&#8217;s tricky because it isn&#8217;t really one problem. It&#8217;s a prioritization problem, a communication problem, and a perspective problem all bundled together. If you&#8217;re more junior and this is happening to you for the first time, it&#8217;s easy to feel confused and frustrated by it -- like you&#8217;re clearly right and nobody will listen. So it&#8217;s worth slowing down and understanding what&#8217;s actually going on underneath.</p><p>Tech debt almost always accumulates the same way: a few things stack up, and whoever owns prioritization -- a product owner, an engineering manager, some combination of those roles -- has to make a call. And the more removed those people are from the code, the less direct understanding they have of how specific areas of the codebase affect your ability to ship. I don&#8217;t mean that conceptually. I mean very specifically: they are not going to know that <em>this</em> class or <em>that</em> module is the thing slowing you down, because they&#8217;re not spending time in there.</p><p>I&#8217;ll be honest about my own seat here, because it&#8217;s relevant. I&#8217;m an engineering manager at Microsoft -- I&#8217;ve been there just under six years, and I&#8217;ve been programming for over 20 years. But in my role, I don&#8217;t write code. It&#8217;s not that I&#8217;m not allowed to; it&#8217;s that there are enough other things I&#8217;m responsible for that it doesn&#8217;t make sense for me to spend my time there. So there are absolutely situations where I am simply not aware of where the tech debt is. I have to rely on and trust my team to bring it up. And when they do, I expect them to be able to articulate <em>why</em> it matters. That last part is the whole ballgame, and we&#8217;ll come back to it.</p><h2><strong>The Two Forces Working Against You</strong></h2><p>When you zoom out, there are two big forces shaping these conversations from the prioritizer&#8217;s side.</p><p><strong>The first is constant pressure to deliver more, often with less.</strong> Before Microsoft, I was at a startup, and there it was a never-ending stream of &#8220;how do we get more things done?&#8221; There&#8217;s truly an infinite amount of work, and a lot of it feels like strategic bets -- things you&#8217;re not certain about but believe you have to try. At a big company, it&#8217;s a different flavor of the same thing: less uncertainty per bet, but a massive surface area of teams all pushing their own initiatives. Either way, the pressure is &#8220;more, faster.&#8221; I went deep on how that infinite pile grows as you get more senior in <strong><a href="https://www.devleader.ca/2025/11/01/more-experience-more-overwhelmed-dev-leader-weekly-114?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-144">More Experience, More Overwhelmed</a></strong>.</p><p>Layer on the current climate -- hiring slowing down, teams shrinking, and the &#8220;we made a strategic pivot to AI, so where&#8217;s the 10x productivity?&#8221; expectation -- and the &#8220;do more with fewer people&#8221; drumbeat gets even louder. I hear this constantly: leadership bet on AI, and they&#8217;re relying on the people building things to show the return.</p><p><strong>The second force is detachment from specific areas of the code</strong>, which we already talked about. Put those two together -- relentless delivery pressure plus distance from the codebase -- and you have the exact conditions where tech debt loses. Not because anyone is stupid or malicious, but because the people deciding are focused on shipping value to customers, and you&#8217;re handing them an argument about classes and methods.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><h2><strong>How the Debt Actually Piles Up</strong></h2><p>Let me walk through the mechanism, because it&#8217;s so common it&#8217;s almost mechanical.</p><p>Say you want to build feature A in a one or two week window. The north star design is &#8220;do X, then Y, then Z.&#8221; If you did all of it properly, it might take a month or two. But you look at the window and go: we can definitely get X done, we&#8217;ll get partway into Y, maybe finish it with a tweak, and we will <em>not</em> get to Z. But that&#8217;s fine -- we&#8217;ll ship A on time and come back for Z next sprint.</p><p>So you ship. You got X, part of Y, and no Z. The feature works. You&#8217;re now in an intermediate state with a bit of debt baked in -- and then the question comes: what&#8217;s more important, the next batch of customer value, or going back to finish Z? If the feature already shipped and already works, finishing Z is almost never the higher-value option. If Z had been truly necessary, it would have blocked the release in the first place.</p><p>Now multiply that by every feature your team ships -- two, three, five, six of these at once -- and you can see how you just keep bleeding debt. I genuinely believe nearly every line of code we write is debt to some degree, but here I mean the specific, visible gaps you <em>know</em> you left because you took a shortcut to hit a date. And I don&#8217;t mean &#8220;shortcut&#8221; as an insult -- it&#8217;s often not &#8220;oh my god I can&#8217;t believe I wrote that.&#8221; It&#8217;s just &#8220;we didn&#8217;t get the full thing done, the feature works, and what&#8217;s left isn&#8217;t visible to the customer.&#8221; The frustration is that it keeps happening, sprint after sprint, and that constant churn is its own kind of tax -- closely related to the productivity drain I covered in <strong><a href="https://www.devleader.ca/2026/04/20/the-context-switching-problem-every-dev-faces-dev-leader-weekly-136?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-144">The Context Switching Problem Every Dev Faces</a></strong>.</p><h2><strong>Why &#8220;The Code Is a Mess&#8221; Never Wins</strong></h2><p>Here&#8217;s where most engineers shoot themselves in the foot. The argument they bring sounds like: &#8220;As a software engineer, I think we should focus on this. Here&#8217;s why.&#8221; And every reason is about the code -- this class is convoluted, we hate touching this module, we want to refactor for cleanliness.</p><p>Now put yourself in the prioritizer&#8217;s chair. They&#8217;re weighing &#8220;spend a week rewriting some classes&#8221; against &#8220;fix these three critical customer-reported bugs and ship these two features the sales team can use to chase five new customers.&#8221; Why would they pick the cleanup? The framing was lost before the conversation even started, because it was built entirely around things they don&#8217;t focus on and can&#8217;t easily evaluate.</p><p>It&#8217;s almost like you&#8217;re set up to automatically lose. And that&#8217;s a genuinely lousy spot -- being forced to pit your tech debt against visible customer value, using the one language the other side doesn&#8217;t speak.</p><p><em><strong>Actionable Tip</strong></em> -- Before you pitch tech debt, run it through this filter: strip out every reason that&#8217;s about the code itself, and see what&#8217;s left. If there&#8217;s nothing left, you don&#8217;t have a business case yet -- you have a preference. Keep digging until you can express the cost in terms of delivery, bugs, or time.</p><h2><strong>Reframe It in the Language of the Business</strong></h2><p>The move is to translate. Instead of &#8220;this code is a mess,&#8221; make it about speed, risk, and waste on the work <em>they</em> already care about.</p><p>Concretely, it sounds more like this: &#8220;This isn&#8217;t some legacy file we haven&#8217;t touched in four years and never will. We are actively in here right now. Two of the bugs this sprint are in this exact code, and we keep breaking it because it&#8217;s convoluted and we can&#8217;t test it effectively. If we slow down for a week and clean it up, the two features you want next -- which we already know live in this same area -- get easier. They&#8217;ll take half the time going forward, and we&#8217;ll stop bleeding these recurring bugs.&#8221;</p><p>See the difference? You&#8217;ve connected the cleanup to <strong>future velocity</strong>, <strong>reduced bugs</strong>, and <strong>less wasted time</strong> -- and you&#8217;ve anchored it to specific upcoming work the prioritizer has already hinted at. You&#8217;re not asking them to value clean code. You&#8217;re showing them how the debt is actively taxing the roadmap they care about. That&#8217;s the same spirit as deciding to <strong><a href="https://www.devleader.ca/2026/03/29/should-you-talk-to-your-manager-about-burnout-dev-leader-weekly-133?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-144">talk to your manager about burnout</a></strong> -- don&#8217;t lead with the vent, lead with the pattern, the impact, and what would actually help.</p><p>The more you can express tech debt as &#8220;this will speed us up on related work&#8221; or &#8220;this will stop these bugs that are clearly hurting our velocity,&#8221; the better your odds. &#8220;The code is a mess&#8221; is a feeling. &#8220;This is costing us two bugs a sprint and doubling the time on the next three features in this area&#8221; is a business case.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>The Manager&#8217;s Side of the Table</strong></h2><p>I want to address the manager dynamic too, because the original poster felt their manager was the obstacle. From where I sit, an engineering manager carries real responsibility <em>not</em> to turn the business&#8217;s delivery pressure into a crippling weight on the team. A good manager absorbs a lot of that and provides some shelter -- not by hiding it entirely (the team should understand the context), but by refusing to amplify it. Amplifying pressure isn&#8217;t productive and it isn&#8217;t helpful.</p><p>That shielding role is exactly what I dug into in <strong><a href="https://www.devleader.ca/2026/06/08/the-management-trap-in-software-engineering-dev-leader-weekly-143?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-144">The Management Trap in Software Engineering</a></strong> -- a lot of management is absorbing chaos so your team can stay focused. But there&#8217;s a real risk in being the person who soaks up everything, which I broke down in <strong><a href="https://www.devleader.ca/2025/05/31/the-hidden-cost-of-being-the-team-hero-dev-leader-weekly-96?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-144">The Hidden Cost of Being the Team Hero</a></strong>. The point for <em>you</em> as the engineer: your manager is very likely getting this pressure from above, and your job in that conversation is to make it easy for them to advocate for the cleanup to <em>their</em> stakeholders. Hand them the business case, not the complaint.</p><h2><strong>The Hard Truth: Some of It Will Never Get Done</strong></h2><p>I&#8217;ll close with the uncomfortable part, because pretending otherwise doesn&#8217;t help anyone. My entire job is prioritizing things, and at the end of the day you have to accept that some things simply will not get done. There is an infinite amount of work -- I have business-critical features to ship for my teams before you even get to tech debt or bug fixes -- and it is quite literally impossible to do all of it.</p><p>That means some of the stuff you talked about, planned, and said &#8220;oh, we&#8217;ll get to it&#8221; about may genuinely never happen. And honestly? That can be completely fine in the end. The skill isn&#8217;t getting everything done; it&#8217;s relentlessly ordering things by value and working through them, accepting that the bottom of the list might never come up. If that constant triage is wearing you down, you&#8217;re not alone -- I wrote about that exact feeling in <strong><a href="https://www.devleader.ca/2026/06/01/adhd-burnout-and-building-a-career-that-fits-your-wiring-dev-leader-weekly-142?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-144">ADHD, Burnout, and Building a Career That Fits Your Wiring</a></strong>.</p><p>So find the opportunities to bring tech debt up, and organize them from the perspective of the person doing the prioritization. What will make it clear to <em>them</em> why it&#8217;s valuable? That means framing it around value to them -- not value to you. It&#8217;s a frustrating thing to navigate, but reframing your perspective makes it a whole lot easier.</p><p>If you&#8217;ve got a specific situation you&#8217;re wrestling with, you can submit it anonymously over at <strong><a href="https://codecommute.com/?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-144">codecommute.com</a></strong> and I&#8217;ll try to make a video response.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/how-to-get-tech-debt-prioritized/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/how-to-get-tech-debt-prioritized/comments"><span>Leave a comment</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/how-to-get-tech-debt-prioritized?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/how-to-get-tech-debt-prioritized?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/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://weekly.devleader.ca/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jSSZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!jSSZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!jSSZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!jSSZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!jSSZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!jSSZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!jSSZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!jSSZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!jSSZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58052154-392f-4a30-8fd1-ca14142b2a35_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item><item><title><![CDATA[The Management Trap in Software Engineering]]></title><description><![CDATA[Dev Leader Weekly 143]]></description><link>https://weekly.devleader.ca/p/the-management-trap-in-software-engineering</link><guid isPermaLink="false">https://weekly.devleader.ca/p/the-management-trap-in-software-engineering</guid><dc:creator><![CDATA[Dev Leader]]></dc:creator><pubDate>Mon, 08 Jun 2026 04:26:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Nl6T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devleader.ca/2026/06/08/the-management-trap-in-software-engineering-dev-leader-weekly-143" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nl6T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Nl6T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Nl6T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Nl6T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nl6T!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp" width="1200" height="800.2747252747253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:92742,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.devleader.ca/2026/06/08/the-management-trap-in-software-engineering-dev-leader-weekly-143&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://weekly.devleader.ca/i/201094027?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Nl6T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Nl6T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Nl6T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Nl6T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96aa931f-edc4-4efc-ada4-277aadbf8874_1536x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>TL; DR:</strong></h2><ul><li><p>Management is a different job, not a promotion</p></li><li><p>Not all context switching drains you equally</p></li><li><p>Absorb your team&#8217;s chaos -- but keep it temporary</p></li><li><p><strong><a href="https://youtube.com/live/5KxvV0MsdYY?feature=share">Join me for the live stream (or watch the recording) on Monday, June 8 at 7:00 PM Pacific</a></strong>!</p><div id="youtube2-5KxvV0MsdYY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;5KxvV0MsdYY&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/5KxvV0MsdYY?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></li></ul><div><hr></div><h2><strong>The Management Trap in Software Engineering</strong></h2><p>This week&#8217;s topic comes from a post on the ExperiencedDevs subreddit titled &#8220;the management trap.&#8221; An engineering manager was reflecting on their career progression and how they&#8217;d arrived at a particular realization: they&#8217;re missing a lot of the joy -- that deep, hyperfocused, heads-down work they used to get as an individual contributor. As someone who has been a frontline engineering manager for over thirteen years, this one hit close to home, and I want to walk through my honest take on it.</p><p>You can <strong><a href="https://www.youtube.com/watch?v=rPx83FVUerI">check out my full thoughts on this in the video</a></strong> below:</p><div id="youtube2-rPx83FVUerI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;rPx83FVUerI&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/rPx83FVUerI?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><h2><strong>Where This One Is Coming From</strong></h2><p>I want to set the stage a bit, because context matters here. This isn&#8217;t a tiny startup with ten people on a single team -- it sounds like this person is in a larger organization. A lot of what they describe about how their time gets spent is the side effect of scale: cross-team coordination, headcount planning, all of that. <strong>That stuff exists in small companies too, but the amount of time, effort, and focus it demands varies dramatically based on the size and the stage of the company.</strong></p><p>The other detail that stood out to me is that this person is a frontline manager. They mentioned that a senior manager promotion has been talked about but never quite materializes. That resonates with me, because I&#8217;ve been a frontline manager for about thirteen and a half years now. Before Microsoft, I was at a smaller company where a director role was on the table -- but that was five and a half years ago. So when someone says they&#8217;ve been sitting in the frontline manager seat for a long stretch, watching the &#8220;next step&#8221; stay perpetually one conversation away, I get it.</p><p>And here&#8217;s the honest tension in their post: it&#8217;s not that they hate management. They explicitly said they get genuine enjoyment out of helping people with career progression, promotions, and growth. That part lights them up. But when they zoom out and look at their day-to-day, it feels chaotic -- scattered, sporadic, a lot of context switching -- and they miss the ability to just sink into one hard problem and feel like they&#8217;re making real progress on it.</p><h2><strong>Management Is a Different Job -- Not a Better or Worse One</strong></h2><p>If there&#8217;s one thing I want you to take from this issue, it&#8217;s this: <strong>a management role is not the same as an IC role, and that difference does not make it better or worse. It&#8217;s just different.</strong></p><p>That sounds obvious written down, but I don&#8217;t think it actually lands for most people until they&#8217;ve lived both sides. Engineering management is its own discipline within software engineering -- the same way a product manager or a project manager is something distinct within software engineering. It&#8217;s not &#8220;senior engineer, but with more authority.&#8221; The work itself changes shape.</p><p>A lot of people hit a point in their career where the promotion that&#8217;s offered to them is a management position. And that can be fantastic -- you might love it, it might fit you perfectly. But I&#8217;d urge you to understand what managers should actually be spending their time and focus on before you assume it&#8217;s just the natural next rung on the ladder. I went deep on this in <strong><a href="https://www.devleader.ca/2024/11/09/i-wish-i-knew-these-before-becoming-a-manager-dev-leader-weekly-69?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-143">I Wish I Knew THESE Before Becoming A Manager</a></strong>, and a lot of it comes down to expectations nobody sets for you up front.</p><h2><strong>Not All Context Switching Costs the Same</strong></h2><p>Here&#8217;s a nuance I don&#8217;t think gets talked about enough. The Reddit thread frames the chaos as the problem -- too much context switching, not enough hyperfocus. And I get that. But when I reflect on my own experience, <strong>it&#8217;s not the context switching itself that wrecks me. It&#8217;s context switching into work that doesn&#8217;t engage me.</strong></p><p>Let me give you a concrete contrast. When I&#8217;m working on security-related problems, there&#8217;s often a ton of context switching, and it can get genuinely chaotic. But I don&#8217;t walk away from it feeling burnt out, because that work excites me. Jumping in to help one of my engineers work through a gnarly technical challenge? That can be energizing, even though it&#8217;s an interruption. On the flip side, sitting down with focused, prepared time to work through interpersonal challenges or career progression with someone -- that feels good. But being rapidly context-switched into that <em>same</em> kind of work, with no runway, is incredibly taxing for me.</p><p>So it&#8217;s often not even the nature of the task that determines the cost. It&#8217;s how much context and preparation I have going into it. I talked about a closely related version of this in last week&#8217;s issue on <strong><a href="https://www.devleader.ca/2026/06/01/adhd-burnout-and-building-a-career-that-fits-your-wiring-dev-leader-weekly-142?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-143">ADHD, burnout, and building a career that fits your wiring</a></strong>, and the mechanics of why switching is so expensive in the first place in <strong><a href="https://www.devleader.ca/2026/04/20/the-context-switching-problem-every-dev-faces-dev-leader-weekly-136?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-143">The Context Switching Problem Every Dev Faces</a></strong>.</p><p><em><strong>Actionable Tip</strong></em> -- If you feel perpetually drained by your week, don&#8217;t just count your context switches. Audit <em>what</em> you&#8217;re switching into:</p><ul><li><p>Which interruptions leave you energized, and which leave you hollow?</p></li><li><p>How much of the draining stuff is draining because of the task itself vs because you had zero preparation for it?</p></li><li><p>Can you batch the low-context, high-cost work into a window where you&#8217;re actually braced for it, instead of letting it ambush your focus blocks?</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>The Part of Management I Actually Believe In</strong></h2><p>This is the piece of the conversation I have the most conviction about. <strong>I genuinely believe that to be effective as an engineering manager, my job is to enable my team to do their best possible work.</strong></p><p>In the short-to-medium term, that often means I have to be the one who gets randomized so that they don&#8217;t. When chaos comes in -- an urgent org-wide ask, an incident, a security fire -- I&#8217;d rather absorb the initial hit myself than yank three engineers out of their flow. I sometimes describe this as shielding or sheltering the team, and I want to be clear about what I mean: not hiding things from them, but removing distractions so they can stay locked on the work that actually moves us forward.</p><p>But absorbing chaos is only a good strategy if it&#8217;s <em>accruing</em> to something. Here&#8217;s my litmus test: from a pure operations standpoint, I feel successful in my role if I could walk away and my team could keep running entirely on their own. That sounds almost paradoxical -- like I&#8217;m saying my goal is to not be needed. From a career-growth standpoint that&#8217;s obviously not the whole picture, because I&#8217;m here to help every one of them grow. But operationally, the target is a team that doesn&#8217;t depend on me to function. I dug into this idea of self-sufficient, autonomous teams in <strong><a href="https://www.devleader.ca/2024/12/28/effective-software-teams-islands-and-autonomy-dev-leader-weekly-76?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-143">Effective Software Teams: Islands and Autonomy</a></strong>.</p><p>The real trap -- and in my opinion this is the actual trap, more than the &#8220;I miss being an IC&#8221; framing -- is when the chaos I&#8217;m absorbing <em>isn&#8217;t</em> moving us toward that self-sufficiency. If I&#8217;m just perpetually soaking up randomization with no end state where the team gets more autonomous, that&#8217;s not sustainable. It&#8217;s supposed to be temporary. Take the chaos, let the team build the processes, services, and tools that make us stronger, and then we don&#8217;t need me in that spot anymore -- and we move on to the next frontier together. The flip side of this is a real risk worth naming: if you become the <em>only</em> person who ever absorbs the chaos, you&#8217;ve built a fragile system around your own bandwidth, which is exactly the failure mode I broke down in <strong><a href="https://www.devleader.ca/2025/05/31/the-hidden-cost-of-being-the-team-hero-dev-leader-weekly-96?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-143">The Hidden Cost of Being the Team Hero</a></strong>.</p><h2><strong>Fan-Out Work Is the Most Unscalable Thing I&#8217;ve Seen</strong></h2><p>Let me give you the specific pattern that&#8217;s been on my mind, because it&#8217;s the clearest example of chaos that <em>doesn&#8217;t</em> accrue to anything good. I&#8217;ve been trying to make more noise about it lately: <strong>fan-out work.</strong></p><p>We&#8217;re a platform team in a large organization. Because the surface area is enormous, what happens constantly is that some team owns a thing, a change lands, and the message goes out: &#8220;everyone needs to go make this change.&#8221; The work fans out to dozens of teams. And it&#8217;s not one team doing this -- it&#8217;s <em>multiple</em> teams all fanning work out to each other simultaneously.</p><p>In my opinion, this is one of the most inefficient, productivity-destroying patterns you can possibly have. And I want to be careful here -- I&#8217;m not saying the work isn&#8217;t important. I&#8217;m not saying we shouldn&#8217;t help. I&#8217;m saying it is, by a wide margin, the most disruptive kind of work I&#8217;ve encountered in my software engineering career. The randomization it injects across an entire org is brutal.</p><p>This is where being a manager means more than just personally absorbing hits. If I notice that fan-out work is a recurring theme, I owe it to my team to push back to the broader organization and say, &#8220;something has to change here.&#8221; That doesn&#8217;t mean I&#8217;ll have the solution in hand. But if I&#8217;m going to make noise about a problem, I need to volunteer to be part of building the fix -- not just complain about it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Systematize the Interruptions Instead of Just Absorbing Them</strong></h2><p>There&#8217;s an older example I come back to a lot. Back in my startup days, the CTO and founder would come by and say, &#8220;this is urgent, we have to do it now.&#8221; Especially in the early days, we&#8217;d drop everything and get completely randomized. I&#8217;d try to step in and shelter the team from it, but over time we landed on something better -- a kind of unwritten contract.</p><p>When we got approached that way, the new default became: <strong>we don&#8217;t just drop everything. We talk about it.</strong> We&#8217;d explain what we were currently working on, give visibility into the tradeoff, and then if the answer was still &#8220;yes, I genuinely think you should drop that other thing,&#8221; at least it was a <em>conscious</em> decision made with full context -- not a reflex.</p><p>That shift, from reflexive interruption to a deliberate, systematized filter, was hugely important. The team was almost always working on things that made us more effective in the long run, so being able to push back and force the interruption to justify itself protected the work that mattered.</p><p><em><strong>Actionable Tip</strong></em> -- If your team is constantly randomized by &#8220;urgent&#8221; asks, build a lightweight filter instead of absorbing each one in the moment:</p><ul><li><p>Make the current priorities visible, so any new ask has to be weighed against something concrete.</p></li><li><p>Push the interruption to be an explicit decision: &#8220;we can do that, but it displaces X -- is that the call you want to make?&#8221;</p></li><li><p>Capture recurring interruption <em>types</em> (like fan-out work) and treat the pattern itself as a problem to solve, not just each instance.</p></li></ul><h2><strong>Firefighting vs Getting Ahead of the Fire</strong></h2><p>The other balance I&#8217;m constantly trying to strike: how much energy goes into firefighting for the team, versus getting ahead of the fires so they don&#8217;t start? When I&#8217;m spending all my time absorbing the chaos of the moment, I have nothing left to invest in preventing the <em>next</em> wave of it. And the fires my team isn&#8217;t directly working to put out -- those are exactly the ones I need to find capacity to address myself.</p><p>I&#8217;ll be honest about a compounding factor here, too. When I&#8217;m running multiple teams and I don&#8217;t feel like I have enough capacity on each one, that&#8217;s a huge contributor to exactly the scattered, randomized feeling the Reddit poster described. Fewer people to rely on means I have to context-switch even more. I have genuinely amazing people on my teams -- just fewer of them than I&#8217;d want to sustain everything without me jumping into the gaps. That&#8217;s nobody&#8217;s fault. It&#8217;s mostly the side effect of organizational growth, and it&#8217;s something I covered from the IC angle in <strong><a href="https://www.devleader.ca/2025/11/01/more-experience-more-overwhelmed-dev-leader-weekly-114?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-143">More Experience, More Overwhelmed</a></strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Dev Leader Weekly is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>If Management Is the Promotion In Front of You</strong></h2><p>So let me bring this back to where the Reddit poster started. They framed it as a trap for managers -- losing the ability to hyperfocus the way they could as an IC. And honestly? I do miss some of that. But I&#8217;ve also found that I get a lot of that deep-focus satisfaction <em>outside</em> of work, and I genuinely enjoy it there.</p><p>The answer is going to be different for everyone, and that&#8217;s exactly the point. As you move up, the hands-on, heads-down portion of the job tends to shrink -- I talked about that reality in <strong><a href="https://www.devleader.ca/2025/12/06/senior-engineers-spend-less-time-coding-dev-leader-weekly-118?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-143">Senior Engineers Spend Less Time Coding</a></strong>. Management accelerates that shift even further. So if a management promotion is the thing being offered to you, don&#8217;t take it just because it&#8217;s labeled &#8220;the next level.&#8221; Understand that you&#8217;re signing up for a fundamentally different job -- one with friction coming at you from multiple directions, where success looks less like &#8220;I shipped this&#8221; and more like &#8220;my team shipped this without needing me.&#8221;</p><p>If that trade excites you, management can be incredibly rewarding. If the thing you love most is the deep technical flow, go in with your eyes open that you&#8217;re trading away a lot of it -- and know that there may be other ways to grow that keep you closer to it.</p><h2><strong>Final Thought</strong></h2><p>I&#8217;ll admit this one is a bit all over the place, because the topic genuinely is. The &#8220;management trap&#8221; isn&#8217;t really a trap in the sense of a mistake you fall into. It&#8217;s just the reality that management is a different role, with different rewards and different costs, and a lot of people step into it without anyone being honest with them about that tradeoff.</p><p>If you&#8217;re weighing this in your own career -- or you&#8217;re already in the seat and feeling the scatter -- I hope this gave you a more useful frame than &#8220;management good&#8221; or &#8220;management bad.&#8221;</p><p>And if you&#8217;ve got a specific situation you&#8217;re navigating, you can submit it anonymously over at <strong><a href="https://codecommute.com/?utm_source=devleader_weekly&amp;utm_medium=newsletter&amp;utm_campaign=dlw-143">codecommute.com</a>,</strong> and I&#8217;ll try to make a video response.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/the-management-trap-in-software-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/the-management-trap-in-software-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://weekly.devleader.ca/p/the-management-trap-in-software-engineering/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://weekly.devleader.ca/p/the-management-trap-in-software-engineering/comments"><span>Leave a comment</span></a></p><div><hr></div><ul><li><p>Join me and other software engineers in the <strong><a href="https://sidestack.io/devleader">private Discord community</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpathtotech?sub_confirmation=1">Resume reviews and interview guidance</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderpodcast?sub_confirmation=1">Software engineering podcast and livestreams</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@CodeCommute?sub_confirmation=1">My Code Commute vlogs are on YouTube</a></strong>!</p></li><li><p><strong><a href="https://www.youtube.com/@devleaderBTS?sub_confirmation=1">All of my weekly vlogs are on YouTube</a></strong>!</p></li><li><p>Remember to check out <strong><a href="https://www.devleader.ca/courses/">my courses</a></strong>, including <strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp?ref=nick-cosentino">this awesome discounted bundle for C# developers</a></strong>:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6xse!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!6xse!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!6xse!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!6xse!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!6xse!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp" width="705" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:705,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;C# From Zero to Hero - Dometrain Course&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C# From Zero to Hero - Dometrain Course" title="C# From Zero to Hero - Dometrain Course" srcset="https://substackcdn.com/image/fetch/$s_!6xse!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp 424w, https://substackcdn.com/image/fetch/$s_!6xse!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp 848w, https://substackcdn.com/image/fetch/$s_!6xse!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp 1272w, https://substackcdn.com/image/fetch/$s_!6xse!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc04a715b-c87b-4323-b2da-b7e524e11f63_705x397.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong><a href="https://dometrain.com/bundle/from-zero-to-hero-csharp/?ref=nick-cosentino">Get this DISCOUNTED course bundle NOW!</a></strong></figcaption></figure></div><div><hr></div><p>As always, thanks so much for your support! I hope you enjoyed this issue, and I&#8217;ll see you next week.</p><p>&#8203;Nick &#8220;Dev Leader&#8221; Cosentino<br>&#8203;<strong><a href="mailto:social@devleader.ca">social@devleader.ca</a></strong>&#8203;<br>&#8203;<br>Socials:<br>&#8211; <strong><a href="https://devleader.ca/">Blog</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.youtube.com/@devleader?sub_confirmation=1">Dev Leader YouTube</a></strong>&#8203;<br>&#8211; <strong><a href="https://www.linkedin.com/in/nickcosentino/">Follow on LinkedIn</a></strong>&#8203;<br>&#8211; <strong><a href="https://instagram.com/dev.leader">Dev Leader Instagram</a></strong>&#8203;<br>&#8203;</p><p>P.S. If you enjoyed this newsletter, consider <strong><a href="https://weekly.devleader.ca/">sharing it with your fellow developers</a></strong>!</p>]]></content:encoded></item></channel></rss>