<?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[CTO Nuggets]]></title><description><![CDATA[Nuggets from the weeds — real talk for engineers who lead. Thoughts and practical tips from a startup CTO.]]></description><link>https://ctonuggets.com</link><image><url>https://substackcdn.com/image/fetch/$s_!0oG-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc470fde2-3693-4c96-9c60-177aa472faa1_1024x1024.png</url><title>CTO Nuggets</title><link>https://ctonuggets.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 06 May 2026 10:24:29 GMT</lastBuildDate><atom:link href="https://ctonuggets.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[CTO Nuggets]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[ctonuggets@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[ctonuggets@substack.com]]></itunes:email><itunes:name><![CDATA[CTO Nuggets]]></itunes:name></itunes:owner><itunes:author><![CDATA[CTO Nuggets]]></itunes:author><googleplay:owner><![CDATA[ctonuggets@substack.com]]></googleplay:owner><googleplay:email><![CDATA[ctonuggets@substack.com]]></googleplay:email><googleplay:author><![CDATA[CTO Nuggets]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Compiler Is Your Best Friend]]></title><description><![CDATA[The Compiler Is a Tireless Reviewer of AI Generated Code]]></description><link>https://ctonuggets.com/p/the-compiler-is-your-best-friend</link><guid isPermaLink="false">https://ctonuggets.com/p/the-compiler-is-your-best-friend</guid><dc:creator><![CDATA[CTO Nuggets]]></dc:creator><pubDate>Wed, 08 Apr 2026 13:15:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0oG-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc470fde2-3693-4c96-9c60-177aa472faa1_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Quick scope check before we dive in. If your domain has already chosen your language for you &#8212; you&#8217;re in ML so you&#8217;re on Python, you&#8217;re on the frontend so you&#8217;re on TypeScript, your entire team knows PHP and a rewrite isn&#8217;t happening in this lifetime &#8212; this post isn&#8217;t for you. I&#8217;m talking to the people with a blank canvas. Greenfield project, flexible team, genuine choice on the table. If that&#8217;s you, keep reading.</p><div><hr></div><h1><strong>The Old Complaint</strong></h1><p>For teams with a genuine choice, the knock on strongly typed compiled languages like Go, Rust, Java, and C# always came down to two very human gripes.</p><p>First, the overhead of defining types up front. Requirements are fuzzy, everything is changing, and you just want to see if the idea works. Defining types on half-baked code feels like ironing your shirt before you&#8217;ve decided if you&#8217;re going out.</p><p>Second, the compile step. Dynamic language developers had a beautiful, frictionless feedback loop: save the file, refresh the browser, see the result. Compiled language developers had: save the file, wait, fix the error, wait again, refresh, see the result. Across a full day of iteration that friction compounds. It&#8217;s not one paper cut &#8212; it&#8217;s a thousand of them.</p><p>Both were legitimate complaints. They&#8217;re also both largely gone now.</p><h1><strong>AI Took Away Those Excuses</strong></h1><p>AI can handle the type definitions you didn&#8217;t want to write. You describe what you want, the AI writes the struct, the interface, the function signatures. Your AI doesn&#8217;t cut corners and has never once thought &#8220;I&#8217;ll just use <code>any</code> here and fix it later.&#8221;</p><p>The compile step problem is subtler but real. When AI is generating your code, a meaningful chunk of iteration happens in the conversation before you ever hit compile. You&#8217;re not in a write-compile-fix loop anymore. You&#8217;re in a describe-generate-review loop, and then you compile once you&#8217;re reasonably confident. You can even get AI to compile the code first before it declares the job done.</p><p>So if both reasons engineers reached for dynamic languages have been largely addressed, what are you left with? All the benefits of a compiler &#8212; and right now those benefits matter more than ever.</p><h1><strong>The Compiler Is a Tireless Reviewer</strong></h1><p>Here&#8217;s the thing about AI generated code: it&#8217;s fast, it is occasionally, confidently wrong in ways that look completely right at first glance. AI hallucinates. It passes the wrong type into a function, references a variable that doesn&#8217;t exist, writes a function signature that almost matches what you need but not quite.</p><p>A compiler catches that whole class of bugs before they ever leave your laptop. Wrong types, mismatched signatures, undefined variables &#8212; dead on arrival at build time. The compiler doesn&#8217;t care that it&#8217;s 4pm on a Friday.</p><p>One thing the compiler <em>can&#8217;t</em> do: save you from bad business logic. If your discount function is calculating the wrong percentage, it&#8217;ll happily ship that bug to production with a smile. But eliminating an entire layer of preventable, AI-hallucination-class bugs before they touch production? That&#8217;s a free guardrail you&#8217;d be crazy to leave on the table.</p><h1><strong>&#8220;But Dynamic Languages Have Typing Now&#8221;</strong></h1><p>You&#8217;re thinking about TypeScript. PHP&#8217;s <code>declare(strict_types=1)</code>. These are real and genuinely useful &#8212; I&#8217;m not here to dismiss them.</p><p>But optional typing is a cultural enforcement problem, not a technical one. And culture, as any engineering manager who has survived a deadline crunch knows, is the hardest thing to hold together under pressure. The moment a sprint gets hairy, someone skips the type annotation. Then someone else does. Then it&#8217;s a pattern. Then you look up six months later and half your codebase is untyped.</p><p>Optional typing is like a gym with an optional cardio policy. Sure, technically everyone <em>could</em> do cardio. A compiled strongly typed language has no optional cardio policy. The compiler is the policy.</p><h1><strong>So What Should You Actually Do?</strong></h1><p><em>First choice:</em> Pick a strongly typed compiled language your team can hire for and live with. Go, Rust, Java, C#, Kotlin &#8212; pick your fighter. AI will help your engineers write it, and the compiler will help you not regret it at 2am six months from now.</p><p><em>Locked into a dynamically typed ecosystem?</em> Enforce strict typing across every file from day one, at the CI level, no exceptions blessed by anyone including you. Do not plan to &#8220;add types later.&#8221; Later is a lie you tell yourself before a deadline and forget about immediately after.</p><h1><strong>The Tradeoff No Longer Holds</strong></h1><p>This isn&#8217;t an argument that dynamic languages are bad &#8212; they built the internet and will outlive this post. This isn&#8217;t an argument that AI is untrustworthy &#8212; it&#8217;s excellent most of the time and getting better every month.</p><p>This is a narrower argument for teams with a real choice in front of them. The two things that made strongly typed compiled languages feel expensive &#8212; type overhead and compile friction &#8212; have both been largely addressed by AI. What you&#8217;re left with is a choice between a codebase with a compiler watching your back and one without.</p><p>The cost disappeared. The benefit didn&#8217;t.</p><p>Why would you choose without?</p><div><hr></div><p>As always, ship it. </p><p>Matthew</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ctonuggets.com/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">Thanks for reading! Subscribe for free to receive new posts and support my work.</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><p></p>]]></content:encoded></item><item><title><![CDATA[Taste Still Matters]]></title><description><![CDATA[AI is a force multiplier. It multiplies everything - including the bad stuff.]]></description><link>https://ctonuggets.com/p/taste-still-matters</link><guid isPermaLink="false">https://ctonuggets.com/p/taste-still-matters</guid><dc:creator><![CDATA[CTO Nuggets]]></dc:creator><pubDate>Thu, 02 Apr 2026 13:34:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lp_O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you&#8217;ve been leaning on AI coding tools, you&#8217;ve probably noticed that the generated code tends to look a lot like your existing code. That&#8217;s not a coincidence. These models pattern-match against your codebase. If it&#8217;s clean and well-structured, AI output tends to slot in reasonably well. If it&#8217;s a years-old haunted mansion of copy-pasted logic and functions that do seventeen things at once &#8212; congratulations, you now have a very fast haunted mansion generator.</p><p>This is why software design, architecture, and good engineering discipline matter <em>more</em> in the AI era, not less. Readable code, testable modules, sensible abstractions &#8212; these aren&#8217;t just hygiene anymore. They&#8217;re load-bearing walls. AI will keep building on top of them, whether they can hold the weight or not.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lp_O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lp_O!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif 424w, https://substackcdn.com/image/fetch/$s_!lp_O!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif 848w, https://substackcdn.com/image/fetch/$s_!lp_O!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif 1272w, https://substackcdn.com/image/fetch/$s_!lp_O!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lp_O!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif" width="320" height="568" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64276365-9837-4a77-a56c-be55a979a222_320x568.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:568,&quot;width&quot;:320,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11538949,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://ctonuggets.com/i/192895502?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lp_O!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif 424w, https://substackcdn.com/image/fetch/$s_!lp_O!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif 848w, https://substackcdn.com/image/fetch/$s_!lp_O!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif 1272w, https://substackcdn.com/image/fetch/$s_!lp_O!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64276365-9837-4a77-a56c-be55a979a222_320x568.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><strong>Taste</strong></h1><p>When I say taste, I mean the accumulated judgment that comes from having personally broken things and lived with the consequences. Experienced engineers have battle scars.  They skipped tests because they were in a hurry and paid for it in a production incident. They built something that wasn't modular enough and had to rewrite half the system when the business requirements changed. They operated a service through a traffic spike and learned &#8212; viscerally, at 2am &#8212; exactly where the seams were. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ctonuggets.com/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">Thanks for reading! Subscribe for free to receive new posts and support my work.</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><p>Those experiences load something into a senior engineer&#8217;s brain that I can only describe as a <em>latent roadmap</em>.  It&#8217;s not written down anywhere. It&#8217;s a slow-burning awareness that runs quietly in the background. They&#8217;re implementing a feature and somewhere in the back of their mind a voice goes: <em>&#8220;this data model is going to hurt us when we need multi-tenancy&#8221;</em> or <em>&#8220;we&#8217;re going to regret this tight coupling.&#8221;</em> It&#8217;s there, running &#8212; and it wakes up at exactly the right moment, when a decision is about to get made that&#8217;s going to have consequences eighteen months from now. They also know when <em>not</em> to act on it. They can see the right long-term solution and still choose to defer it, because right now the business needs to ship. That&#8217;s years of calibration compressed into a gut feeling.</p><p>Let me give you a personal example. At one company I worked at, we had business logic hardcoded across web and mobile that should have been driven by a backend API. The team had been living with it for a while and nobody flagged it as a problem. To them, it was just how it worked. When I came in, something felt off immediately &#8212; built from years of seeing what happens when business logic lives in the client. One change in one place, reflected everywhere. Simple fix, but nobody saw it as a problem that needed solving.  Had I not stepped in, the AI assistant would have kept right on hardcoding that business logic &#8212; efficiently, consistently, confidently &#8212; every time a ticket came in. It was doing exactly what it was asked to do. The problem is nobody was asking the right question.</p><p>That&#8217;s the crux of it. Junior engineers don&#8217;t know they&#8217;re perpetuating a bad pattern because from where they&#8217;re standing, there is no bad pattern. The problem is invisible to them &#8212; and AI has no way to surface it, because it&#8217;s pattern-matching against the same codebase they&#8217;re looking at.</p><p>AI-native engineers, through no fault of their own, simply haven&#8217;t had the time to load that latent roadmap yet. This matters more now because AI removes the natural friction that used to slow bad decisions down. A problematic abstraction can now be replicated across a codebase in an afternoon. Tech debt doesn&#8217;t just accumulate &#8212; it compounds, silently, until refactoring isn&#8217;t a sprint task anymore but a quarter-long initiative that requires everyone to stop shipping and fix the foundation.</p><h1><strong>What Do You Do?</strong></h1><p>Get the latent roadmap out of people&#8217;s heads. Encourage senior engineers to name it out loud &#8212; in planning, in design reviews, in passing. <em>&#8220;Heads up, this is the kind of decision that tends to bite us in eighteen months.&#8221;</em> Over time, junior engineers absorb the reasoning, not just the rule &#8212; which is how they eventually build their own version of it.</p><p>Pair the people who have the scars with the people who are fast, as I&#8217;ve written about in <a href="https://ctonuggets.com/p/the-new-power-duo-of-pair-programming">The New Power Duo of Pair Programming</a>. AI-native engineers bring speed and tool fluency. Experienced engineers bring the latent roadmap and pattern recognition. The pairing isn&#8217;t about supervision &#8212; it&#8217;s about cross-pollination.</p><div><hr></div><p>AI isn&#8217;t going anywhere. The teams that get the most out of it are the ones who pair it with strong engineering culture, not the ones who use it as a substitute for one.</p><p>Taste still matters. Maybe now more than ever.</p><p>As always, ship it. </p><p>Matthew</p><p><em>At what point in your career did you start smelling problems rather than just seeing them?  How do you actively develop taste in your junior engineers?  Let&#8217;s discuss in the comments below.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ctonuggets.com/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">Thanks for reading! Subscribe for free to receive new posts and support my work.</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>]]></content:encoded></item><item><title><![CDATA[The New Power Duo of Pair Programming]]></title><description><![CDATA[One knows how to build it right. The other knows how to build it fast. You want both.]]></description><link>https://ctonuggets.com/p/the-new-power-duo-of-pair-programming</link><guid isPermaLink="false">https://ctonuggets.com/p/the-new-power-duo-of-pair-programming</guid><dc:creator><![CDATA[CTO Nuggets]]></dc:creator><pubDate>Thu, 26 Mar 2026 19:10:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0oG-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc470fde2-3693-4c96-9c60-177aa472faa1_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For a long time, pair programming between a senior and a junior was a bit like teaching someone to drive in your own car during rush hour. Technically productive. Mostly stressful. And the person who already knew how to drive was definitely not getting anywhere faster.</p><p>The incentive math was lopsided. The junior walked away with a month&#8217;s worth of lessons packed into a single afternoon. The senior walked away slightly behind on their sprint commitments and with a mild headache. Some companies quietly did the math and stopped hiring juniors.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ctonuggets.com/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">Thanks for reading! Subscribe for free to receive new posts and support my work.</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><p>Then AI showed up and flipped the whole equation.</p><h1><strong>The AI-Native Junior Is a Different Animal</strong></h1><p>A new kind of engineer has entered the chat &#8212; literally. They grew up prompting. They can spin up a working prototype before you&#8217;ve finished writing the ticket. They iterate fast, they ship fast, and they are genuinely, almost aggressively, unintimidated by a blank file.</p><p>Their gap? They have no intuition for what &#8220;good&#8221; looks like at scale.  Think of them like a race car driver who&#8217;s never changed a tire &#8212; thrilling to watch, right up until something breaks on the highway.</p><p>They&#8217;re not bad engineers. They just haven&#8217;t been burned enough times yet.</p><h1><strong>The Senior&#8217;s Blind Spot</strong></h1><p>On the other side of the table, you&#8217;ve got your experienced architects and senior+ engineers. Deep knowledge. Strong opinions. Battle scars from that one migration in 2019 that nobody talks about anymore.</p><p>Many of them are slow to adopt AI. Not because they&#8217;re lazy &#8212; they&#8217;re often the hardest working people in the room &#8212; but because they built their credibility on knowing things deeply. There&#8217;s a subtle identity threat in a tool that can approximate three years of accumulated knowledge in a single prompt. It feels like it&#8217;s cheapening something that was hard-won.</p><p>Here&#8217;s the honest truth though: if a junior can prototype in two hours what takes you two days, that gap is going to matter. The question isn&#8217;t whether AI is coming for your workflow. It&#8217;s whether you&#8217;re going to be the person who harnesses it or the person who explains to leadership why it doesn&#8217;t apply to your particular situation.</p><h1><strong>The New Pair Programming Duo</strong></h1><p>What if the lopsided math of traditional pairing finally got fixed?</p><p>Pair your AI-native junior with your systems-thinking senior. Not as a mentorship. Not as babysitting. As a genuine, bilateral skill exchange.</p><p>The senior brings: architectural instincts, an eye for long-term maintainability, the hard-won wisdom of knowing which shortcuts come back to haunt you six months later, and the ability to ask the uncomfortable &#8220;but what happens when this scales by 10x?&#8221; question before it becomes someone else&#8217;s 3am incident.</p><p>The junior brings: fluency in AI tooling, prompting patterns that actually work, an uncanny ability to iterate without ego, and a willingness to try things that a more experienced engineer might dismiss out of habit.</p><p>Neither person is the teacher. Both people are the student. That&#8217;s new, and actually exciting!</p><h1><strong>Why This Is a Win-Win-Win</strong></h1><p>The senior finally gets to harness AI without the steep learning curve of figuring it out alone. Their architectural instincts don&#8217;t get replaced &#8212; they get multiplied. Suddenly they&#8217;re not just the person who knows where the bodies are buried in the codebase. They&#8217;re the person who can also move fast enough to matter.</p><p>The junior gets something that used to take years: real-time, in-context exposure to systems thinking on actual production problems. Instead of slowly absorbing hard lessons over three years of being quietly corrected in code review, they&#8217;re getting the &#8220;why&#8221; in the room, in the moment, when it&#8217;s directly relevant to what they just built.</p><p>The company gets juniors who become net positive contributors faster, seniors who are dramatically more productive, and an org that isn&#8217;t quietly accumulating AI-induced tech debt because everyone was just prompting their way through things without any architectural guardrails.</p><p>It&#8217;s the first time in a while where both people in the pairing leave the session smarter than when they walked in.</p><h1><strong>How to Actually Make It Work</strong></h1><p>Good intentions don&#8217;t make good pairings. Here&#8217;s what does:</p><ul><li><p>Junior drives the keyboard, senior drives the thinking, both asking questions throughout</p></li><li><p>Senior&#8217;s job is to ask &#8220;what happens when...&#8221;</p></li><li><p>Review the AI&#8217;s output together before committing &#8212; this is where the most learning actually happens for both sides</p></li><li><p>5-minute retro at the end of every session: one AI thing the senior learned, one architecture thing the junior learned</p></li><li><p>Pick the right problems &#8212; greenfield features and architectural inflection points, not bug fixes</p></li><li><p>Rotate pairs every few months &#8212; let seniors pair with different juniors so the AI fluency spreads across the org, not just one relationship</p></li></ul><p>That last one is the most underrated. A single great pairing is a nice anecdote. Rotating it intentionally turns it into an org-wide capability upgrade. The goal isn&#8217;t one senior who&#8217;s good at AI. It&#8217;s a whole engineering culture that knows how to use it without losing the plot on what good software actually looks like.</p><div><hr></div><p>Every generation of engineers has had its version of "the thing the old guard resisted and the new guard couldn't live without." This is ours. The seniors who embrace it don't just stay relevant &#8212; they become the most dangerous people in the room. The juniors who get paired with them don't just grow faster &#8212; they skip entire chapters of the slow, painful learning curve that the rest of us had to slog through. That's not a productivity hack. That's a generational transfer of knowledge happening at AI speed.</p><p><em>Have you tried pairing with an AI-native engineer yet?  What surprised you?  Let&#8217;s discuss in the comments below.</em></p><p>As always, ship it. </p><p>Matthew</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ctonuggets.com/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">Thanks for reading! Subscribe for free to receive new posts and support my work.</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>]]></content:encoded></item><item><title><![CDATA[AI Swapped Out a Leg of the Stool. Scope is the New Bottleneck]]></title><description><![CDATA[Rethinking the Project Management Triangle in the Age of AI]]></description><link>https://ctonuggets.com/p/ai-swapped-out-a-leg-of-the-stool</link><guid isPermaLink="false">https://ctonuggets.com/p/ai-swapped-out-a-leg-of-the-stool</guid><dc:creator><![CDATA[CTO Nuggets]]></dc:creator><pubDate>Mon, 23 Mar 2026 13:20:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gYD8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>About 8 months ago I did something that wasn&#8217;t possible before. I picked up a language and framework I&#8217;d never really worked in and built a working API &#8212; not by learning it and reading documentations for weeks, but by having a conversation with AI. I was shipping real, functional code in hours.</p><p>I didn&#8217;t stop there.  With my team&#8217;s blessing and guidance, I started making meaningful changes in codebases I barely knew. I cleaned up years of accumulated tech debt and backfilled missing unit tests that had been on my team&#8217;s to-do list forever &#8212; work that would have taken weeks &#8212; and knocked it out in a few days while juggling my leadership duties.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ctonuggets.com/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">Thanks for reading! Subscribe for free to receive new posts and support my work.</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><p>If you&#8217;ve used AI coding tools seriously, you know exactly what I&#8217;m talking about. It feels like a cheat code.</p><p>But here&#8217;s the thing that&#8217;s been nagging at me: when code becomes this cheap and fast to produce, something else has to give.  I think we haven&#8217;t fully reckoned with what that is yet.</p><h1><strong>The 3-Legged Stool</strong></h1><p>There&#8217;s a concept I&#8217;ve always called the 3-legged stool of project management. The three legs are Scope, Time, and Resources.  The constraint is that you can only have two out of the three legs. Want to ship fast with a big scope? You&#8217;re going to need a lot of resources. Want to ship fast with a small team? You&#8217;re cutting scope. Want to do it all with limited resources? You&#8217;re going to be slow. Pick two. That&#8217;s always been the deal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v-vl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v-vl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!v-vl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!v-vl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!v-vl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v-vl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1512806,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://ctonuggets.com/i/191756399?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v-vl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!v-vl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!v-vl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!v-vl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0afa153f-7ae4-46f8-ae50-e8d633909a38_1408x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every engineering team lives inside this constraint whether they know it or not.</p><p>AI just swapped out a leg.</p><p>Resources &#8212; specifically the cost and speed of writing code &#8212; have been fundamentally disrupted. What used to take a week can take an afternoon. What used to require deep expertise in a framework can now be done by someone willing to have a detailed conversation with an AI tool. The marginal cost of a unit of code is approaching zero.</p><p>So if Resources are no longer the binding constraint, something has to take its place. I&#8217;d argue that something is Quality. The stool still has three legs. They&#8217;re just not the same three legs anymore: <strong>Scope, Time, and Quality.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gYD8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gYD8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!gYD8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!gYD8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!gYD8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gYD8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1501921,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://ctonuggets.com/i/191756399?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gYD8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!gYD8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!gYD8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!gYD8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2ec5a-a841-4da9-a859-ef22524b2b06_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The biggest threat to that new Quality leg? Scope. Left unchecked, Scope is what will squeeze Quality out of the picture entirely.</p><h1><strong>Why Scope Creep is the New Bottleneck</strong></h1><p>Here&#8217;s what happens when code gets cheap: everyone suddenly has more ideas. The PM wants two more features. The CEO wants a dashboard. The designer has &#8220;one small tweak.&#8221; Why not? It&#8217;s so easy now, right?</p><p>This is the trap. Cheap code doesn&#8217;t mean cheaper decisions. Every feature you add still has to be reviewed, tested, integrated, maintained, and understood by your team six months from now. The thinking, the judgment, the tradeoffs &#8212; AI doesn&#8217;t do any of that for you. Scope creep has always been dangerous. With AI it becomes supercharged, because the usual forcing function &#8212; &#8220;we don&#8217;t have the bandwidth&#8221; &#8212; is suddenly a lot harder to say with a straight face.</p><p>This is exactly where Quality gets squeezed. AI-generated code can be fast, voluminous, and subtly wrong all at the same time. I believe AI will get much better in short order, but the reality now is that the more scope you allow in, the more surface area you create for things to go sideways.</p><h2><strong>So What Do You Actually Do With This?</strong></h2><p>A few things I am telling my team right now:</p><p><strong>Be more ruthless about scope than ever before.</strong> The temptation to pile on is real and it will kill you. Define what you&#8217;re building, lock it, and defend it like your quality depends on it &#8212; because it does.</p><p><strong>Keep your PRs as tight as they were before.</strong> Just because AI makes it easy to write or update a lot of code at once doesn&#8217;t mean you should cram it all into one PR. Keep the same discipline you had before &#8212; focused, contained, reviewable. Your teammates still have to read that code. Split up your PRs the way you always did. If your review bar is already high (raise it if not), then it doesn&#8217;t need to change much.  Keep your PRs tight and your review process should stay as smooth as it always was.</p><p><strong>Recognize where the real constraint moved.</strong> It&#8217;s not code anymore. It&#8217;s judgment &#8212; yours, your team&#8217;s, your senior engineers&#8217;. That&#8217;s the scarce resource now. Protect it accordingly.</p><p>AI swapped out a leg of the stool. Resources is out. Quality is in.  Scope is the thing that will topple it if you're not watching.</p><div><hr></div><p><em>How is AI changing how you think about scope and quality on your team? I&#8217;d love to hear what you&#8217;re seeing in the trenches.</em></p><p><em>As always, ship it.</em></p><p>Matthew</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ctonuggets.com/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">Thanks for reading! Subscribe for free to receive new posts and support my work.</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>]]></content:encoded></item><item><title><![CDATA[Hey, I'm Matthew 👋]]></title><description><![CDATA[Here's why I started CTO Nuggets]]></description><link>https://ctonuggets.com/p/hey-im-matthew</link><guid isPermaLink="false">https://ctonuggets.com/p/hey-im-matthew</guid><dc:creator><![CDATA[CTO Nuggets]]></dc:creator><pubDate>Wed, 18 Mar 2026 16:02:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0oG-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc470fde2-3693-4c96-9c60-177aa472faa1_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve spent the last 23 years knee-deep in code, architecture decisions, and the beautiful mess of building and leading engineering teams. And if there&#8217;s one thing I&#8217;ve learned, it&#8217;s that the best lessons don&#8217;t come from textbooks &#8212; they come from the moments when everything is on the line and you have to figure it out in real time.</p><p>I&#8217;m <a href="https://www.linkedin.com/in/mcschan">Matthew Chan</a>. Here&#8217;s the quick version of my story: I started as engineer #3 at <a href="https://www.wattpad.com">Wattpad</a>, where I helped scale the platform from 2 million to 60 million monthly active users. That experience was a masterclass in what happens when growth outruns your architecture &#8212; and how to stay ahead of it. From there I moved into engineering management, led teams at <a href="https://choosemuse.com/">Muse</a> and <a href="https://league.com/">League</a>, and eventually became CTO of <a href="https://techcrunch.com/2021/01/25/blackcart-raises-8-8m-series-a-for-its-try-before-you-buy-platform-for-online-merchants/">Blackcart</a>, where I built and led the product and engineering orgs that powered try-before-you-buy for leading Shopify merchants. These days I&#8217;m Head of Funding Engineering at <a href="https://www.gemini.com/">Gemini</a>, leading an org that powers fiat movement across the global crypto exchange.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ctonuggets.com/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">Thanks for reading! Subscribe for free to receive new posts and support my work.</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><p>I&#8217;m all in on AI. I use it every day and it&#8217;s changing how I lead, how my teams ship, and how I think about managing people and systems. You&#8217;ll hear a lot about that here  &#8212; the wins, the pitfalls, and many open questions.</p><p>Also, I&#8217;m an angel investor, fractional CTO, and startup advisor. If you&#8217;re an early-stage founder trying to figure out your technical strategy, hiring your first engineers, or just need a seasoned sounding board &#8212; I&#8217;d love to <a href="https://www.linkedin.com/in/mcschan">connect</a>.</p><p>Along the way I founded a STEM education company &#8212; seven locations, 1,700+ students a year, 30+ instructors &#8212; because apparently I don&#8217;t like having free time.</p><p>Outside of work, I&#8217;m a dad of two boys, which has honestly taught me more about patience, negotiation, and managing chaos than any leadership course ever could. A few years ago my family and I packed up our life in Toronto and moved to New York &#8212; a transition that was equal parts exciting and terrifying, kind of like every major engineering decision I&#8217;ve ever made.</p><p>But none of those wins came easy. They came from hard conversations, bad calls, late-night outages, and a whole lot of trial and error. And that&#8217;s exactly what this blog is about.</p><p>Whether you&#8217;re a new engineering manager trying to figure out how to give your first piece of tough feedback, a startup CTO holding together a product that&#8217;s scaling faster than your team can handle, or a Director of Engineering trying to keep 200 people rowing in the same direction &#8212; this blog / newsletter is for you.</p><p>Every post is going to be practical, real, and a little bit battle-scarred. No theory for theory&#8217;s sake. No fluff. Just nuggets from the weeds &#8212; real talk for engineers who lead.</p><p>Let&#8217;s get into it! </p><p>&#8212; Matthew</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://ctonuggets.com/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">Thanks for reading! Subscribe for free to receive new posts and support my work.</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>]]></content:encoded></item></channel></rss>