<?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[The Stoic Coder]]></title><description><![CDATA[Welcome to where Stoic philosophy meets productivity, career growth, and balanced living. ]]></description><link>https://thestoiccoder.michaelclawrence.com</link><image><url>https://substackcdn.com/image/fetch/$s_!yamP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d31dcfd-84f4-4e2c-943b-54bad701f1de_512x512.png</url><title>The Stoic Coder</title><link>https://thestoiccoder.michaelclawrence.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 15 Jul 2026 03:20:55 GMT</lastBuildDate><atom:link href="https://thestoiccoder.michaelclawrence.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Michael Lawrence]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[thestoiccoder@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[thestoiccoder@substack.com]]></itunes:email><itunes:name><![CDATA[Michael Lawrence]]></itunes:name></itunes:owner><itunes:author><![CDATA[Michael Lawrence]]></itunes:author><googleplay:owner><![CDATA[thestoiccoder@substack.com]]></googleplay:owner><googleplay:email><![CDATA[thestoiccoder@substack.com]]></googleplay:email><googleplay:author><![CDATA[Michael Lawrence]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Post-Mortem Isn't About the Bug]]></title><description><![CDATA[The outage was a missing index. The hard part was the sentence after.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-post-mortem-isnt-about-the-bug</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-post-mortem-isnt-about-the-bug</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 12 Jul 2026 11:45:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ytOt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.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://substackcdn.com/image/fetch/$s_!ytOt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ytOt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!ytOt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!ytOt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!ytOt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ytOt!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:2419470,&quot;alt&quot;:&quot;A single weathered keystone locked at the crown of an ancient stone arch&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/206568525?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A single weathered keystone locked at the crown of an ancient stone arch" title="A single weathered keystone locked at the crown of an ancient stone arch" srcset="https://substackcdn.com/image/fetch/$s_!ytOt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!ytOt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!ytOt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!ytOt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4401d0c1-85f2-4bc7-891f-8e06a3e777a2_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p><span>The system ground to a halt on a slow query. A table I owned had grown too big to scan the way the query was scanning it, and I had never added the index that would have kept it fast. Under light load, nobody would have noticed. Under real load, it fell over, and everything behind it fell over too.</span></p><p><span>We fixed it. That is almost never the hard part. The hard part is the meeting afterward, where everyone sits down to work out what happened. My turn came, and there was nothing to work out. I knew exactly what it was. So I said it. That was me. Then I gave them the detail: I missed the index.</span></p><p><span>Three words. They should be the easiest three words in the room, and they are the hardest, because most people cannot make themselves say them clean.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-post-mortem-isnt-about-the-bug?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://thestoiccoder.michaelclawrence.com/p/the-post-mortem-isnt-about-the-bug?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong><span>The Reflex That Is the Real Failure</span></strong></h2><p><span>Watch what happens when a mistake has an owner and the owner starts to talk. The admission almost never comes alone. It comes with reasons. There was a lot going on that sprint. The ticket didn&#8217;t mention the growth projections. Nobody flagged it in review. The staging data was too small to catch it. Every one of those might be true. None of them </span><em><span>is</span></em><span> the admission.</span></p><p><span>Those reasons are not lies. They are a way to put distance between you and the mistake, because in that moment the two feel like the same thing. If I broke it, then I am the guy who breaks things. So the explanation comes first, to take the hit before the admission lands.</span></p><p><span>That reflex is the real failure in the room. Not the outage. The outage was a missing index, a known, boring, solvable thing. Spreading a mistake around until no one quite holds it, that is what makes a post-mortem useless. A mistake that belongs to everyone belongs to no one, and nothing that belongs to no one gets fixed.</span></p><h2><strong><span>Owning It Flat</span></strong></h2><p><span>Here is where the oldest idea in Stoicism does real work. The mistake is already in the past. It happened. It is done. It is no longer one of the things you can act on. You cannot un-ship it. You cannot argue it back into staging. It is outside your control now.</span></p><p><span>What is still yours is your response to it. That is the part you control, and it is the only part you were ever going to control. So the clean sentence is not you exposing yourself. It is you being accurate. &#8220;I made a mistake&#8221; describes something that happened. &#8220;I am the mistake&#8221; is a claim about who you are. They are not the same claim, and the practice is keeping them apart.</span></p><p><span>Once you see that, the flat sentence costs almost nothing. That was me. I missed the index. Nobody&#8217;s character is on trial. There is a cause, and there is a person who is going to help make sure it does not happen again. You say it the way you would report the query time. It is just another fact about the system.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-post-mortem-isnt-about-the-bug/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://thestoiccoder.michaelclawrence.com/p/the-post-mortem-isnt-about-the-bug/comments"><span>Leave a comment</span></a></p><h2><strong><span>What the Flat Sentence Does to the Room</span></strong></h2><p><span>I used to think owning a mistake cleanly was a personal thing, a matter of not being a coward. It is more than that. It is the most useful thing you can do for everyone else at the table.</span></p><p><span>Marcus Aurelius kept coming back to a distinction that turns on a single letter. In Greek, he wrote, you can call yourself a limb of the body of rational beings, </span><em><span>melos</span></em><span>, or just a part of it, </span><em><span>meros</span></em><span>. A part sits next to the other parts. A limb belongs to them. When one limb takes a hit, it takes the hit so the body keeps working. (Meditations 7.13.)</span></p><p><span>That is what clean ownership does in a post-mortem. When you take the mistake plainly and completely, you end the search before it starts. Nobody has to work out whose fault it was. Nobody has to defend themselves. Nobody has to avoid saying your name while everyone in the room already knows it. You said it. There is nothing left to sort out, so the room stops looking and starts fixing. One limb took the hit. Everyone else keeps working.</span></p><p><span>People treat accountability as a cost they pay. It is not a cost. It is the fastest way to get the room to the only conversation worth having, which is how to stop this from happening again.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong><span>Why Process Over Person Actually Works</span></strong></h2><p><span>The best post-mortems I have sat in did not spend their time on people at all. They went straight to the process. Why did staging data not look like production? Why was there no check on query time before a table shipped? What guardrail would have caught this without anyone having to be a hero? The failure was treated as a condition to design around, not a moral event.</span></p><p><span>It is tempting to credit that to everyone agreeing to be kind. That is not what makes it work. A room stays on the process because someone shows them how first. When the person closest to the mistake owns it flat, with no excuses and no spiral, everyone else sees that owning it is survivable. You can say it was you and still be standing, still trusted, still useful. After that, people stop bracing. The thing they were afraid of, being named, already happened to someone, and he is fine.</span></p><p><span>You cannot get that from a policy. Blamelessness is not a rule you put on the wall. It is something a senior person creates, in real time, by how they handle their own mistakes in front of everyone. A junior who watches you own the index this cleanly learns more about the job in that moment than in a month of code review.</span></p><p><span>The bug was a missing index. That got fixed the same afternoon. The thing worth practicing was never the fix. It was the three words, said flat, that let the room get to it.</span></p><div><hr></div><p><span>&#128073; If you enjoy reading this post, feel free to share it with friends!</span></p><p><span>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</span></p><p><span>You can find me on </span><a href="https://x.com/michael_c_law"><span>X</span></a><span> and </span><a href="https://www.instagram.com/michael_c_law/"><span>Instagram</span></a><span>.</span></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[The One Feature Built Different]]></title><description><![CDATA[A stable system, a decade of experience, and one decision to be interesting.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-one-feature-built-different</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-one-feature-built-different</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 05 Jul 2026 11:42:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!K8AV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.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://substackcdn.com/image/fetch/$s_!K8AV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K8AV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png 424w, https://substackcdn.com/image/fetch/$s_!K8AV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png 848w, https://substackcdn.com/image/fetch/$s_!K8AV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png 1272w, https://substackcdn.com/image/fetch/$s_!K8AV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K8AV!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png" width="1200" height="671.7032967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:8053267,&quot;alt&quot;:&quot;A weathered stone wall built in long uniform courses, every block cut and aged the same way, &quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/205046583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A weathered stone wall built in long uniform courses, every block cut and aged the same way, " title="A weathered stone wall built in long uniform courses, every block cut and aged the same way, " srcset="https://substackcdn.com/image/fetch/$s_!K8AV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png 424w, https://substackcdn.com/image/fetch/$s_!K8AV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png 848w, https://substackcdn.com/image/fetch/$s_!K8AV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png 1272w, https://substackcdn.com/image/fetch/$s_!K8AV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fa299c6-74c1-4c8c-b48b-a44b575218ce_2944x1648.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p><span>The application was built in 2005. WebForms, the way everything was built then. It was a work order automation system I&#8217;d helped build, and by the time this happened it had been running in production for years. Large, stable, understood. Every screen worked the way every other screen worked. A developer who had never seen a particular corner of it could still find their way around, because there were no particular corners. It was all one thing.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-one-feature-built-different?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://thestoiccoder.michaelclawrence.com/p/the-one-feature-built-different?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p><span>I had been writing software for ten years.</span></p><p><span>The feature itself was small. A new piece of the workflow, the kind of thing the system absorbed a few times a year without anyone noticing. I could have built it the way the rest of the application was built. I knew how. I&#8217;d done it a hundred times, and that was most of the reason I didn&#8217;t want to.</span></p><p><span>The standard approach would have worked, and it would have taken an afternoon. Some part of me had started to read that as the problem rather than the point. Doing the known thing felt like going through the motions. Reaching for something new felt like doing real work. I told myself the feature would be better for it, more responsive, more capable, and there was a version of that I could have defended. It wasn&#8217;t the version I was actually running on.</span></p><p><span>I reached for Ember. It was new then, one of the first JavaScript frameworks promising to make the browser behave like an application instead of a document. I wired it into the feature. I added a build step to our process to minify the JavaScript, tooling that had never existed in our pipeline because nothing in the pipeline had ever needed it. On my machine it was clean and fast. It felt like the right kind of modern, the kind you can point at. I was pleased with it.</span></p><p><span>It went to production and could not carry the load.</span></p><p><span>This was an intranet system. We controlled the browsers. We controlled the machines, the network, the whole environment end to end. There was no hostile variable, no user on some ancient laptop to point at. It was a closed room, and inside that closed room the feature buckled under the volume of data the real workflow ran through it. The thing that moved fine against a handful of test records would not move against what the job actually required.</span></p><p><span>The load problem was immediate. The other one took longer to surface.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-one-feature-built-different/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://thestoiccoder.michaelclawrence.com/p/the-one-feature-built-different/comments"><span>Leave a comment</span></a></p><p><span>The application had been consistent, and now it wasn&#8217;t. There was a single feature that didn&#8217;t work like the others, built on tooling nobody else had a reason to know, sitting inside a system whose whole value was that you never had to relearn it from one screen to the next. Anyone who needed to touch that feature had to stop first and learn a framework, a build step, a set of conventions that lived nowhere else in the codebase and served nothing except the feature I&#8217;d decided to make interesting. Every hour someone spent in there was an hour the rest of the system had never charged anyone.</span></p><p><span>So I took it out. I rebuilt the feature the way the rest of the application worked, on the tooling the whole team already knew. It did the job.</span></p><p><span>The people who had signed off on the timeline were not glad to spend weeks rebuilding something that had already shipped once. The client, who I&#8217;d had a good relationship with, was cooler with me afterward than before.</span></p><p><span>The rebuild took the better part of a few weeks, and at the end of it the feature worked exactly the way everything else in the application had worked the entire time.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><p><span>&#128073; If you enjoy reading this post, feel free to share it with friends!</span></p><p><span>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</span></p><p><span>You can find me on </span><a href="https://x.com/michael_c_law"><span>X</span></a><span> and </span><a href="https://www.instagram.com/michael_c_law/"><span>Instagram</span></a><span>.</span></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[The Compiler Doesn't Care What You Think]]></title><description><![CDATA[The oldest idea in Stoicism is running in your CI pipeline.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-compiler-doesnt-care-what-you</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-compiler-doesnt-care-what-you</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 28 Jun 2026 11:45:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uaq_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.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://substackcdn.com/image/fetch/$s_!uaq_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uaq_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png 424w, https://substackcdn.com/image/fetch/$s_!uaq_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png 848w, https://substackcdn.com/image/fetch/$s_!uaq_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png 1272w, https://substackcdn.com/image/fetch/$s_!uaq_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uaq_!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png" width="1200" height="671.7032967032967" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:7788506,&quot;alt&quot;:&quot;Weathered ancient stone block, rough sun-bleached limestone, a set of perfectly straight parallel grooves cut precisely into the eroded surface&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/203827029?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="Weathered ancient stone block, rough sun-bleached limestone, a set of perfectly straight parallel grooves cut precisely into the eroded surface" title="Weathered ancient stone block, rough sun-bleached limestone, a set of perfectly straight parallel grooves cut precisely into the eroded surface" srcset="https://substackcdn.com/image/fetch/$s_!uaq_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png 424w, https://substackcdn.com/image/fetch/$s_!uaq_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png 848w, https://substackcdn.com/image/fetch/$s_!uaq_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png 1272w, https://substackcdn.com/image/fetch/$s_!uaq_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f940a83-14ea-40a9-830b-39f4295d454c_2944x1648.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p><span>You can talk your way past almost anyone.</span></p><p><span>You can talk your way past a code reviewer who is tired and trusts you. Past a manager who wants the ticket closed more than he wants it right. Past a stakeholder who cannot read the diff and is nodding because the demo looked fine. You can talk your way past the part of yourself that is sure, completely sure, that the logic is sound.</span></p><p><span>You cannot talk your way past a failing test.</span></p><p><span>Twenty-five years in, that is still the thing I trust most in this work. Not a person. The build. It does not care how confident I was. It does not care how late it is or how badly I need to be right. It tells me I am wrong, flatly, and it does not soften the blow. I have spent a good part of my career being corrected by a machine that holds no opinion about me at all, and it has made me better than feedback from any person ever did.</span></p><p><span>I want to talk about why that is, because I think it is the closest thing developers have to a daily spiritual practice, and almost nobody names it as one.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-compiler-doesnt-care-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://thestoiccoder.michaelclawrence.com/p/the-compiler-doesnt-care-what-you?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong><span>The Order That Does Not Need Your Permission</span></strong></h2><p><span>There is a word at the bottom of Stoicism that the productivity version always skips. Logos.</span></p><p><span>The Stoics took it from Heraclitus, who used it to mean something like the rational order running underneath everything. His complaint, twenty-five centuries ago, was that people sleepwalk past it. He wrote that although all things come to pass according to the logos, men prove uncomprehending of it, both before they hear it and after they have heard it. The order is there whether you grasp it or not. Most people, he said, live as if they had a private understanding: their own little version of how things work, never checked against how things actually are.</span></p><p><span>The Stoics built their entire ethics on top of that. Zeno said the goal of a life was to live in agreement with nature, and by nature he meant this same rational order. Your own reason is a fragment of it. Wisdom is not inventing your own truth. It is getting your mind to agree with a structure that was already there before you showed up.</span></p><p><span>That sounds abstract until you realize you do it for a living.</span></p><p><span>Strip away the metaphysics and logos is just this: reality has a structure, your reasoning is either aligned with it or it isn&#8217;t, and you are not the one who gets to decide which. You can believe the null check is unnecessary. The null pointer disagrees, and the null pointer wins. Every single time.</span></p><h2><strong><span>Code is Where the logos is Legible</span></strong></h2><p><span>In most of life you never find out whether you reasoned well. You make a decision and the result comes back months later, tangled up with luck and other people and a hundred things you did not control. You can be wrong for years and never know it, because nothing ever told you cleanly. You parented well or badly, you bet on the right company or the wrong one, and the feedback is so slow and so noisy that you can believe almost anything about yourself and never get caught.</span></p><p><span>Code does not work like that. Code answers.</span></p><p><span>You hold a belief about how the system behaves. You run it. It tells you, immediately and without mercy, whether your belief matched reality. Then you do it again. And again. A working developer runs that loop thousands of times a year. Thousands of small confrontations between what you thought was true and what is actually true, each one settled on the spot by a judge that cannot be charmed, cannot be worn down, and does not know your name.</span></p><p><span>Epictetus said the rational faculty is the only one we have that examines itself and everything else. It is the faculty that judges the other faculties, the one that asks whether a thing is true before accepting it. He said the first task of a philosopher is to test every impression and admit none untried. Accept nothing just because it arrived in your head looking confident.</span></p><p><span>That is not a meditation exercise to a developer. That is Tuesday. Testing impressions and admitting none untried is the literal description of the job. An impression arrives: this function is correct. You do not get to assent to it because it feels right. You run it. You let the indifferent judge rule. The compiler is Epictetus with a stack trace.</span></p><p><span>So this is the part I actually believe, the part that is more than a clever overlay. You have been running a logos practice your entire career. Every time you reasoned through a hard problem by hand, got it wrong, felt the friction, and corrected, you were doing the exact thing the Stoics spent their lives trying to train. You were dragging your private understanding into agreement with the way things really are, and you had an honest judge keeping you honest the whole time. Most people never get that. They live whole lives without a single domain that tells them the truth that fast.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-compiler-doesnt-care-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://thestoiccoder.michaelclawrence.com/p/the-compiler-doesnt-care-what-you/comments"><span>Leave a comment</span></a></p><h2><strong><span>What the Green Check Used to Mean</span></strong></h2><p><span>The replacement story is loud. The story I care about is the one where the judge is still there but you have stopped letting it judge you.</span></p><p><span>When you generate code you did not reason through, you still get the green check. The tests still pass. The build still goes green. But that signal used to mean something specific. It meant your reasoning aligned with reality. It was a verdict on your thinking. Now it can mean that some reasoning aligned with reality, and you honestly do not know whose, or how, or whether you could reconstruct it when the thing breaks at two in the morning.</span></p><p><span>You keep the artifact of logos. You quietly lose the practice of it.</span></p><p><span>This is not the vague worry that your skills will rust. It is more precise than that. The specific thing you lose is the honest feedback loop. The thousands of small corrections that were sharpening your reason go away, because you are no longer the one reasoning. The confrontation between your belief and reality does not happen, because you never formed the belief. The judge is still ruling. It is just no longer ruling on you.</span></p><p><span>And here is the cruel part. It feels like progress. The green check still appears. The work still ships. Nothing tells you cleanly that you have stepped out of the loop, for the same reason nothing in ordinary life tells you cleanly that you reasoned badly. You have traded the one domain that always told you the truth for one more domain where you can be wrong for years and never find out.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong><span>Keep letting it judge you</span></strong></h2><p><span>Logos, for a developer, is not a poster on the wall about rational order. It is the daily willingness to put your own reasoning in front of a judge that does not care how you feel about it, and to let the verdict land. That willingness is the whole practice. It is what Heraclitus was begging people to stop sleepwalking past. It is what Zeno meant by living in agreement with something larger than your own preferences. It is what Epictetus meant by admitting no impression untried.</span></p><p><span>The compiler does not care what you think. That was always the gift. It is an honest judge in a world that mostly hands you flattery and delay, and it has been making you sharper for as long as you have let it.</span></p><p><span>So the only question worth asking is whether you are still letting it. Are you putting your reasoning in front of the judge, or are you handing the test to something that takes it for you and brings back a passing grade you did not earn?</span></p><p><span>Keep doing the reasoning in the one place reality can still tell you that you are wrong. It is the most honest relationship you have at work. Do not automate your way out of it.</span></p><div><hr></div><p><span>&#128073; If you enjoy reading this post, feel free to share it with friends!</span></p><p><span>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</span></p><p><span>You can find me on </span><a href="https://x.com/michael_c_law"><span>X</span></a><span> and </span><a href="https://www.instagram.com/michael_c_law/"><span>Instagram</span></a><span>.</span></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[The Two-Second Decision]]></title><description><![CDATA[AI isn't the villain. The order is everything.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-two-second-decision</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-two-second-decision</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 21 Jun 2026 11:45:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AZ-4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.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://substackcdn.com/image/fetch/$s_!AZ-4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AZ-4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png 424w, https://substackcdn.com/image/fetch/$s_!AZ-4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png 848w, https://substackcdn.com/image/fetch/$s_!AZ-4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!AZ-4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AZ-4!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png" width="1200" height="511.8131868131868" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:621,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:8768988,&quot;alt&quot;:&quot;An ancient weathered stone path splitting into two diverging routes, worn smooth by centuries, one branch polished and easy&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/202874858?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="An ancient weathered stone path splitting into two diverging routes, worn smooth by centuries, one branch polished and easy" title="An ancient weathered stone path splitting into two diverging routes, worn smooth by centuries, one branch polished and easy" srcset="https://substackcdn.com/image/fetch/$s_!AZ-4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png 424w, https://substackcdn.com/image/fetch/$s_!AZ-4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png 848w, https://substackcdn.com/image/fetch/$s_!AZ-4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!AZ-4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec9529f0-fbc3-414a-a3f1-dcc3d4db52a5_3376x1440.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>You&#8217;re in the middle of something and you hit a wall. A function that won&#8217;t behave. An error that makes no sense. A concept you were sure you understood and clearly don&#8217;t.</p><p>There&#8217;s a fork right here, and it lasts about two seconds.</p><p>One path: you paste it into the AI and read back the answer. The other: you sit in the confusion and start taking it apart yourself. Most people never experience this as a choice. The hand moves before the mind weighs in. That reflex is the whole thing I want you to notice.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-two-second-decision?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://thestoiccoder.michaelclawrence.com/p/the-two-second-decision?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p>Because the answer was never the point. In those two seconds, something is being built or skipped: your ability to work a problem when there is nothing and no one to hand you the result. Each instance is tiny. You will never feel the one you skip today. They compound anyway, in whatever direction you keep choosing.</p><p>I am not telling you to close the tab. AI is not the villain here. The order is the only thing that matters. After you have wrestled with the problem, the tool is a sharp check on your thinking. Before you have wrestled with it, the same tool is a quiet substitute for the thinking. Same input, opposite result, and the only variable is what you did in those two seconds.</p><p>So this week, watch your own hands. The next time you get stuck, notice what reaches for the keyboard before you have decided anything at all.</p><p>Then tell me: the last time you hit something you didn&#8217;t understand, what did you reach for first?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-two-second-decision/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://thestoiccoder.michaelclawrence.com/p/the-two-second-decision/comments"><span>Leave a comment</span></a></p><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[Most of Your Life Is the Boring Work]]></title><description><![CDATA[The Emptiest Days Are the Ones That Felt Full]]></description><link>https://thestoiccoder.michaelclawrence.com/p/most-of-your-life-is-the-boring-work</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/most-of-your-life-is-the-boring-work</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 14 Jun 2026 11:45:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AliE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.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://substackcdn.com/image/fetch/$s_!AliE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AliE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!AliE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!AliE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!AliE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AliE!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1599996,&quot;alt&quot;:&quot;A worn stone staircase inside an ancient building, each step hollowed and smoothed by countless footsteps over generations&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/201887363?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A worn stone staircase inside an ancient building, each step hollowed and smoothed by countless footsteps over generations" title="A worn stone staircase inside an ancient building, each step hollowed and smoothed by countless footsteps over generations" srcset="https://substackcdn.com/image/fetch/$s_!AliE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!AliE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!AliE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!AliE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ed5780c-564a-4cbb-b9e3-a7d48dba9bbc_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Twenty-five years in, the numbers stop being abstract. You can count the systems you have left in you. Not precisely, but closely enough. A handful more big builds, some number of years of maintenance and review and the slow work of handing things off, and then the count runs out. The runway is visible from here in a way it never was at year 10.</p><p>The thing nobody mentions when they talk about finding your purpose: most of the hours you have left are going to be spent on work that does not matter very much. The CRUD app. The migration nobody will remember. The ticket that closes another ticket. You are going to die, and a large share of your remaining finite time is going to go to the unremarkable middle of the job.</p><p>So the honest version of memento mori is not the inspirational one. It is the uncomfortable question the inspirational version skips. You will die. Should you really be spending a Tuesday on this?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/most-of-your-life-is-the-boring-work?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://thestoiccoder.michaelclawrence.com/p/most-of-your-life-is-the-boring-work?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The answer that&#8217;s true but not enough</strong></h2><p>There is an answer to that question that I have given before, and it is true. Your time is finite and nonrefundable. If the work is hollow all the way down, if you are trading your one life for a paycheck and calling it safety, then the running out of time is the argument to leave. To go do the work that is actually yours. I stand by that. I am not going to walk it back here, because walking it back would be a lie, and most people sitting in a job they have outgrown already know it.</p><p>But it is not the whole truth. The clean version, just leave, assumes an escape that is not always available and not always right. You have obligations. You have people who depend on the paycheck landing. You are good at something the world pays for and indifferent to most of what it would pay you to be passionate about. The follow-your-passion promise, the one where the work stops feeling like work, is mostly sold by people who already escaped, to people who cannot. For most working developers, most of the time, the ordinary work is not a phase to be exited. It is the job. It is going to stay the job.</p><h2><strong>You can&#8217;t make it permanent</strong></h2><p>So if you cannot reliably escape the ordinary work, the next move people reach for is to redeem it. To make it matter by making it permanent. To build something that outlasts them.</p><p>I have made the case elsewhere that this does not work, and I will not relitigate it. Your code dies. The framework you mastered will go obsolete, the clever system you are proud of will be deleted or rewritten by someone who curses your name, and the monument you are quietly trying to build out of source code has the structural integrity of a sandcastle at high tide. Permanence is not on the menu. If the meaning of your work depended on it lasting, the work would be meaningless, because none of it lasts.</p><p>Which seems to leave nothing. You cannot escape the ordinary hours and you cannot immortalize them. That looks like a dead end. It is actually the whole point.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/most-of-your-life-is-the-boring-work/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://thestoiccoder.michaelclawrence.com/p/most-of-your-life-is-the-boring-work/comments"><span>Leave a comment</span></a></p><h2><strong>Occupied is not the same as alive</strong></h2><p>Seneca put the diagnosis better than anyone has since. The problem was never that we get a short life. The problem is that we waste most of the one we get. He had a word for the people who fill their days with motion and call it living: occupatus. Occupied. Busy with everything, present for none of it, mistaking the volume of activity for the substance of a life. The occupied man, he observed, is the least equipped of all to die, because he has not yet gotten around to living.</p><p>You have had this day. The one where you went heads-down at nine and looked up at six and could not name a single thing you would defend. Standup, then three meetings, then forty Slack threads, then a dozen ticket comments and two context switches per hour, and somewhere in there your actual work waited and did not get done. That day felt full. It was the emptiest kind of day there is. That is occupatus, and the modern toolchain is a machine for manufacturing it.</p><p>We have never had more ways to be busy and call it work.</p><p>The Stoic move out of it is the one the whole tradition turns on, and it is not the bumper-sticker version about staying calm. It is a sorting. The outcome of your work, whether the system ships, whether anyone notices, whether it survives the next reorg, is not up to you and never was. It is a preferred indifferent. Nice to have, not the thing of value. What is up to you is the quality of attention and judgment you bring to the hours while you are inside them. That is the only part death does not get a vote on.</p><p>This is where it stops being abstract. Marcus Aurelius told himself to perform each action as if it were the last of his life, with dignity and full focus, free of the desire to impress anyone and free of resentment at his own circumstances. Read that as a productivity hack and you miss all of it. He was not talking about doing more. He was talking about how you occupy the present action, including a boring one, including one nobody will ever praise. The CRUD app does not become important. Your conduct inside it is the only place your character actually exists.</p><p>How you spend the hours is not the preparation for the life. It is the life. There is nothing else it is made of. A career is not the few significant projects with the forgettable work in between. It is the forgettable work, almost all the way down, and the only open question is whether you were present and honest and careful inside it, or whether you were merely occupied, waiting for the part that mattered to finally arrive.</p><h2><strong>The only thing that survives</strong></h2><p>That still leaves the legacy question, the one that gets sharper the closer you get to the end of the count. If the code does not last, what does?</p><p>The only thing I have watched survive is the people.</p><p>Not in a sentimental way. In a specific, observable one. The judgment you built over a long time, the thing that catches the missing null check in twelve seconds, the instinct for which corner of the system is about to rot, you cannot ship that in source code. But you can hand it to a person. Working next to someone, slowly, the way it was once handed to you. Debugging out loud so a junior watches how you think instead of just what you typed. Letting someone sit in the confusion long enough to form the muscle, instead of handing over the answer because it is faster and the sprint is ending. Most of what your best mentors gave you was not information. It was a way of seeing, transmitted through proximity, and it outlived every system the two of you ever touched.</p><p>That is a legacy precisely because it was never yours to keep. You do not own it once it is transmitted. It walks out of the building in someone else&#8217;s head and surfaces years later in a decision you will never see, made by someone who may not remember where they learned it. The code was always going to die. The person carries it forward, and does not need your name attached for it to have been worth doing.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>The hours pass either way</strong></h2><p>None of this resolves the first question, and I am not going to pretend it does. The CRUD app may still not be worth your one finite life. If it is hollow all the way down, leave, the way I said before. That tension does not close, and you should be suspicious of anyone who tells you it does.</p><p>But for the ordinary work you are not going to escape, the work that is simply the job, mortality does not make it significant and it does not hand you permission to phone it in until something better shows up. It clarifies the only thing that was ever in your hands. The hours are going to pass either way. You will spend them lived, or you will spend them merely occupied. Death decides the number. You decide the rest.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;It is not that we have a short time to live, but that we waste a lot of it.&#8221; - Seneca</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[The Fraud Was the Confidence]]></title><description><![CDATA[The doubt you feel now is the most accurate read of the work you've ever had.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-fraud-was-the-confidence</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-fraud-was-the-confidence</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 07 Jun 2026 11:45:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dHVY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.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://substackcdn.com/image/fetch/$s_!dHVY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dHVY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!dHVY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!dHVY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!dHVY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dHVY!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1798616,&quot;alt&quot;:&quot;A single weathered surveyor's compass resting on an old topographic map where most of the terrain &quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/200916350?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A single weathered surveyor's compass resting on an old topographic map where most of the terrain " title="A single weathered surveyor's compass resting on an old topographic map where most of the terrain " srcset="https://substackcdn.com/image/fetch/$s_!dHVY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!dHVY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!dHVY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!dHVY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9adb9a12-4640-4af8-b4bd-f55b13930a1c_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>There is a particular silence in an architecture meeting when the senior person finally speaks.</p><p>People stop typing. The junior who was mid-sentence trails off. Someone writes down what you said almost before you finish saying it. Your offhand preference about a queue becomes the design. Your shrug about a library becomes a six-month commitment.</p><p>And inside, where nobody can see, you are running a different read entirely.</p><p>You are thinking: I am guessing.</p><p>Not wildly. Not irresponsibly. The guess is educated, shaped by a few thousand similar moments. But it is still a guess, and you know exactly how much of it is pattern and how much is certainty, and the ratio is not what these people seem to believe it is.</p><p>That gap, between the confidence everyone grants you and the uncertainty you actually feel, is senior imposter syndrome. And almost everything written about imposter syndrome will steer you wrong about it, because almost everything written about it is written about the junior version.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-fraud-was-the-confidence?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://thestoiccoder.michaelclawrence.com/p/the-fraud-was-the-confidence?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>It Is Not The Same Feeling That Grew Up</strong></h2><p>The junior version is simple. You do not know enough yet, and you are afraid someone will notice. The fix is also simple, even if it takes years: you learn more, the gap closes, the fear quiets.</p><p>The senior version is the opposite shape.</p><p>You do not feel like a fraud because you lack knowledge. You feel like a fraud because you have enough knowledge to see, in high resolution, how much of senior work is judgment under uncertainty. You can see the part you are sure about. You can see the part you are inferring. You can see the part you are flat-out hoping holds. And you are aware that everyone in the room is treating all three as the same color.</p><p>The junior thinks, &#8220;I do not know enough.&#8221;</p><p>The senior thinks, &#8220;I know exactly how much I am guessing, and the stakes just got a lot higher.&#8221;</p><p>Same name. Completely different animal. And the standard advice, the &#8220;believe in yourself, you earned this&#8221; pep talk, is useless here, because the senior is not suffering from a distorted view of reality. The senior is suffering from an accurate one.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-fraud-was-the-confidence/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://thestoiccoder.michaelclawrence.com/p/the-fraud-was-the-confidence/comments"><span>Leave a comment</span></a></p><h2><strong>The Edge of What You Know Gets Longer, Not Shorter</strong></h2><p>Competence does not shrink the unknown; it expands your view of it.</p><p>At year three the field looks small. You can see most of the map, and the blank spots feel like personal failures you will eventually fill in. At year twenty the map is enormous and most of it is blank, and you understand that it was always enormous, you just could not see the edges before. Every domain you actually master hands you a clear view of ten adjacent domains you will never touch.</p><p>So the feeling intensifies with experience, and people read that as a malfunction. It is not. It is calibration.</p><p>The Stoics had a name for the thing the junior is missing and the senior has too much of. Wisdom, in the Stoic sense, is not a stockpile of answers. It starts with an honest accounting of the boundary between what you know and what you do not. Epictetus said it is impossible for a person to learn what he thinks he already knows. The whole project begins with seeing the edge clearly.</p><p>Which means the discomfort you are calling fraud is not the symptom. It is the diagnosis working correctly.</p><p>The actual fraud was earlier. The fraud was the clean confidence you had at year three, when you did not know enough to know how much you were missing. You were not more competent then. You were just less aware. If anyone in your career has been an imposter, it was that guy, and everyone loved him because he gave clean answers.</p><h2><strong>Their Deference Is Not Yours to Earn</strong></h2><p>People quote you. They defer. They build on your guess as if it were bedrock. And some part of you keeps trying to deserve it, to close the gap between the authority they grant and the certainty you feel. You cannot close it. You will never feel as sure as a room of juniors needs you to look.</p><p>This is where the oldest Stoic tool actually earns its keep, not as a fridge magnet but as a sorting mechanism.</p><p>What other people think of you is not in your control. Their deference, their quoting, the reputation that walks into the room before you do, all of it lives in their heads, not yours. It is a preferred indifferent. Nice to have. Not the thing.</p><p>What is in your control is narrow and concrete: the next decision, made as well as you can make it, with the information you actually have. That is the entire job. Not deserving the reputation in some cosmic sense. Just doing the next thing well, and then the next one.</p><p>Marcus Aurelius ran an empire and spent his private mornings reminding himself, in writing, that he did not have it figured out, that he might be wrong, that he was still working on himself. The most powerful man alive kept a notebook of his own uncertainty. He was not performing humility for an audience. There was no audience. He was managing the exact gap you are managing, between the authority everyone handed him and the doubt he carried inside, and he managed it by refusing to confuse the two.</p><p>You are not responsible for feeling as certain as you look. You are responsible for what you do next.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Wisdom or Just Calcified?</strong></h2><p>You watch the company &#8220;discover&#8221; microservices. Again. You watch the third rewrite of the monolith that the second rewrite was supposed to fix. You watch a new framework arrive promising to solve the problem the last new framework created. And you feel the skepticism rise, and right behind it comes the real fear.</p><p>Is this wisdom, or have I just calcified?</p><p>Am I the person who has seen this fail three times, or am I the old man yelling at the clouds, mistaking my own fatigue for insight?</p><p>You cannot answer that from the inside by feel. The calcified person and the genuinely wise person experience identical confidence. The feeling is no guide at all. This is exactly the moment prosoche, disciplined attention, stops being abstract. The work is to catch yourself reacting and ask one question: am I responding to this proposal, in front of me, with its actual specifics, or am I responding to a memory of the last two times something wore the same clothes?</p><p>Sometimes the answer is that the pattern holds and your skepticism is earned. Sometimes the answer is that this time is different and you are about to dismiss something good because it pattern-matches to old pain. You only find out by looking, every time, at the specific thing.</p><p>And here is the quiet reassurance buried in the fear: the developer who still asks the question is not the calcified one. The discomfort you feel about possibly being the old man is the precise thing that keeps you from becoming him.</p><h2><strong>Stop Trying to Make It Go Away</strong></h2><p>You do not resolve the feeling; you stop treating it as a problem to be solved.</p><p>The uncertainty is not a flaw in your competence. It is what competence feels like from the inside once you can see clearly. Acting well inside that uncertainty, deciding without the certainty you wish you had, is not a workaround for judgment. It is the whole of what judgment ever was. Nobody up here is operating with more than that. The ones who look like they are have simply stopped noticing the gap, and that is not a state you should envy.</p><p>Seneca wrote his letters near the end of his life, about as accomplished as a person gets, with readers across the empire treating him as the authority. He kept refusing the role of the doctor. He cast himself as a patient in the same ward as the person he was writing to, comparing symptoms, passing along whatever had helped him that week. He never claimed to be cured. Only that he was a little further into the same treatment, and willing to say so out loud.</p><p>That is the only kind of senior worth being. Not the one with answers. The one who is honest about which parts are answers and which parts are still guesses, and who keeps making the call anyway.</p><p>You are not a fraud.</p><p>You were a fraud at year three, when you were sure.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;As long as you live, keep learning how to live.&#8221; &#8212; Seneca</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[The Discipline of Doing Nothing]]></title><description><![CDATA[Rest and avoidance feel exactly the same. Telling them apart is the discipline.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-discipline-of-doing-nothing</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-discipline-of-doing-nothing</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 31 May 2026 11:45:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ac5B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.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://substackcdn.com/image/fetch/$s_!Ac5B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ac5B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Ac5B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Ac5B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Ac5B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ac5B!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1953974,&quot;alt&quot;:&quot;A single fallow field at rest in late afternoon light, dark turned soil lying quiet and deliberately uncultivated&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/199891093?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A single fallow field at rest in late afternoon light, dark turned soil lying quiet and deliberately uncultivated" title="A single fallow field at rest in late afternoon light, dark turned soil lying quiet and deliberately uncultivated" srcset="https://substackcdn.com/image/fetch/$s_!Ac5B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Ac5B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Ac5B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Ac5B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9059340-d79d-4a3a-8c8b-f7954fca0d51_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>You used to spend an afternoon fighting a bug, and somewhere in that fight something got built, not just the fix, but you. Now you describe the bug to a model and it hands you three options before your coffee&#8217;s cold. Faster. Cleaner. And somehow you end the day more wiped than you did when the work was slower and dumber.</p><p>Here&#8217;s why: the tool took the friction, not the load. The slow part, the part that used to double as recovery, the staring-out-the-window-while-it-compiles part. That&#8217;s gone. What&#8217;s left is decision after decision after decision, at a pace set by something that never needs a weekend. Plus the low hum that you&#8217;re already behind, because another model shipped Tuesday and half of what you knew expired with it.</p><p>So you&#8217;re exhausted. And if you&#8217;ve been reading my newsletter for any length of time, you probably feel a little guilty about it.</p><p>That&#8217;s on me.</p><p>Two years I&#8217;ve told you your comfort zone is where dreams go to die. Burn the safety net. Stay in the discomfort. Do the work nobody wants to do. I stand by every word of it. But I&#8217;ve said it so many times, and so loudly, that I think some of you have walked away with a conclusion I never meant: that the answer is always <em>more</em>. That if you&#8217;re tired, you just haven&#8217;t earned the right to stop yet. That rest is the enemy.</p><p>Rest is not the enemy. It never was. The point was always to push <em>and</em> recover, I just spent two years with the volume cranked on the first half.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-discipline-of-doing-nothing?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://thestoiccoder.michaelclawrence.com/p/the-discipline-of-doing-nothing?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>Rest And Comfort Are Not The Same</strong></h2><p>The Stoics had a clean way to think about this, and it&#8217;s the thing that keeps &#8220;rest is fine&#8221; from collapsing into &#8220;comfort is fine&#8221;, because those are very different claims.</p><p>To a Stoic, comfort is a <em>preferred indifferent</em>. Nice to have. Not the point. Not the good. And so is rest. Neither one is virtue. But neither one is the villain, either. The villain is never rest. The villain is <em>mislabeling</em>: calling one thing by the other&#8217;s name.</p><p>Seneca didn&#8217;t treat leisure as a reward for the weak. He treated it as maintenance for the strong. The mind has to be given some relaxation, he argued, fields that get cropped every single year without a break go barren, and a bow kept always bent will snap. He called it <em>otium</em>: not the absence of work, but the soil work grows back in. Rest wasn&#8217;t the opposite of the disciplined life. It was part of the equipment.</p><h2><strong>The Problem: Rest And Avoidance Feel Identical</strong></h2><p>Rest and avoidance feel exactly the same.</p><p>Both feel like relief. Closing the laptop because your brain is fried feels identical, in the moment, to closing the laptop because the next ticket scares the hell out of you. You cannot tell them apart by how good it feels to stop. They both feel like getting off your feet. And the modern version is sneakier still: letting the machine do the part you&#8217;re afraid of <em>also</em> feels like relief. Like efficiency. Like rest. It isn&#8217;t. It&#8217;s the comfort zone wearing an efficiency badge. Frictionless is not the same as rested.</p><p>So if the feeling lies, what&#8217;s the tell?</p><p>This one: <strong>real rest restores your capacity to come back to the hard thing. Avoidance removes the hard thing so there&#8217;s nothing left to come back to.</strong></p><p>A field lies fallow so it can be planted again. That&#8217;s rest. A field that&#8217;s been abandoned just goes to weeds. That&#8217;s avoidance. From a distance, on any given Saturday, they look the same. Nobody&#8217;s working either one. The difference doesn&#8217;t show up in the moment. It shows up in whether you return.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-discipline-of-doing-nothing/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://thestoiccoder.michaelclawrence.com/p/the-discipline-of-doing-nothing/comments"><span>Leave a comment</span></a></p><h2><strong>What Real Rest Actually Looks Like</strong></h2><p>Watching tutorials on your day off is not rest. That&#8217;s work you forgot to bill for. &#8220;Productive rest&#8221; is mostly a story we tell ourselves so we never have to fully stop: keep the anxiety, just slap a productivity label on it. Real rest is the kind where the thing actually powers down. Where you&#8217;re unreachable and the build can wait until Monday, because it will, in fact, wait until Monday.</p><p>And then the hard one: sometimes, rest means saying no to the stretch project.</p><p>There&#8217;s a difference between <em>not now</em> and <em>not ever</em>.</p><p>&#8220;I don&#8217;t have the capacity for that this quarter; I need to recover first&#8221; is rest. &#8220;I&#8217;ll never be ready for that&#8221; is the comfort zone, and it&#8217;s the precise thing I&#8217;ve spent two years telling you to burn down. Almost the same words. Opposite move. The fallow field gets planted in spring. The abandoned one is just a decision you&#8217;re lying to yourself about.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Then Go Back</strong></h2><p>That&#8217;s the entire test, and you can carry it in your pocket: <em>am I going back?</em></p><p>Rest so you return to the difficulty sharper. That&#8217;s discipline too. Maybe the hardest kind, in a year when the pace is set by a thing that never sleeps and never has to.</p><p>Because here&#8217;s the one difference between you and the machine that actually matters: it doesn&#8217;t get tired, and it never has to come back to anything. You do. You&#8217;re allowed to. You&#8217;re built to.</p><p>Take the weekend. Then go back.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;Our minds must relax: they will rise better and keener after a rest.&#8221; - Seneca</p></blockquote><div><hr></div><p></p><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[You're Getting Better at the Wrong Thing]]></title><description><![CDATA[After 25 years, I'm convinced the craft problem and the character problem are the same problem.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 24 May 2026 11:45:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QyPd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.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://substackcdn.com/image/fetch/$s_!QyPd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QyPd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QyPd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1579842,&quot;alt&quot;:&quot;A weathered developer sits alone at a sparse wooden desk, soft morning light falling across an open notebook and a single cup of coffee&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/198975716?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A weathered developer sits alone at a sparse wooden desk, soft morning light falling across an open notebook and a single cup of coffee" title="A weathered developer sits alone at a sparse wooden desk, soft morning light falling across an open notebook and a single cup of coffee" srcset="https://substackcdn.com/image/fetch/$s_!QyPd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Early in my career, I watched a developer do something I&#8217;ve never forgotten.</p><p>He inherited a codebase that was, by any honest measure, a mess. Years of rushed deadlines, mid-sprint requirement changes, and the particular brand of creative improvisation that happens when good developers are under constant pressure. The kind of code that tells a story. Not a flattering one, but a real one.</p><p>He was talented. Genuinely good. And he was furious.</p><p>Within a week, he had decided to rewrite the entire e-commerce system from scratch. The right way, this time. Clean architecture. Proper separation of concerns. The kind of code you&#8217;d be proud to show in an interview. He was meticulous about it. He worked longer hours than anyone on the team. He was, in his own estimation, fixing what was broken.</p><p>What he actually did was break what was working.</p><p>The original system, for all its ugliness, had accumulated years of edge case handling. Weird discount logic that reflected real customer behavior. Payment processing quirks specific to their merchant processor. The kind of institutional memory that doesn&#8217;t live in documentation, it lives in code that&#8217;s been in production long enough to absorb the real world.</p><p>His rewrite was architecturally beautiful and practically broken. It took months to untangle.</p><p>When I think about that developer now, what strikes me isn&#8217;t the technical failure. The technical failure was just the outcome. What strikes me is what he never saw: that his internal state was doing the work. He thought he was making an engineering decision. He was executing an emotional one. The system he shipped was organized by anger, and it looked clean, and it didn&#8217;t work.</p><p>He treated it as a technical problem. It wasn&#8217;t.</p><p>In 25 years, I have watched that pattern in a hundred forms. The developer who can&#8217;t hear feedback because their certainty is load-bearing. The architect who solves every problem with another abstraction layer because abstraction feels like intelligence. The senior engineer who stopped learning at year seven and mistakes comfort for mastery. Different symptoms. Same root.</p><p>The root isn&#8217;t technical. It never was.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong?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://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h3><strong>The Wrong Question</strong></h3><p>Most developers spend their careers asking one question: <em>how do I get better at this?</em></p><p>It&#8217;s a good question. It has real answers. Deliberate practice on hard problems. Working alongside people who are better than you. Reading widely, not just documentation, but systems, histories, postmortems. Staying curious about the craft itself, not just the tools. These things work. They produce competent developers.</p><p>They don&#8217;t produce wise ones.</p><p>The technical question optimizes for a specific kind of output. You get faster. You accumulate patterns. You build intuitions about architecture, about performance, about where bugs tend to hide. All of that matters. All of that is real.</p><p>But past the journeyman stage, and you reach that stage earlier than you think, more of the same returns less. The developer who grinds harder on the technical question past that inflection point isn&#8217;t getting sharper. They&#8217;re just staying busy. They&#8217;re adding syntax to a foundation that isn&#8217;t the problem.</p><p>The developers who don&#8217;t plateau, don&#8217;t burn out, don&#8217;t lose the plot at year twelve, they found a different question. Not consciously, for the most part. Nobody sat them down and assigned it. But somewhere along the way, they started asking something else.</p><p>The question isn&#8217;t <em>how do I get better at code?</em></p><p>It&#8217;s <em>what kind of developer am I becoming through this work?</em></p><p>That sounds like a soft question. It isn&#8217;t. It&#8217;s harder than any technical problem you&#8217;ll face, because it has no Stack Overflow answer and no framework that solves it for you. And ignoring it, which most developers do, because the technical question is so much more tractable, doesn&#8217;t make it go away. It just means the answer accumulates silently, in the background, until you&#8217;re that developer rewriting working systems out of ego and calling it engineering.</p><h3><strong>What Stoicism Actually Is</strong></h3><p>I want to be direct about something before going further, because this is where people tend to check out.</p><p>Stoicism has a branding problem. Most of what circulates under that name is a thin self-help product: control what you can control, don&#8217;t sweat the rest. It&#8217;s not wrong, exactly. But it&#8217;s the philosophy stripped of everything that makes it worth practicing. It&#8217;s the bumper sticker without the argument.</p><p>The actual practice has real load-bearing pieces, and three of them apply to software development with uncomfortable precision.</p><p>The first is what Epictetus called <em>prosoche</em>: a sustained, disciplined attention to your own internal state. Not a journaling practice. Not meditation, though those can serve it. The actual discipline of noticing, in real time, what is happening inside you before it becomes behavior. The anger before it becomes a rage rewrite. The anxiety before it becomes an architectural decision made from fear. The certainty before it calcifies into an inability to hear what someone is actually saying to you.</p><p>Marcus Aurelius&#8217;s <em>Meditations</em> are, essentially, prosoche in written form. A daily record of a man watching himself think, catching his own patterns, trying to close the gap between his values and his behavior. He was the most powerful person on earth and he spent his mornings doing this work. That&#8217;s not incidental.</p><p>The second is <em>askesis</em>: what Seneca and Epictetus both described as voluntary discomfort, the deliberate choice to stay with what&#8217;s hard rather than reach for what&#8217;s easier. Not punishment, but training. You don&#8217;t stumble into deep competence by accident. You choose difficulty repeatedly, especially when you don&#8217;t feel like it, because the struggle is where the actual formation happens. Seneca recommended periodically living as if poor, not out of asceticism, but to prove to himself that what he feared losing wasn&#8217;t actually what sustained him. The principle scales: every time you skip the painful debugging session by asking someone else, every time you reach for an abstraction before you understand the concrete, you&#8217;re making a small choice against formation.</p><p>Those choices compound.</p><p>The third is the dichotomy of control. And I want to rescue this one from its bumper sticker version, because it&#8217;s a sorting tool, not a coping mechanism. Epictetus opens the <em>Enchiridion</em> with it for a reason: some things are up to us, some things are not, and wisdom begins with correctly sorting everything in your life into one of those two categories. The question isn&#8217;t <em>how do I feel okay about things I can&#8217;t control?</em> The question is <em>where exactly is my sphere of genuine agency, and am I actually working there?</em></p><p>Most developers are working outside it constantly. Reacting to code someone else wrote as if it&#8217;s a personal affront. Anxious about market forces they cannot move. Performing competence for stakeholders who don&#8217;t understand what they do. That&#8217;s not bad character, it&#8217;s what happens when nobody gives you the sorting tool. The work is scattered across the uncontrollable, and it feels like effort, and it produces very little.</p><p>These three practices are two thousand years old. They were developed by people who had nothing like software in mind. They fit the specific conditions of software development. The uncertainty, the pace, the fragile ego that the industry somehow both produces and exploits, with an accuracy that still surprises me.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong/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://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong/comments"><span>Leave a comment</span></a></p><h3><strong>The Right Question</strong></h3><p>Go back to that developer and the e-commerce rewrite.</p><p>What he lacked wasn&#8217;t technical knowledge. He had more than enough of that. It was, in fact, his technical knowledge that made the failure possible. He could see clearly everything that was wrong with the original system. He had the skills to fix it. What he didn&#8217;t have was <em>prosoche</em>. The self-awareness to notice that his certainty about the right answer was being generated by his anger at the wrong one. His internal state was the variable. He never looked at it.</p><p>The right question, <em>what kind of developer am I becoming through this work?</em>, is a prosoche question. It requires watching yourself over time. Not in a self-absorbed way, but in the way that Marcus Aurelius watched himself: practically, unsparingly, with the goal of closing the gap between who you are and who your work requires you to be.</p><p>What does that actually look like at year five? At year fifteen? At year twenty-five?</p><p>At year five, the right question starts to reveal that technical skill is not the ceiling you thought it was. You&#8217;ve watched junior developers who are technically sharper than you produce worse outcomes, and you&#8217;re starting to understand why: they can&#8217;t hear feedback, they can&#8217;t operate in uncertainty, they can&#8217;t estimate honestly because their ego is on the line. You realize that you are also doing all of these things, just with more years behind you. The question starts to feel urgent.</p><p>At year fifteen, the right question sounds different. You&#8217;ve accumulated enough judgment to walk into an unfamiliar codebase and know, within an hour, where the real problems are. Not from technical inspection alone, from pattern recognition that lives somewhere below the explicit, built from thousands of situations where you paid attention to what was actually happening, not just to the code. You can hear a requirements meeting and catch what&#8217;s not being said. You can feel the moment a technical decision is actually a political one wearing technical clothing.</p><p>That capacity doesn&#8217;t come from solving more tickets. It comes from having practiced prosoche across thousands of decisions. Having paid attention to your own internal state often enough, honestly enough, that your read of a situation now includes what you&#8217;re bringing to it.</p><p>At year twenty-five, the question has become something close to habitual. You don&#8217;t ask it explicitly every day. But the practice of asking it, over decades, has changed what you notice and how quickly you notice it. You sit with a hard problem differently. Not with less uncertainty, with more comfort in uncertainty. The willingness to stay in the not-knowing until the actual shape of the problem becomes clear, rather than reaching for the nearest pattern that fits.</p><p>That capacity, to sit with a hard problem rather than execute the first solution that reduces the discomfort of not-knowing, is <em>askesis</em> applied. It is the compounding return on having practiced voluntary discomfort. You stay with what&#8217;s hard because you have trained yourself to stay with what&#8217;s hard, and staying has become less costly than it used to be.</p><p>Here&#8217;s what doesn&#8217;t produce this: solving more tickets. Accumulating more frameworks. Getting faster at the technical parts of the job. Those things are real and they matter, but they are not the thing.</p><p>The thing is philosophical. It has always been philosophical.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h3><strong>What Actually Compounds</strong></h3><p>Technical skill has genuine diminishing returns past the journeyman stage. This is observable. Every senior engineering team has watched it: the brilliant junior who peaks at year five because they stopped choosing difficulty. The mid-level developer running the same three architecture patterns on every problem because those patterns work and nothing hurts enough to require something new. The staff engineer who can solve any technical problem put in front of them and cannot, for the life of them, figure out why they feel irrelevant.</p><p>It&#8217;s not that their skills degraded. It&#8217;s that their skills stopped growing in the direction that matters, because they were still asking the first question (<em>how do I get better at this?</em>) long after the ceiling on that question became visible.</p><p>What compounds differently is judgment. And judgment, I want to be clear about what this actually is, is not instinct. It is not talent. It is not something you either have or don&#8217;t.</p><p>Judgment is developed attention, over time.</p><p>The developer at year fifteen who can walk into an unfamiliar codebase and feel, within an hour, where the bodies are buried. They&#8217;re not magic. They have been practicing prosoche. They have been paying disciplined attention to their own read of situations, to the patterns in their own perception, across thousands of instances. They&#8217;ve been getting fast at noticing what they&#8217;re noticing.</p><p>They will tell you they have good instincts. They don&#8217;t. They have something better: a calibrated relationship with their own attention, built through practice. The difference matters because instincts can&#8217;t be transferred and can&#8217;t be improved. Developed attention can be both.</p><p>The practical consequence: the questions that feel most important at year three, <em>which framework should I learn, is this the right stack, am I behind?</em>, are almost entirely technical questions with technical ceilings. They are worth answering. Answer them. And then start asking the question underneath them, before you reach year seven and find yourself wondering why the work that used to feel like growth now just feels like effort.</p><p>There is a version of a software career that is twenty-five years of accumulating syntax. And there is a version that is something else entirely. Something harder to name and much harder to acquire, because it requires a different kind of attention than the industry teaches you to pay.</p><p>The developers who figure out which version they&#8217;re building, early enough to do something about it, are not smarter. They found the right question sooner.</p><h3><strong>Where This Goes</strong></h3><p>Three practices. Not a philosophy lecture, three concrete things that take fifteen minutes each to learn and a career to get right.</p><p>The morning sequence: before the day&#8217;s first Slack notification, before the standup, before anything external has a claim on your attention, take fifteen minutes to set an intention grounded in what you actually value. Not what you need to ship. What kind of developer you want to be today. It sounds soft. It is structurally the most important fifteen minutes of the day, because everything else follows from what it surfaces.</p><p>The evening review: Seneca did this every night. He described it in <em>De Ira</em>: &#8220;I examine my entire day and go back over what I&#8217;ve done and said, hiding nothing from myself, passing nothing by.&#8221; Five questions. Where did I fall short? What went well? What was outside my control and am I still holding it anyway? What did I learn? What is my intention for tomorrow? Fifteen minutes. The compounding effect, over years, is not theoretical.</p><p>The Stoic pause: in the moment before you respond to the critical code review, the impossible deadline, the Slack message that made you feel what you felt, stop. Physically. Close the laptop screen. Apply the sorting tool: what here is actually in my control? Respond from there. It is the smallest practice and, in the daily conditions of developer work, the one with the most immediate return.</p><p>These are the frameworks I&#8217;ve built The Stoic Coder around. Not because Stoicism is the only lens on this, but because it&#8217;s a 2,000-year-old technology for exactly the problem I&#8217;ve spent 25 years watching developers fail to name: that the work is harder than the technical parts suggest, and the reason is philosophical, and there are actually answers.</p><p>You&#8217;re in the right place to find them.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;First say to yourself what you would be; and then do what you have to do.&#8221; - Epictetus, Discourses</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[Humans Are Bottlenecks. That's the Point.]]></title><description><![CDATA[Friction isn't the enemy of quality. It's how quality happens.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 17 May 2026 11:54:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1GPl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.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://substackcdn.com/image/fetch/$s_!1GPl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1GPl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1GPl!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bda19dbe-da80-43e1-8901-36f060e85941_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:2123156,&quot;alt&quot;:&quot;A weathered stone aqueduct stretching across a vast landscape&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/198014309?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A weathered stone aqueduct stretching across a vast landscape" title="A weathered stone aqueduct stretching across a vast landscape" srcset="https://substackcdn.com/image/fetch/$s_!1GPl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>The software industry has been on a mission to remove its bottlenecks. Slower developers. Code review. Human judgment. The painful friction between &#8220;here&#8217;s what the ticket says&#8221; and &#8220;here&#8217;s what actually ships.&#8221;</p><p>AI makes this mission feel achievable. Finally, we can get the bottlenecks out of the way.</p><p>There&#8217;s one problem with that goal: the bottleneck is the point.</p><p>When a senior developer reviews a pull request and stops cold with a &#8220;<em>wait, what is this doing?&#8221;</em> that pause is not a failure of the process. It&#8217;s the process working. Confusion is data.</p><p>The fact that something took twenty minutes to understand when it should have taken two means something is wrong with what was written.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-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://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p><strong>Pain is information.</strong></p><p>A developer who reads code and feels nothing, who zips through review at the same speed regardless of what the code actually contains, is either reviewing code they can read in their sleep, or they&#8217;ve stopped seeing it.</p><p>The friction of reading someone else&#8217;s code: the slowness, the occasional <em>what the hell were you thinking</em>. That&#8217;s not inefficiency. That&#8217;s the quality signal. You need it. Your team needs it. Your production environment at 2am really needs it.</p><p>Now remove the human.</p><p>Automated agents don&#8217;t feel confusion. They don&#8217;t slow down when something is wrong. They don&#8217;t stop at a function name that seems slightly off, or a comment that doesn&#8217;t quite match the implementation, or a change that seems fine in isolation but is going to blow up the integration test they can&#8217;t see from here.</p><p>They ship. Confidently. Quickly.</p><p>And when it breaks, nobody can read the codebase, because nobody wrote the codebase.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-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://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the/comments"><span>Leave a comment</span></a></p><p>The industry heard &#8220;bottleneck&#8221; and heard <em>problem</em>. They heard slow. They heard blocker. They heard something to engineer around.</p><p>What they missed is what every developer who&#8217;s debugged anything already knows: the moment you finally understand the bug is the moment the pain stops. You weren&#8217;t stuck because you were bad at your job. You were stuck because the system was telling you something. The confusion was trying to hand you information. The moment you stopped fighting the friction and started listening to it, that&#8217;s when you found it.</p><p>Removing friction from the development process isn&#8217;t removing inefficiency. It&#8217;s removing the feedback loop that tells you when something is wrong.</p><p>That&#8217;s a different problem. A worse one.</p><p>The Stoics weren&#8217;t advocating for suffering as an end, they were observing that difficulty is how you build the capacity to handle difficulty.</p><p>This is not abstract philosophy. It&#8217;s a practical observation about how human beings develop judgment.</p><p>A developer who has spent five years fighting confusing code. Writing it, breaking it, fixing it, reading other people&#8217;s worst commits at the worst possible moments, has built a model of software systems that lives in their head. It&#8217;s not in any book. It&#8217;s in the scar tissue.</p><p>That model is what catches the null check at code review before it becomes the null check in production.</p><p>AI didn&#8217;t form the model. You did. Through years of friction.</p><p>You are the bottleneck. The bottleneck is the model. The model is the thing no one can replace.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><p>Here&#8217;s what worries me about the current trajectory.</p><p>We&#8217;re building a generation of developers who are going to miss the formation that produces the model. Not because they&#8217;re lazy. Because the environment removed the conditions that produce it.</p><p>You can&#8217;t shortcut the frustration. The frustration is where learning happens. Every hour a junior developer spends confused by a codebase they didn&#8217;t write is an hour they&#8217;re building the mental map they&#8217;ll spend the next twenty years navigating by.</p><p>Pull AI into that loop too early, and the confusion disappears. Not because the developer understood it. Because the AI resolved it before the confusion could do its work.</p><p>That&#8217;s not a win. That&#8217;s a generation of developers who reach senior titles without ever building the model that makes the title mean something.</p><p>I&#8217;m not arguing against using AI. I use it. I&#8217;ll keep using it.</p><p>What I&#8217;m arguing is this: understand what you&#8217;re the bottleneck <em>for</em>.</p><p>You&#8217;re not the bottleneck because you type slowly. You&#8217;re the bottleneck because your judgment, earned through years of watching things go wrong in predictable and completely unpredictable ways, is the mechanism that catches problems before they compound.</p><p>Voluntary discomfort isn&#8217;t just a Stoic practice. In this context, it&#8217;s professional maintenance. Writing code by hand when you could have AI write it. Reading unfamiliar codebases when you could have AI summarize them. Staying in the difficulty long enough to understand it instead of optimizing the difficulty away.</p><p>Because the moment you outsource the hard reading, the slow thinking, the uncomfortable pauses.: you&#8217;re quietly maintaining less of the thing that makes you valuable.</p><p>You don&#8217;t feel it for a while. And then you need the model and it&#8217;s not there.</p><p>The bottleneck is the feature.</p><p>Pain is information. Confusion is data. The friction in the development process&#8212;the human kind, the slow kind&#8212;is what separates <em>shipped</em> from <em>good</em>.</p><p>Own being the bottleneck. It&#8217;s the best thing about you.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;The impediment to action advances action. What stands in the way becomes the way.&#8221; - Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[We Broke Software ]]></title><description><![CDATA[How we learned to ship shit and call it delivery]]></description><link>https://thestoiccoder.michaelclawrence.com/p/we-broke-software</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/we-broke-software</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 03 May 2026 11:45:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yOjd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.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://substackcdn.com/image/fetch/$s_!yOjd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yOjd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yOjd!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1667805,&quot;alt&quot;:&quot;A crumbling Roman marble column mid-collapse, its fractured surface etched with faint circuit board patterns, set against the dark backdrop of a modern developer workspace &quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/196241756?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A crumbling Roman marble column mid-collapse, its fractured surface etched with faint circuit board patterns, set against the dark backdrop of a modern developer workspace " title="A crumbling Roman marble column mid-collapse, its fractured surface etched with faint circuit board patterns, set against the dark backdrop of a modern developer workspace " srcset="https://substackcdn.com/image/fetch/$s_!yOjd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>There&#8217;s a specific kind of frustration that only developers know. It&#8217;s not the frustration of a bug you can&#8217;t track down, or a stakeholder who keeps moving the goalposts. It&#8217;s the frustration of shipping something you <em>know</em> isn&#8217;t right.</p><p>2014 - Enterprise CMS rebuild. The whole promise of the project was better performance, better UX &#8212; and buried in that promise was search. Search was the thing that mattered most to the client. Search was the thing that was supposed to actually get fixed.</p><p>It didn&#8217;t get fixed. It got band-aided. And we shipped it anyway.</p><p>I led that project. That&#8217;s on me. And I&#8217;ll be honest, it wasn&#8217;t relief when we finally shipped it. It was frustration. Because delivery is always expected of us. But there&#8217;s a difference between delivering and delivering <em>shit</em>. Somewhere along the way, we stopped feeling that distinction as sharply as we should.</p><p>What I didn&#8217;t have a name for back then, we have a name for now: <strong>enshittification</strong>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/we-broke-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://thestoiccoder.michaelclawrence.com/p/we-broke-software?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Pattern Has a Name</strong></h2><p>Enshittification, coined by writer Cory Doctorow, describes the gradual decay of digital products. It usually gets applied to platforms: how they start by serving users, then pivot to extracting value from them. But the same pattern plays out in how we build software, sprint by sprint, shortcut by shortcut.</p><p>Timeline and promise drive decisions that quality should be driving. You know it&#8217;s happening. You feel it. But the deadline is real, the stakeholders are waiting, and so you ship the band-aid and tell yourself you&#8217;ll come back and fix it.</p><p>You don&#8217;t come back and fix it.</p><p>The next sprint has its own shortcuts. And the one after that. Each one feels manageable in isolation. Collectively, they compound into something that embarrasses you. Slow apps, inconsistent behavior, features that technically work but don&#8217;t actually serve anyone.</p><p>We&#8217;ve been doing this for years. We just got really good at normalizing it.</p><p>Here&#8217;s the uncomfortable truth: the client in my 2014 project was initially happy with the delivery. The cracks didn&#8217;t show up right away. They never do. That&#8217;s what makes this pattern so easy to fall into. The consequences are delayed, but they&#8217;re never cancelled.</p><h2><strong>AI Didn&#8217;t Create This Problem. But It&#8217;s Making It Worse</strong></h2><p>Let&#8217;s be fair: AI is genuinely changing what&#8217;s possible for developers. Codex, Cursor, Claude. These tools are real, and the productivity gains are real. I&#8217;m not here to tell you to throw them out.</p><p>But here&#8217;s what I&#8217;m watching happen: we&#8217;ve taken a profession that already had a speed problem and handed it a turbocharger. We&#8217;re moving faster. We&#8217;re also making mistakes faster. And instead of using AI to close the gap between what we promise and what we deliver, a lot of us are using it to build more elaborate scaffolding around the wrong problems.</p><p>Agentic workflows. Autonomous pipelines. Multi-model orchestration. Some of it is genuinely useful. Some of it is us chasing the next shiny thing while our customers are still waiting for the thing we promised them two quarters ago.</p><p>The question worth asking is simple: <em>what are we optimizing for?</em> If the answer is &#8220;a faster dev cycle,&#8221; that&#8217;s not good enough. A faster dev cycle that produces the same shortcuts at higher velocity isn&#8217;t progress.</p><p>It&#8217;s just enshittification with better tooling.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/we-broke-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://thestoiccoder.michaelclawrence.com/p/we-broke-software/comments"><span>Leave a comment</span></a></p><h2><strong>The Complexity Tax</strong></h2><p>Frontend development is a decent example of where this gets out of hand. HTML and CSS have evolved into webpack configs, Vite setups, package.json files that look like they need their own documentation. To be clear, modern tooling exists for real reasons. Polished, functional UIs require it. But it&#8217;s worth occasionally asking whether the complexity we&#8217;ve introduced is serving the customer or serving our preference for a particular stack.</p><p>When the tools become the product, something has gone wrong.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Coming Back to Center</strong></h2><p>None of this means slowing down to the point of paralysis. It means being honest about what &#8220;done&#8221; actually means. It means asking, before you ship the band-aid, whether you&#8217;re solving the customer&#8217;s problem or just closing a ticket.</p><p>The rebuild I led in 2014 promised search that worked. We delivered search that barely limped along. The client felt it eventually. That gap between what you promise and what you deliver, customers always feel it eventually. The apps that feel sluggish, the features that half-work, the UX that technically functions but clearly wasn&#8217;t thought through. That&#8217;s the accumulated weight of a thousand decisions where speed won and quality lost.</p><p>We can use better tools. We can run tighter sprints. We can build smarter workflows. But none of that matters if we&#8217;ve accepted a definition of &#8220;shipped&#8221; that means &#8220;it works well enough that no one will complain today.&#8221;</p><h2><strong>The Challenge</strong></h2><p>Here&#8217;s what I&#8217;m putting in front of you: the next time you&#8217;re about to ship something you know isn&#8217;t right, stop for a second. Not to blow up the timeline, just to be honest about what you&#8217;re actually doing.</p><p>Are you solving a real problem for a real customer? Or are you closing a gap between a promise and a deadline and hoping no one notices?</p><p>We have to stop accepting shit as good enough. Not because some blog post told us to. Because we&#8217;re better than that, and our customers deserve better than that.</p><p>The bar we set for ourselves is the bar our software lives up to. What&#8217;s yours?</p><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[I've Used AI. That's Why I'm Not Excited About This.]]></title><description><![CDATA[What happens when the demo ends and the real codebase begins.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 26 Apr 2026 11:45:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!so0-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.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://substackcdn.com/image/fetch/$s_!so0-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!so0-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!so0-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!so0-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!so0-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!so0-!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1514038,&quot;alt&quot;:&quot;A developer sits alone at a cluttered workstation, multiple monitors casting cold blue light across their face, expression unreadable&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/195472838?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A developer sits alone at a cluttered workstation, multiple monitors casting cold blue light across their face, expression unreadable" title="A developer sits alone at a cluttered workstation, multiple monitors casting cold blue light across their face, expression unreadable" srcset="https://substackcdn.com/image/fetch/$s_!so0-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!so0-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!so0-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!so0-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>My company just went all in on agentic AI workflows. Full automation: code, tests, the whole pipeline. The Slack channels lit up immediately. Pure excitement, people sharing demos, optimism everywhere you looked.</p><p>I get it. The first time you watch it work, it genuinely is impressive as hell.</p><p>But here&#8217;s the thing, I&#8217;ve been using AI as a coding assistant on my own projects for a while now. I wrote about building a real iOS app with it<a href="https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres"> here</a>, so I won&#8217;t rehash all of that. The short version: it&#8217;s useful, it&#8217;s not perfect, and working through the imperfections taught me a lot about what these tools actually are versus what people think they are. So while everyone else was marveling at the demo, I was sitting there thinking &#8220;<em>we haven&#8217;t found the sharp edges yet&#8221;.</em></p><p>This isn&#8217;t a hit piece on AI. I think it&#8217;s genuinely useful. But there&#8217;s a big difference between useful and ready. And right now, I&#8217;m not convinced everyone in that Slack channel knows what they don&#8217;t know yet.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited?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://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>From Side Projects to the Main Stage</strong></h2><p>There&#8217;s a big difference between experimenting with AI on a side project and dropping it into a large, complex, legacy fintech system with real customers on the other end.</p><p>On side work, the stakes are low. If something goes sideways, you fix it, you learn, you move on. But I work on a loan origination and servicing system. We&#8217;re talking about a codebase that&#8217;s been around long enough to have its own mythology. Every piece of logic in there exists for a reason, sometimes a reason nobody fully remembers anymore. That context matters. The domain knowledge matters. The history of why things were built the way they were matters.</p><p>Most of my colleagues are brand new to this space. They haven&#8217;t had the chance to work through the rough edges on lower-stakes stuff first. They&#8217;re jumping straight from zero to full agentic, and the only frame of reference they have is a demo where everything worked perfectly. That&#8217;s a dangerous place to start forming expectations.</p><h2><strong>The Slack Channel Problem</strong></h2><p>Here&#8217;s what happens in every Slack channel when a shiny new thing lands: the optimists are loud, and the skeptics are quiet.</p><p>Nobody wants to be the person who kills the vibe. So the channel fills up with &#8220;&#128293;&#128293;&#128293;&#8221; reactions and screenshots of AI generating code in seconds, and anyone with a more measured take keeps it to themselves. Over time, that silence starts to look like consensus. And before you know it, you&#8217;re treating a tool that&#8217;s been in the building for six weeks like it&#8217;s a solved problem.</p><p>I&#8217;m not saying the enthusiasm is wrong. Excitement about new technology is a good thing. It drives adoption, it drives experimentation, it drives progress. But excitement without skepticism is how you end up in a mess you didn&#8217;t see coming. The people who&#8217;ve actually put time into these tools know they can hallucinate, stray from the task, produce code that looks right but isn&#8217;t, and confidently walk you in the wrong direction. That knowledge changes how you work with them. If you skip that learning curve, you&#8217;re setting yourself up.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited/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://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited/comments"><span>Leave a comment</span></a></p><h2><strong>We&#8217;re All Orchestrators Now</strong></h2><p>One of the things I keep hearing is that developers won&#8217;t be replaced, we&#8217;ll just become orchestrators. We&#8217;ll manage the AI, review the output, steer the direction. Sounds reasonable on the surface.</p><p>But think about what that actually means over time.</p><p>The less code you write, the harder it becomes to evaluate the code being written for you. It&#8217;s a feedback loop that works against you. Right now, an experienced developer can look at AI-generated code and spot the problems. The awkward logic, the edge cases it missed, the place where it technically compiles but violates how the rest of the system is supposed to work. That skill exists because of years of writing code, breaking things, and fixing them.</p><p>If we hand off the writing entirely, that skill atrophies. And when it does, who&#8217;s actually reviewing the output? Another automated process? At some point &#8220;human in the loop&#8221; becomes a formality, not a safeguard. In a fintech system where a bad calculation can have real consequences for real people, that&#8217;s not a theoretical concern, it&#8217;s a very practical one.</p><h2><strong>The LOC Flex That Isn&#8217;t</strong></h2><p>Let&#8217;s talk about metrics for a second, because this one drives me insane.</p><p>You&#8217;ve seen the posts. &#8220;AI generated 10,000 lines of code in 30 seconds.&#8221; It&#8217;s always framed like that&#8217;s obviously a good thing, like raw volume is the goal. Spoiler: it isn&#8217;t. It never was.</p><p>Lines of code has always been a garbage metric. It doesn&#8217;t tell you anything meaningful about productivity, quality, or value delivered. The question isn&#8217;t whether AI can write 10,000 lines in 30 seconds. The question is whether you needed 10,000 lines to solve the problem. The question is whether those 10,000 lines actually do what the business needs them to do. The question is whether you&#8217;d want to maintain that codebase in two years.</p><p>Bragging about volume is the AI equivalent of a junior dev who&#8217;s proud of a 500-line function. More code is not better code. Coding has always been a means to an end. The real value is in the decision making, the architecture, the problem solving. Syntax is the easy part. It&#8217;s always been the easy part. AI being good at the easy part isn&#8217;t the revolution it&#8217;s being sold as.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Tests That Pass Aren&#8217;t Always Tests That Matter</strong></h2><p>This one keeps me up at night more than anything else.</p><p>AI is pretty good at generating tests. The problem is it&#8217;s also pretty good at generating tests that pass without actually validating anything meaningful. I&#8217;ve seen it produce tests that check whether a function runs without throwing an error and call it coverage. Technically green. Completely useless.</p><p>In most systems, that&#8217;s annoying. In a fintech system, it&#8217;s a genuine liability. If your tests aren&#8217;t asserting the right things, if they&#8217;re not tied to actual business rules, you&#8217;re not testing anything. You have a false sense of safety. If an AI produces bad tests, what&#8217;s to stop it from subtly adjusting logic elsewhere to make those bad tests pass? It&#8217;s optimizing for green, not for correct. Those aren&#8217;t always the same thing.</p><p>This is where human judgment can&#8217;t be replaced with another automated step. Someone who understands the domain has to look at the assertions and ask whether they actually reflect reality. That requires knowing the business rules. It requires caring about what the code is supposed to do, not just whether it compiles.</p><h2><strong>Where I Actually Land</strong></h2><p>I&#8217;m not out here saying AI is useless. I use it. It speeds things up. It&#8217;s a legitimately good assistant when you keep it focused and stay in the driver&#8217;s seat.</p><p>But there&#8217;s a canyon between &#8220;useful assistant&#8221; and &#8220;autonomous agent running your production pipeline,&#8221; and right now we&#8217;re treating that canyon like a curb. The tooling is early. The integration patterns are still being figured out. Most teams haven&#8217;t had enough time with these tools to develop the instincts for when to trust them and when to push back.</p><p>My honest take: we need to slow down, let the tools mature, and build experience before we hand over the keys. Let people get comfortable with AI as an assistant first. Let them find the edges, make the mistakes in lower-stakes environments, and develop judgment. Then talk about agentic workflows.</p><p>Maybe I&#8217;m wrong. This stuff is moving fast, and I&#8217;m planning to keep writing about it as I get deeper into the process. I&#8217;m genuinely open to being surprised here.</p><p>But &#8220;open to being surprised&#8221; and &#8220;uncritically buying the hype&#8221; aren&#8217;t the same thing; one of them keeps you out of trouble.</p><p>So I want to hear where you&#8217;re at with this. Have you been pushing AI into production workflows, or are you still in the assistant phase? And if you&#8217;ve gone deeper into agentic territory, what have you learned that the demos didn&#8217;t show you?</p><p>Drop it in the comments. The more real-world experience we can put in the same room, the better off we all are.</p><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[I Built a Real iOS App with AI. Here's the Honest Truth]]></title><description><![CDATA[The Good, The Bad, and The Code I Had to Write Myself]]></description><link>https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 19 Apr 2026 11:45:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IDa2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.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://substackcdn.com/image/fetch/$s_!IDa2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IDa2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IDa2!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1264194,&quot;alt&quot;:&quot;A developer hunched over a glowing monitor in a dark room, fingers on keyboard, with a translucent ghostlike second figure leaning in beside them&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/194624035?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A developer hunched over a glowing monitor in a dark room, fingers on keyboard, with a translucent ghostlike second figure leaning in beside them" title="A developer hunched over a glowing monitor in a dark room, fingers on keyboard, with a translucent ghostlike second figure leaning in beside them" srcset="https://substackcdn.com/image/fetch/$s_!IDa2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated with Midjourney</figcaption></figure></div><p>Everyone&#8217;s got an opinion on AI in software development. Half the internet wants to tell you it&#8217;s going to replace developers. The other half is convinced it&#8217;s an overhyped toy that writes garbage code and calls it a day. The truth? It&#8217;s somewhere in the middle. And most people writing about it have never actually shipped anything with it.</p><p>I have. I built a real, live iOS app using Claude Code as my primary coding partner. It&#8217;s in the <a href="https://apps.apple.com/us/app/svngs/id6759472401">App Store</a> right now. And I&#8217;m here to tell you it was both more impressive and more frustrating than I expected.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres?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://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Project: Svngs+</strong></h2><p>I work as a software engineer in fintech, dealing with legacy loan origination and servicing platforms all day. Heavy C#, TypeScript, SQL. Complex problems. I genuinely love it. There&#8217;s nothing quite like getting lost in a mind-bending problem and finally having that &#8220;aha&#8221; moment.</p><p>Best part of the job.</p><p>But spending that much time in financial systems got me thinking about my own finances. I wanted a simple way to track my savings rate, just log your net income and how much you saved each pay period. That&#8217;s it. No fancy dashboards, no bank integrations, no giving a third-party app access to your financial life.</p><p>So I built Svngs+. A native iOS app. Privacy-first. No third-party APIs, no cloud storage I control. Your data lives in Apple&#8217;s CloudKit, only you can see it. And I used this as the perfect opportunity to push Claude Code and see what it could actually do on a real project, not just a throwaway demo.</p><h2><strong>The Decision That Made Everything Else Work</strong></h2><p>Before writing a single line of code, I made one call that I think saved the whole project: I decided to use Claude as a <strong>pair programmer, not a full agentic solution</strong>.</p><p>This might sound like a small distinction. It&#8217;s not.</p><p>Going fully agentic means handing over the wheel. Let the AI run, generate, commit, and iterate on its own. Some people swear by it. My take? That&#8217;s a great way to end up with a codebase that works until it suddenly, catastrophically doesn&#8217;t. I wanted to review every piece of code Claude generated in real time. I managed the git workflow myself. I stayed in the driver&#8217;s seat.</p><p>That decision shaped everything about how the build went, including knowing when to trust the output and when to throw it out and do it myself.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres/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://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres/comments"><span>Leave a comment</span></a></p><h2><strong>The Framework: Four Parts Before You Write Any Code</strong></h2><p>One thing I&#8217;d recommend to anyone trying this workflow: don&#8217;t just fire up Claude Code and start asking it to build things. You&#8217;ll get slop. I broke the project into four phases before touching the IDE.</p><p><strong>Part 1: Product Definition.</strong> What does this app do, what problem does it solve, who&#8217;s it for? Nothing technical yet. Just the idea, the scope, and a rough version breakdown so I could define a real MVP.</p><p><strong>Part 2: User Flow.</strong> Every screen, every interaction, the full onboarding experience. Map it out before you build it.</p><p><strong>Part 3: Tech Spec.</strong> This is where the nuts and bolts live. Architecture decisions, dependencies, data layer. For Svngs+, that meant Swift, SwiftUI, SwiftData for local storage, CloudKit for cross-device sync, StoreKit for an in-app purchase that unlocks unlimited history, and biometric authentication via Face ID, Touch ID, or passcode.</p><p><strong>Part 4: Build Plan.</strong> This is the heart of working with Claude Code. Break the MVP into phases, break those phases into hyper-focused tasks. Every task is its own session. I also generated a <em>CLAUDE.md</em> file that set up ground rules: patterns to follow, where code should live, what to avoid.</p><p>That structure kept Claude on track. Without it, you&#8217;re just prompting into the void.</p><h2><strong>Where Claude Actually Impressed Me</strong></h2><p>Five weekends. One App Store submission. Let&#8217;s give credit where it&#8217;s due.</p><p>Claude was genuinely strong with Swift. Modern Swift, not legacy Objective-C patterns dressed up in new syntax. Best practices around SwiftUI were solid. The component structure it generated was clean, readable, and maintainable. For a lot of the standard UI work and business logic, I was reviewing code and thinking <em>&#8220;yeah, I&#8217;d have written it pretty much like this.&#8221;</em></p><p>The in-app purchase flow with StoreKit? Handled it well. Local notifications for reminders? Clean. The biometric authentication setup? Worked first time.</p><p>When Claude was in its lane, building against well-documented, modern Apple frameworks, it was a legitimately good pair programmer. Fast, consistent, and it didn&#8217;t complain when I told it to redo something.</p><h2><strong>Where It Fell Apart</strong></h2><p>Here&#8217;s the part that doesn&#8217;t make it into most of these &#8220;I used AI to build an app&#8221; posts. Because there were real failures, and they&#8217;re worth talking about.</p><h3><strong>The SwiftData / CoreData confusion.</strong> </h3><p>SwiftData is Apple&#8217;s modern ORM framework. CoreData is the older one SwiftData is built on. They&#8217;re related but they are <em>not</em> the same thing, and Claude kept reaching for CoreData patterns when it should have been thinking in SwiftData. Early sessions I was catching these before they caused problems. But it was a consistent friction point that required me to course-correct repeatedly. If I hadn&#8217;t known the difference, if I&#8217;d been a less experienced developer leaning on AI to fill knowledge gaps, this would have quietly poisoned the codebase.</p><h3><strong>The CloudKit disaster.</strong> </h3><p>This one&#8217;s the best example of why you cannot go fully agentic and walk away.</p><p>CloudKit sync through SwiftData is largely automatic. Apple built it that way. You configure the container correctly, and it just works. There&#8217;s no custom sync model to write. Claude did not believe this. It kept trying to build me a sync manager, custom code to handle something the framework already handles natively. I kept redirecting it. It kept reverting.</p><p>Eventually I had to configure the CloudKit container myself, following Apple&#8217;s own documentation. Here&#8217;s the kicker: Claude <em>found</em> that documentation. It surfaced the right Apple dev docs during our session. Then apparently decided the docs were optional and did its own thing anyway. I ended up coding that piece entirely by hand.</p><p>The AI found the correct answer and ignored it. Without my experience to recognize the problem and my willingness to step in, that feature would have shipped broken or over-engineered. And I might not have even known why.</p><h3><strong>The StoreKit abstraction it ignored.</strong> </h3><p>Before building the in-app purchase flow, I had a decision to make: StoreKit directly, or RevenueCat. For the MVP I kept it simple and went with StoreKit, but I wanted the flexibility to swap in RevenueCat later if I add subscriptions down the road. The right move in Swift is to define a protocol that the rest of the app talks to, then inject whichever implementation you&#8217;re using. Clean, future-proof, easy to swap.</p><p>Claude built the protocol correctly. Built the StoreKit class correctly. Then went ahead and injected StoreKit directly throughout the app, completely bypassing the abstraction it had just created. It did the hard part right and then ignored it. I caught it, fixed the injection, and now the app talks to the protocol the way it should. But if I hadn&#8217;t been reviewing in real time, I&#8217;d have a codebase that works today and becomes a pain in the ass the moment I want to make a change.</p><h3><strong>The fastlane screenshot setup.</strong> </h3><p>Minor compared to the others, but Claude had real trouble with seed data for automated App Store screenshot generation. I got it across the line myself, but it took longer than it should have.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>The Honest Take</strong></h2><p>Here&#8217;s where I land after five weekends and one App Store submission: AI is a legitimately powerful tool in the right hands. But <em>&#8220;in the right hands&#8221;</em> is doing a lot of work in that sentence.</p><p>You still need to know what good code looks like. You still need to know when to trust the output and when to throw it in the trash. The slop code problem is real. It might not bite you today, but it will eventually. Technical debt is sneaky like that. You feel fine right up until you don&#8217;t.</p><p>Think of it like a junior dev who&#8217;s brilliant half the time and confidently wrong the other half. You wouldn&#8217;t let that person commit without review. Same rules apply here.</p><p>Use AI as a pair programmer. Own the architecture. Review everything. And maybe don&#8217;t let it anywhere near your CloudKit configuration.</p><p>Svngs+ is <a href="https://apps.apple.com/us/app/svngs/id6759472401">live</a> in the App Store if you want to check it out. I&#8217;m already working on the next app using the same workflow and refining the process as I go.</p><p><em>I&#8217;m curious where you&#8217;re at with AI in your own dev work. Are you using it as a pair programmer, or have you gone full agentic? And if you&#8217;ve been burned by slop code making it to production, I&#8217;d love to hear that story, drop it in the comments.</em></p><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[Stop Letting Fear Disguise Itself As The Smart Choice]]></title><description><![CDATA[Before you stay or leave, run your decision through this &#8212; it'll tell you everything]]></description><link>https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Mon, 13 Apr 2026 11:45:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ihUE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.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://substackcdn.com/image/fetch/$s_!ihUE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ihUE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ihUE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1298951,&quot;alt&quot;:&quot;A Roman philosopher split down the center, one half weathered stone, the other half reflected in a glowing monitor screen, dramatic chiaroscuro lighting,&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/193967284?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A Roman philosopher split down the center, one half weathered stone, the other half reflected in a glowing monitor screen, dramatic chiaroscuro lighting," title="A Roman philosopher split down the center, one half weathered stone, the other half reflected in a glowing monitor screen, dramatic chiaroscuro lighting," srcset="https://substackcdn.com/image/fetch/$s_!ihUE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Every developer hits it eventually. That moment where you&#8217;re staring at your calendar, your codebase, your offer letter. And you genuinely don&#8217;t know which way to go.</p><p>Stay or leave. Startup or enterprise. Double down or walk away.</p><p>Both options feel right <em>and</em> wrong at the same time.</p><p>Several back, I was at a startup. Scrappy, fast, the kind of place where you&#8217;re wearing five hats and shipping things that actually matter. And an opportunity came along to jump ship. More stability. Bigger company. A cleaner title. On paper, it looked like the smart, grown-up move. The <em>safe</em> move.</p><p>So I took it.</p><p>And the comfort I thought I was walking into? It never showed up. The stability wasn&#8217;t stable. The clarity wasn&#8217;t clear. The discomfort found me anyway. It just came wearing a different outfit. I&#8217;d optimized for the wrong thing, and I paid for it.</p><p>That experience cracked something open for me. Because it forced me to ask: if the &#8220;safe&#8221; choice blows up just as badly, what the hell are you actually supposed to use as a compass?</p><p>Turns out, the Stoics had an answer, and it&#8217;s not a pros and cons list.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself?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://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Problem With How We Make These Decisions</strong></h2><p>Most of us approach career forks like a debugging session. Gather the data. Weigh the variables. Pick the output with the best expected value.</p><p>Salary delta. Growth trajectory. Tech stack quality. Work-life balance score.</p><p>And look, none of that is useless. But it&#8217;s also not enough. Because you can optimize every variable and still end up feeling hollow in the new role by month three. You can turn down the &#8220;risky&#8221; option and still watch your edge dull into nothing over the next two years.</p><p>The Stoics would tell you the spreadsheet is asking the wrong question. The real question isn&#8217;t <em>which path feels safer.</em> it&#8217;s <em>which path makes you better</em>.</p><p>Not better-paid. Not better-titled. Better as a person doing the work you&#8217;re built to do.</p><p>They had a framework for this. Four cardinal virtues: courage, wisdom, justice, and temperance. Not as abstract philosophy, as practical filters for exactly the kind of decision you&#8217;re standing in front of right now.</p><p>Let&#8217;s run your fork through all four.</p><h2><strong>Courage: Is This Fear or Is This Wisdom?</strong></h2><p>Here&#8217;s the first thing you need to be honest about: are you staying because it&#8217;s genuinely the right call, or because you&#8217;re scared to leave?</p><p>These feel different in your chest if you sit with them long enough. Fear has a tightness to it. It whispers. <em>What if you fail? What if the new stack is a disaster? What if you give up the salary and can&#8217;t get it back?</em> Fear is always trying to protect a version of you that doesn&#8217;t exist anymore.</p><p>Courage isn&#8217;t the absence of that voice; it&#8217;s making the call <em>despite</em> it when the call is the right one.</p><p>Courage also means being honest when you&#8217;re chasing excitement for its own sake. Sometimes the bold move is just recklessness wearing ambition&#8217;s clothes. Jumping to a shiny new startup because you&#8217;re bored isn&#8217;t courage. It&#8217;s avoidance with better optics.</p><p>Ask yourself: does this decision require me to grow, or does it just let me escape? Courage grows you. Recklessness just relocates your problems.</p><h2><strong>Wisdom: What Are You Actually Choosing?</strong></h2><p>This is where I got it wrong with my own fork.</p><p>I thought I was choosing stability. What I was actually choosing was the <em>idea</em> of stability. Because I&#8217;d attached a story to the bigger company that had nothing to do with reality. The Stoics call this the trap of <em>preferred indifferents</em>: things like money, title, and comfort that are nice to have but are completely neutral when it comes to your actual character. They can&#8217;t make you better. They can&#8217;t make you worse. They&#8217;re just... things.</p><p>The problem is we treat them like they&#8217;re guarantees. Bigger company = more security. More money = less stress. Better title = more respect. And when reality doesn&#8217;t honor that deal, we&#8217;re blindsided.</p><p>Wisdom means seeing what you&#8217;re actually choosing, not the story you&#8217;ve wrapped around it.</p><p>So ask yourself: in five years, what does this decision look like? Not the salary. Not the title. The version of you that comes out the other side. Is that person sharper or softer? More capable or more comfortable? More themselves or less?</p><p>If you can honestly answer that staying makes you better, stay. If you can honestly answer that leaving makes you better, leave. But make sure you&#8217;re answering the real question. Not the one that makes you feel better right now.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself/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://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself/comments"><span>Leave a comment</span></a></p><h2><strong>Justice: Who Else Is In This Equation?</strong></h2><p>This one gets skipped a lot. Probably because it&#8217;s uncomfortable.</p><p>Your decision doesn&#8217;t just affect you. It affects your team, your users, your family, the people depending on what you build or lead. And there&#8217;s a version of every career move that&#8217;s just dressed-up selfishness: optimizing purely for yourself while conveniently ignoring the blast radius.</p><p>That doesn&#8217;t mean you owe your employer your entire career. It doesn&#8217;t mean you have to martyr yourself to a role that&#8217;s killing your growth out of some misplaced loyalty. Justice isn&#8217;t self-sacrifice.</p><p>It means being honest about the full picture. If you&#8217;re the only one who knows how the payment processing system actually works and you&#8217;re thinking about walking out mid-sprint with zero handoff, that&#8217;s not bold, that&#8217;s just shitty. If you&#8217;re staying in a role that&#8217;s making you bitter and checked out because you feel guilty leaving, that&#8217;s not noble, it&#8217;s just slow-motion bad for everyone.</p><p>Justice asks: am I being fair? To my team. To my family. To myself. All three. Not just the one that&#8217;s loudest right now.</p><h2><strong>Temperance: Are You Attached or Aligned?</strong></h2><p>Last filter, and arguably the hardest one to apply honestly.</p><p>Temperance is about examining your grip. How tightly are you holding on to what you have &#8212; and why?</p><p>There&#8217;s a difference between staying in a role because you&#8217;re genuinely aligned with the work and the direction, and staying because you can&#8217;t stomach the idea of losing the salary, the title, the status, the daily routine you&#8217;ve built your identity around. One of those is healthy preference. The other is attachment, and the Stoics were pretty clear that attachment is where your judgment goes to die.</p><p>Try this: imagine you leave. The new thing is harder than expected. The stack is a mess. The team is chaotic. You&#8217;re six months in and wondering what you were thinking. Can you handle that? Will you survive it, learn from it, come out the other side with more than you started with?</p><p>If yes &#8212; that&#8217;s the answer you needed. Fear just lost its veto.</p><p>Now flip it. Imagine you stay. Two years pass. You&#8217;re still in the same chair, same problems, same ceiling. What does that feel like? Is that peace or is that resignation?</p><p>Whatever answer comes up first &#8212; trust it. That&#8217;s not anxiety talking; that&#8217;s clarity.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>The Decision Itself</strong></h2><p>Choose the path, then commit completely to <em>walking it well</em>.</p><p>Not to the outcome. You don&#8217;t control the outcome. The startup might fail. The big company might restructure. Your new stack might be a catastrophe in ways nobody saw coming. None of that is yours to control.</p><p>What&#8217;s yours is the quality of the choice and the integrity of how you execute it. Make the decision like it matters, because it does. Then hold your plans loosely, because the world doesn&#8217;t care about your plans.</p><p>And if you&#8217;re still stuck after running all four filters? Ask yourself this:</p><p><em>Which decision requires the better version of me to pull off?</em></p><p>That&#8217;s your answer.</p><p>The fork is uncomfortable by design. It&#8217;s supposed to be. The discomfort is the test. It&#8217;s not about which option is safer. It&#8217;s about whether you live by your values or react to your fears.</p><p>I chose the comfortable-looking path. The comfort never came. But the lesson did.</p><p>Now I want to hear from you:</p><p><strong>Have you ever made the &#8220;safe&#8221; career move and had it blow up anyway? Or are you standing at a fork right now and can&#8217;t figure out which way to go?</strong></p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>First say to yourself what you would be, and then do what you have to do.&#8221; - Epictetus</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[Hustle Culture Lied]]></title><description><![CDATA[You Don't Need to Grind Yourself Into Dust to Be a Great Developer]]></description><link>https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 05 Apr 2026 11:45:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YF1e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.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://substackcdn.com/image/fetch/$s_!YF1e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YF1e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YF1e!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1296910,&quot;alt&quot;:&quot;A Roman philosopher in draped marble-white robes seated calmly at a minimal modern desk,&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/193200150?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A Roman philosopher in draped marble-white robes seated calmly at a minimal modern desk," title="A Roman philosopher in draped marble-white robes seated calmly at a minimal modern desk," srcset="https://substackcdn.com/image/fetch/$s_!YF1e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>It&#8217;s 11:47 PM. You&#8217;re not coding. You&#8217;re on LinkedIn, watching someone from your bootcamp cohort announce their Staff Engineer promotion, and something in your chest tightens.</p><p>You tell yourself you&#8217;re just staying informed. But you&#8217;re not. You&#8217;re measuring. And right now, you&#8217;re coming up short.</p><p>I&#8217;ve been there. Doesn&#8217;t matter how many years you&#8217;ve been shipping, the peer promotion gut-punch feels the same at year two as it does at year twenty. Where shipping a feature nobody noticed felt like wasted effort. Where the question wasn&#8217;t &#8220;did I do good work?&#8221; but &#8220;did anyone <em>see</em> me do good work?&#8221;</p><p>That&#8217;s not ambition. That&#8217;s a trap. And the Stoics figured out how to escape it about 2,000 years before hustle culture made it a personality.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied?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://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Word You&#8217;ve Been Misreading</strong></h2><p>Apatheia. If your brain jumped straight to <em>apathy</em>, you&#8217;re not alone. But you&#8217;re wrong.</p><p>Apatheia doesn&#8217;t mean you stop giving a damn. It doesn&#8217;t mean you coast, phone it in, or stop caring about your craft. It means freedom from <em>destructive</em> passions &#8212; the kind that have you refreshing your GitHub stars at midnight, spiraling when a PR gets torn apart in review, or quietly resenting a teammate&#8217;s promotion.</p><p>The Stoics weren&#8217;t lazy. Marcus Aurelius ran an empire while fighting wars on two fronts and dealing with a plague that killed millions. Seneca was one of the most prolific writers in Roman history. Epictetus built a philosophy school after being a literal slave. These weren&#8217;t people who checked out. They were ferociously committed to their work.</p><p>But here&#8217;s what separated them from the hustle-culture crowd: they didn&#8217;t let outcomes <em>own</em> them.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied/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://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied/comments"><span>Leave a comment</span></a></p><h2><strong>The Flaw in the &#8220;10x Developer&#8221; Myth</strong></h2><p>Hustle culture has a core belief: the more you suffer for your work, the more virtuous you are. Grind harder. Sleep less. Ship faster. If you&#8217;re not burning out, you&#8217;re not trying hard enough.</p><p>The Stoics would have called bullshit on this immediately.</p><p>Frantic energy isn&#8217;t a sign of dedication. It&#8217;s usually a sign of poor judgment. When you&#8217;re chasing validation instead of craft, you make worse decisions. You over-engineer to impress. You under-communicate because slowing down feels like weakness. You build things nobody asked for because the <em>building</em> feeds your ego, not the <em>problem it solves</em>.</p><p>Here&#8217;s the thing about the 10x developer mythology that nobody says out loud: skill is morally neutral. You can be an exceptional engineer and a miserable, destructive human being. You can write the cleanest codebase your team has ever touched and still be the person everyone dreads pairing with.</p><p>The Stoics cared about <em>virtue</em>, not talent. And virtue shows up in how you show up for your teammates, not just your commit history.</p><h2><strong>What Indifference Actually Looks Like (It&#8217;s Not What You Think)</strong></h2><p>Here&#8217;s the distinction that matters: Apatheia is being indifferent to <em>outcomes</em> while being fully committed to <em>effort</em>.</p><p>Write excellent code because it&#8217;s the right thing to do. Not because you need the dopamine hit of a compliment in Slack. Refactor the messy module because future-you and your teammates deserve better. Not because you want credit for it. Help the junior dev debug their auth issue because that&#8217;s what a good engineer does. Not so you can mention it in your performance review.</p><p>In my fintech work, I&#8217;ve shipped payment infrastructure that processed millions in transactions without a single public-facing acknowledgment. No blog post, no conference talk, no LinkedIn announcement. The code worked. Users didn&#8217;t lose money. That&#8217;s the whole point.</p><p>When you detach your self-worth from external validation, something weird happens: <em>the work gets better</em>. Because you&#8217;re not optimizing for appearance. You&#8217;re optimizing for quality.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Marcus Aurelius Had the Same Problem You Do</strong></h2><p>Marcus Aurelius, emperor of Rome and one of the most powerful humans who ever lived, had to <em>remind himself daily</em> not to get caught up in what other people thought of him.</p><p>His journal, which we now call <em>Meditations</em>, is basically a guy talking himself down from the ledge over and over again. Stop caring what they think. Focus on your own work. Do the right thing even when nobody&#8217;s watching.</p><p>If the ruler of an empire needed that daily reminder, you&#8217;re allowed to need it too.</p><p>Other developers&#8217; success has zero bearing on your path. Someone else getting promoted doesn&#8217;t mean you&#8217;re falling behind. Someone shipping a viral side project doesn&#8217;t mean your side project (or your decision not to have one) is wrong. The variables driving their career are different from yours. The variables you can actually <em>control</em> are different from theirs.</p><p>The only scoreboard that matters is whether you&#8217;re growing, doing honest work, and treating the people around you well.</p><h2><strong>Getting Off the Cortisol Treadmill</strong></h2><p>You can still want the senior role. You can still launch the side project. You can still care about growing your skills and getting better. Apatheia isn&#8217;t telling you to stop striving.</p><p>It&#8217;s telling you to stop letting the <em>gap between where you are and where you want to be</em> eat you alive in the meantime.</p><p>The burnout cycle is real, and it doesn&#8217;t make you more dedicated. It makes you less effective. I&#8217;ve watched incredibly talented developers flame out because they treated exhaustion like a badge of honor. They ground themselves into dust chasing a finish line that kept moving, and eventually they stopped caring about code entirely.</p><p>That&#8217;s not the outcome anyone was aiming for.</p><p>Write clean code. Help your teammates. Keep learning. Pursue the roles and opportunities that align with the kind of engineer and person you want to be. And when marketing conditions shift, when someone else gets the promotion, when your PR gets rejected for the third time: let that be information, not an identity crisis.</p><p>The Stoics weren&#8217;t building a philosophy for people who didn&#8217;t care; they were building one for people who cared <em>too much about the wrong things</em>.</p><p>Sounds familiar, right?</p><p><strong>So here&#8217;s what I want to know:</strong></p><p>Where are you on this? Are you genuinely pursuing excellence &#8212; or are you on the cortisol treadmill, grinding because stopping feels like losing? And if you&#8217;ve found a way off it, what actually worked?</p><p>Drop it in the comments. Seriously.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p><em>&#8220;It is not the man who has too little, but the man who craves more, that is poor.&#8221;</em>  - Seneca</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[Your Reaction Is The Bug]]></title><description><![CDATA[Stop Letting Bad Feedback Turn You Into Someone You're Not]]></description><link>https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 22 Mar 2026 11:45:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DQIm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.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://substackcdn.com/image/fetch/$s_!DQIm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DQIm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DQIm!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1321078,&quot;alt&quot;:&quot;A Roman Stoic philosopher and a modern software developer sitting across from each other at a weathered stone table&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/191705920?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A Roman Stoic philosopher and a modern software developer sitting across from each other at a weathered stone table" title="A Roman Stoic philosopher and a modern software developer sitting across from each other at a weathered stone table" srcset="https://substackcdn.com/image/fetch/$s_!DQIm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Between the Slack notification and your angry reply, there is a gap. In that gap lives your entire career trajectory.</p><p>Your PR just got torn apart. Not gently, either. Someone went line by line, questioned your architecture, and did it in a public channel where half the team can see it. Your face goes hot. Your fingers are already moving toward the keyboard. You&#8217;ve got a response locked and loaded, and it starts with &#8220;Well, actually...&#8221;</p><p>Stop. Don&#8217;t send it.</p><p>I&#8217;ve been there. Early in my career, I&#8217;d fire back almost immediately. I was convinced that defending my code was the same thing as defending my competence. Looking back now, I can&#8217;t even remember what half those arguments were about. The thing that felt like a five-alarm crisis on a Tuesday afternoon? Gone from my memory entirely. But the reputation I was building, that part stuck around a lot longer than the debate.</p><p>Here&#8217;s what Epictetus figured out a couple thousand years before Slack existed: events themselves are neutral. It&#8217;s our judgment about them that creates the suffering or the peace. Your PR getting reviewed isn&#8217;t an attack. It&#8217;s a process. The attack is a story your brain invented in about 300 milliseconds flat.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug?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://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>Your First Reaction Is Almost Always Wrong</strong></h2><p>That defensive surge you feel when someone questions your technical decision in front of the team? That&#8217;s not your professional instincts kicking in. That&#8217;s evolutionary firmware running on code that was written for a very different threat environment. Your nervous system genuinely cannot tell the difference between a critical comment on a pull request and a predator in the bushes. It fires the same way either time.</p><p>The Stoics called this the &#8220;first impression&#8221;, the automatic, unchosen reaction that happens before your brain has had time to actually think. The goal isn&#8217;t to kill that reaction. You can&#8217;t. The goal is to create a gap between the impression and your response, and then actually use that gap.</p><p>Even three seconds is enough to shift from defensive to curious. That sounds insultingly simple, and it is. But simple doesn&#8217;t mean easy. The pause is a trained skill, not a personality trait. And most of us have spent years training the opposite habit.</p><h2><strong>The Story You&#8217;re Telling Yourself</strong></h2><p>When someone pushes back on your technical decision, your brain immediately starts constructing a narrative. It&#8217;s not just processing the feedback; it&#8217;s assigning motive, predicting consequences, and scoring the whole thing against your sense of self-worth. By the time you&#8217;re ready to respond, you&#8217;re not responding to the comment anymore. You&#8217;re responding to the movie your brain made about the comment.</p><p>So before you fire off that reply, ask yourself one question: <em>what else could this mean?</em></p><p>What if they&#8217;re trying to prevent a production bug? What if they caught something you genuinely missed? What if they see the codebase from a different angle? Not a better angle, not a worse one, just different. And that perspective is actually useful to you?</p><p>Maybe you introduced a feature that already exists somewhere else in the codebase and someone&#8217;s pointing it out. That&#8217;s not an insult, that&#8217;s someone doing their job. The difference between receiving that as an attack versus receiving it as information is entirely in your head.</p><p>And entirely in your control.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug/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://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug/comments"><span>Leave a comment</span></a></p><h2><strong>The Practical Tools</strong></h2><p>The Stoics weren&#8217;t just philosophers. They were incredibly practical. Here are three things that actually work:</p><p><strong>The draft folder rule.</strong> Before you hit send on that &#8220;well actually&#8221; message, save it as a draft and come back in an hour. You&#8217;ll delete 80% of them. The other 20% you&#8217;ll rewrite into something that doesn&#8217;t make you look like an asshole. This works for social media too. Write the response, feel the satisfaction of having written it, then let it sit. Most of the time, it never needs to leave your drafts.</p><p><strong>The three questions.</strong> Before reacting, run the comment through a quick filter: Is my interpretation actually true? Is my response necessary? Is it going to move things forward or just make me feel better for thirty seconds? Most knee-jerk reactions fail at least one of those tests. Usually all three.</p><p><strong>The timeline check.</strong> Will this matter in ten minutes? Ten months? Ten years? I&#8217;ve lost sleep over feedback that I legitimately cannot recall today. That&#8217;s not me being zen about it, that&#8217;s just how it played out. The things that feel like career-ending disasters during a sprint rarely survive contact with next week&#8217;s stand-up.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Emotions Are Data, Not Orders</strong></h2><p>Getting angry about a management decision or a brutal code review tells you something real about your expectations and your values. That&#8217;s useful information. It&#8217;s not a command to act on the anger.</p><p>Stoics feel emotions. They&#8217;re not robots. They just don&#8217;t take orders from them.</p><p>There&#8217;s a time to push back and a time to let it go. Not every technical decision is worth the argument. Sometimes the smarter move is to take the feedback, consider it honestly, and ask whether your approach was actually the right one. Sometimes you&#8217;ll decide it was and you&#8217;ll make that case clearly and calmly. Sometimes you&#8217;ll realize they had a point you missed. Both outcomes are fine. Neither of them requires you to go to war in a Slack thread.</p><h2><strong>The Gap Is the Whole Game</strong></h2><p>Change is the one constant in this field. Priorities shift mid-sprint. Architecture decisions get revisited. Someone&#8217;s going to question your code in a public forum again, probably next week. That&#8217;s not a bug in the system. That&#8217;s the system.</p><p>What separates the developers who grow through that process from the ones who get ground down by it isn&#8217;t talent or experience. It&#8217;s the ability to create that gap. Act between the notification and the reply. Shape your impression into a thoughtful response.</p><p>Your career isn&#8217;t built in the moments when everything goes smoothly. It&#8217;s built in the moments when someone tears your PR apart and you respond like a professional instead of a cornered animal.</p><p>The gap is where that happens.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;It&#8217;s not what happens to you, but how you react to it that matters.&#8221; - Epictetus</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[Stop Letting Fear Make Your Career Decisions For You]]></title><description><![CDATA[Navigating Career Choices with Virtue]]></description><link>https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 15 Mar 2026 11:45:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ev2C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.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://substackcdn.com/image/fetch/$s_!Ev2C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ev2C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ev2C!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1708247,&quot;alt&quot;:&quot;A Roman philosopher in weathered marble relief emerging from shadow into light&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/190967569?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A Roman philosopher in weathered marble relief emerging from shadow into light" title="A Roman philosopher in weathered marble relief emerging from shadow into light" srcset="https://substackcdn.com/image/fetch/$s_!Ev2C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>You own your career. The job is just a rental.</p><p>That distinction sounds simple, but most developers never actually internalize it. Instead, we treat every career decision like it&#8217;s a life sentence: agonizing over spreadsheets, running endless pros-and-cons lists that somehow never resolve, and letting fear and greed drive choices that should be driven by something a hell of a lot more solid.</p><p>The Stoics figured this out a long time ago. The best decisions don&#8217;t come from calculating every possible outcome. They come from asking one question: <em>what does virtue demand of me right now?</em></p><p>I know that sounds abstract. Let me make it concrete.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career?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://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Moment the Spreadsheet Fails You</strong></h2><p>A few years back, I was still building Flash applications when the writing was on the wall. Adobe was circling the drain, and every developer I knew was either panicking or pretending nothing was happening. I made a bet on .NET and enterprise. Not because the numbers were perfect, but because it felt like the right long-term play. Was it scary? Absolutely. But staying put felt like a different kind of scary. The slow, comfortable kind that eventually swallows you whole.</p><p>That decision wasn&#8217;t made on a spreadsheet. It was made on instinct that had been sharpened by asking the right questions.</p><p>The Stoics had a framework for this. Four virtues (wisdom, courage, justice, and temperance) that they believed could guide any decision, in any situation. And honestly? They hold up remarkably well when a recruiter is blowing up your LinkedIn with a shiny new offer.</p><h2><strong>Wisdom: Fear vs. Prudence</strong></h2><p>Are you staying because you&#8217;re genuinely building something valuable, or because change terrifies you?</p><p>Those are completely different things, and your brain will lie to you about which one is operating. It&#8217;ll dress up fear as loyalty. It&#8217;ll call avoidance &#8220;being strategic.&#8221; Wisdom is what cuts through that noise.</p><p>Ask yourself: if fear weren&#8217;t a factor at all, what would you do? The answer that surfaces is usually the one you already know. Wisdom isn&#8217;t about eliminating uncertainty, it&#8217;s about making the best call with the information you have, and trusting that you&#8217;ve prepared yourself to handle whatever comes next.</p><p>The unprepared developer panics when layoffs hit. The one who&#8217;s been building their skills, their network, and their reputation? They&#8217;re already thinking about the next move before the severance check clears.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career/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://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career/comments"><span>Leave a comment</span></a></p><h2><strong>Courage: Comfortable Isn&#8217;t the Same as Safe</strong></h2><p>Here&#8217;s what courage is <em>not</em>: it&#8217;s not blindly jumping at every shinier opportunity because you&#8217;re bored. Recklessness isn&#8217;t brave. It&#8217;s just <em>impatient</em>.</p><p>Real courage sometimes looks like staying. If you&#8217;re the only senior dev holding a crumbling codebase together and you know the team collapses without you, walking away might be the <em>easy</em> move, not the courageous one. Fixing what&#8217;s broken from the inside, having the hard conversation with leadership, pushing for the changes that actually matter. That can take more guts than handing in your notice.</p><p>But courage also means not letting a stable paycheck become a cage. If money is the <em>only</em> reason you&#8217;re staying, you&#8217;ve already mentally checked out. You&#8217;re just waiting for your body to catch up. External rewards &#8212; salary, title, perks &#8212; can&#8217;t manufacture internal satisfaction. The Stoics were relentless on this point, and they were right.</p><p>Layoffs happen. Pay cuts happen. Companies pivot, get acquired, implode. Nothing is permanent. The courage isn&#8217;t in pretending the floor is solid , it&#8217;s in staying ready to move when it isn&#8217;t.</p><h2><strong>Justice: Don&#8217;t Be a Selfish Jackass on Your Way Out</strong></h2><p>Seneca had a lot to say about using people as stepping stones, and it wasn&#8217;t complimentary.</p><p>If you&#8217;re leaving, how you leave matters. Are you giving your team enough runway to absorb the transition? Are you being honest with the people who trusted you? Burning bridges might feel satisfying for about thirty seconds, but this industry is smaller than you think, and your reputation follows you everywhere.</p><p>Justice in career decisions isn&#8217;t about being a martyr. It&#8217;s not about staying in a toxic situation because you feel guilty leaving. It&#8217;s about making sure that however you move, you move with integrity. Transition with honesty. Don&#8217;t ghost your team. Document what you know. Give your notice with respect, even if the place didn&#8217;t always deserve it.</p><p>What goes around comes around. And I don&#8217;t mean that in some vague karmic sense. I mean it practically: the developer you screw over today might be interviewing you in three years. Act accordingly.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Temperance: Know When Enough Is Enough</strong></h2><p>Not every opportunity that pays more or sounds shinier is actually better. This is the one developers get tripped up by constantly, especially when the market is hot.</p><p>Temperance is the ability to look at a 30% raise and ask: <em>what&#8217;s the actual cost of this?</em> More hours? A worse team? A tech stack you hate? A company culture that&#8217;ll grind you down in six months? Better compensation, a fancier title, a sexier tech stack. Those things are nice to have. They&#8217;re not a decision framework.</p><p>The real questions are: Will you regret working more for making more? Is there an opportunity where you can do something genuinely valuable, even if the money is roughly the same? What changes in your life (your flexibility, your time, your sanity) and is the trade worth it?</p><p>Consider what you actually want your life to look like, not just your bank account. Temperance isn&#8217;t about settling. It&#8217;s about not letting the shiny object override your judgment.</p><h2><strong>Trust the Work You&#8217;ve Already Done</strong></h2><p>The delay isn&#8217;t confusion. It&#8217;s just your emotions catching up to your reasons.</p><p>We all know, deep down, whether something is right. When a decision keeps nagging at you, when something feels off even though the numbers look good. That signal is real. Don&#8217;t ignore it. The Stoics called this the alignment of reason with nature. I call it your gut having done the work your spreadsheet hasn&#8217;t.</p><p>The goal isn&#8217;t to eliminate the uncertainty of career decisions. The goal is to make them from a place of clarity instead of fear. Filter your choices through wisdom, courage, justice, and temperance. This makes the path ahead clearer, rather than letting anxiety and money guide you.</p><p>Your career belongs to you. The job is just where you happen to be standing right now.</p><p>So here&#8217;s what I want to know: when you&#8217;ve faced a major career decision, what actually drove the call? Was it data, or was it something harder to name? Drop it in the comments &#8212; your experience might be exactly what someone else needs to hear right now.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p><em>&#8220;It is not because things are difficult that we do not dare; it is because we do not dare that things are difficult.&#8221;</em> - Seneca</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[You're Protecting Your Comfort Zone]]></title><description><![CDATA[Stop Hiding Behind Code You Memorized and Start Building Something Real]]></description><link>https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 08 Mar 2026 11:45:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xvI2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.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://substackcdn.com/image/fetch/$s_!xvI2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xvI2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xvI2!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1304609,&quot;alt&quot;:&quot;A weathered Roman philosopher sitting at a modern developer's desk&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/190226716?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A weathered Roman philosopher sitting at a modern developer's desk" title="A weathered Roman philosopher sitting at a modern developer's desk" srcset="https://substackcdn.com/image/fetch/$s_!xvI2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>It&#8217;s 11pm. Xcode is open. You&#8217;re staring at Swift syntax you&#8217;ve never written in your life, and some voice in the back of your head is telling you to close the laptop and come back when you &#8220;know more.&#8221;</p><p>Instead, you type a prompt.</p><p>That&#8217;s vibe coding. And yeah, traditional developers lose their minds over it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone?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://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>&#8220;That&#8217;s Not Real Programming&#8221;</strong></h2><p>I get it. I&#8217;ve been writing software for 25 years. I understand the instinct to protect the craft. But let&#8217;s be honest about what&#8217;s really happening when experienced developers dismiss AI-assisted development as &#8220;not real programming&#8221;, they&#8217;re not protecting quality. They&#8217;re protecting identity.</p><p>Stoics would recognize this immediately. Marcus Aurelius didn&#8217;t waste energy fighting things outside his control. He focused on what he could actually influence. AI&#8217;s advancement? Not in your control. Market disruption? Not in your control. Your willingness to learn, adapt, and leverage new tools? That&#8217;s yours. All of it.</p><p>The dichotomy of control isn&#8217;t just a philosophical concept, it&#8217;s a survival skill for developers right now. Clinging to the idea that your value lives in syntax you memorized is like a blacksmith in 1910 insisting that anyone who uses a power tool isn&#8217;t a &#8220;real&#8221; craftsman. Meanwhile, the guy with the power tool is building three times as much.</p><p>Vibe coding (describing what you want and iterating with AI until it exists) isn&#8217;t the end of real software development. It&#8217;s a new tool that reveals something uncomfortable: who&#8217;s been coding for the joy of creation, and who&#8217;s been hiding behind gatekeeping complexity.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone/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://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone/comments"><span>Leave a comment</span></a></p><h2><strong>My Experiment: Building an iOS App in a Language I Barely Know</strong></h2><p>Here&#8217;s where I put my money where my mouth is.</p><p>I&#8217;ve done iOS development before, mostly in Objective-C. Swift? Not my world. But I had a clear idea for a savings rate dashboard app, something genuinely useful, something I wanted to exist. So instead of waiting until I&#8217;d done six months of Swift tutorials, I started building it. With AI as my co-pilot, breaking down the work into pieces I could actually manage.</p><p>This isn&#8217;t theory. This is me, right now, figuring it out as I go.</p><p>And here&#8217;s what I&#8217;ve learned: the AI doesn&#8217;t care that I&#8217;m rusty on Swift. It handles the boilerplate. It handles syntax I&#8217;d otherwise have to look up a dozen times. What it can&#8217;t do is decide <em>what</em> to build, <em>why</em> it matters, or <em>whether</em> the architecture makes sense for the long haul. That part is still on me. That part will always be on me.</p><p>Not knowing Swift became irrelevant when I could prototype, test assumptions, and ship an MVP in days instead of months. Note: I&#8217;m about a week away from submitting version 1 to the app store.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Aimless Prompt Thrashing Is Not a Strategy</strong></h2><p>Let me be clear about something, because I see this mistake everywhere: you cannot just wing it.</p><p>The idea that you can magically build something by dumping vague prompts into an AI is naive, and it leads to a chaotic mess of half-working code you don&#8217;t understand.</p><p>What actually works is treating AI the way you&#8217;d treat a capable junior developer. You wouldn&#8217;t hand a junior a vague task and disappear. You&#8217;d give them a clear objective, a defined scope, and enough context to succeed. Then you&#8217;d review their work and course-correct.</p><p>Before I type a single prompt on this iOS project, I have a build plan. Clear goals. A tech spec. Tasks broken into pieces small enough that the AI can actually shine on them. That preparation is what separates productive AI-assisted development from burning three hours to produce garbage.</p><p>The AI handles the heavy lifting. I handle the vision and the judgment. That&#8217;s the deal.</p><h2><strong>The Anxiety Tells You Everything</strong></h2><p>If reading about AI replacing developers makes your stomach drop, that anxiety isn&#8217;t about AI. It&#8217;s a signal that you&#8217;ve tied your professional identity to syntax memorization instead of problem-solving ability. And that&#8217;s worth sitting with for a minute.</p><p>Think about what you&#8217;re actually afraid of losing. Is it your ability to solve hard problems? To understand systems, architecture, business logic, user needs? Because AI isn&#8217;t touching any of that. Or is it the ability to write a for-loop faster than a junior dev, or recall the exact method signature without checking docs?</p><p>Because one of those things matters. The other one never really did.</p><p>Software engineering has always been about solving problems, understanding what the business needs and delivering something that works. The language was always just the vehicle. Developers who lose sight of that are the ones who&#8217;ll struggle, not because of AI, but because they were already optimizing for the wrong thing.</p><p>Epictetus had a line that applies here: it&#8217;s not things that disturb us, but our judgments about things. AI isn&#8217;t the threat. The judgment that your value is tied to irreplaceable technical obscurity&#8212;that&#8217;s the threat.</p><h2><strong>The Developers Who Will Thrive</strong></h2><p>They&#8217;re not the ones who know the most languages.</p><p>They&#8217;re the ones who solve valuable problems regardless of the tools available. They adapt. They stay curious. When a new tool shows up, they ask &#8220;how can I use this?&#8221; instead of &#8220;why is this bad?&#8221;</p><p>As a solo developer, I&#8217;m juggling marketing, product development, customer support, and feature building all at once. Leveraging AI to handle some of that load while I stay focused on long-term strategy isn&#8217;t laziness, it&#8217;s leverage. It&#8217;s the same reason senior engineers use frameworks instead of writing everything from scratch. You use the tools that let you build more, faster, without compromising on what actually requires your judgment.</p><p>This savings rate app isn&#8217;t just a side project. It&#8217;s proof that your ideas can become real without waiting for perfect knowledge. It&#8217;s proof that &#8220;I don&#8217;t know Swift well enough&#8221; is a story you&#8217;re telling yourself, not a fact about the world.</p><h2><strong>So Where Does That Leave You?</strong></h2><p>Fighting AI&#8217;s role in development is like resenting gravity. It&#8217;s here. It&#8217;s changing things. The only real question is whether you&#8217;ll adapt with curiosity or resist with fear.</p><p>You can&#8217;t control what AI does to the industry. You can control whether you pick up the tool and figure out how to use it well.</p><p>I&#8217;m still figuring it out. The Swift app isn&#8217;t done (although it is really close). Some days the AI output needs serious rework. Some days it nails exactly what I needed in thirty seconds. That&#8217;s the process. And honestly? I&#8217;m having more fun building than I have in a while, because I&#8217;m back to focusing on the part that actually matters: the problem, not the syntax.</p><p>So here&#8217;s what I want to know from you:</p><p>What&#8217;s the AI fear you&#8217;re still holding onto and what would it take to let it go?</p><p>Drop it in the comments. You might be saying exactly what someone else needs to hear.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;The impediment to action advances action. What stands in the way becomes the way.&#8221; - Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[The Silent Debt ]]></title><description><![CDATA[Your Brain Is Maxed Out and Your Code Is Paying the Price]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-silent-debt</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-silent-debt</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 01 Mar 2026 12:45:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!o1vq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.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://substackcdn.com/image/fetch/$s_!o1vq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o1vq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o1vq!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1671676,&quot;alt&quot;:&quot;A lone developer slouched at a cluttered desk late at night&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/189498454?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A lone developer slouched at a cluttered desk late at night" title="A lone developer slouched at a cluttered desk late at night" srcset="https://substackcdn.com/image/fetch/$s_!o1vq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>We obsess over technical debt. The messy code, the shortcuts, the &#8220;we&#8217;ll fix it later&#8221; promises that quietly compound into a maintenance nightmare. We track it, we argue about it in sprint planning, we write long Confluence pages about it that nobody reads.</p><p>But there&#8217;s another form of debt accumulating in the background, one that doesn&#8217;t show up in code reviews, static analysis tools, or your backlog. One that&#8217;s a hell of a lot more expensive because it doesn&#8217;t just slow down your codebase.</p><p>It slows <em>you</em> down.</p><p>It&#8217;s called cognitive debt, and there&#8217;s a solid chance it&#8217;s already wrecking your output without you even realizing it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-silent-debt?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://thestoiccoder.michaelclawrence.com/p/the-silent-debt?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>What Is Cognitive Debt, Exactly?</strong></h2><p>Think of your brain like a bank account. Every context switch, every poorly named variable, every undocumented system you have to reverse-engineer from scratch, every Slack notification you haven&#8217;t dealt with. Those are all withdrawals. And unlike technical debt, you can&#8217;t refactor your way out of this one. You can&#8217;t open a ticket for it. There&#8217;s no sprint dedicated to paying it off.</p><p>Every time you switch between projects, meetings, or mental models, research suggests you pay a swap cost of roughly 15-20 minutes just to get back to full capacity. Let that sink in. Every &#8220;hey, quick question&#8221; Slack message, every context switch between a PR review and the feature you were actually building, that&#8217;s 15-20 minutes of your best thinking, gone.</p><p>And it compounds.</p><h2><strong>The Ways You&#8217;re Racking Up the Bill</strong></h2><p><strong>Bad naming and unclear code</strong> forces you to hold translation layers in your working memory constantly. Instead of just reading the code, you&#8217;re playing mental archaeology.</p><p>&#8220;okay, so x2 is probably the processed transaction amount, and tempFlag is... I think the validation state?&#8221; That overhead adds up across an entire codebase.</p><p><strong>Your notification backlog</strong> is creating background anxiety you&#8217;re probably not even consciously aware of. Those 47 unread GitHub notifications, the Slack threads you&#8217;ve been &#8220;meaning to get to,&#8221; the email you flagged and forgot, they&#8217;re not just sitting there quietly. They&#8217;re fragmenting your attention every time you sit down to do real work.</p><p><strong>Undocumented systems</strong> are the worst offenders. Every system that lives only in someone&#8217;s head, or worse, nobody&#8217;s head, requires you to actively reconstruct it from scratch every single time you touch it. That&#8217;s not a one-time cost. You pay it over and over.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Why It Wrecks Your Estimates</strong></h2><p>Cognitive debt makes you terrible at estimating, and most people have no idea that&#8217;s what&#8217;s happening.</p><p>An example, you&#8217;re deep in a complex feature. You&#8217;ve got the whole system model loaded in your head. The edge cases, the data flow, the three other services it touches. Your manager pops in and asks for an estimate on something completely unrelated.</p><p>What happens?</p><p>You throw out a number just to get back to what you were doing. Of course you do. You can&#8217;t fully context-switch, so you&#8217;re estimating with maybe 40% of your actual capacity applied to the problem. Then two weeks later when you&#8217;re staring that feature in the face, you realize you either sandbagged it or, more painfully, you&#8217;re in over your head on timeline.</p><p>That&#8217;s not a planning failure. That&#8217;s cognitive debt coming due.</p><h2><strong>You Can&#8217;t Code Your Way Out of This One</strong></h2><p>Cognitive debt only clears through genuine rest, reflection, and unstructured time. That&#8217;s it. There&#8217;s no shortcut.</p><p>This is where remote work makes things genuinely harder. When you worked in an office, your commute home was a natural decompression chamber. By the time you walked in your front door, a lot of that mental load had already started to fade. Not fully, but enough.</p><p>Now? The &#8220;office&#8221; is twenty feet from your bedroom. There&#8217;s no physical leaving. The context never fully switches off because the environment never changes. You eat lunch in the same space where you debug production incidents. That&#8217;s a problem.</p><p>One thing that actually helps: treat your workspace like it&#8217;s a different location. Keep work physically contained to a specific room or space. When you close that door, you&#8217;re leaving. Protect that boundary like it&#8217;s a critical system, because it is. It&#8217;s the system that keeps <em>you</em> running.</p><p>Beyond that, it comes down to the basics we all know but consistently underinvest in. Actual breaks. Time that isn&#8217;t secretly &#8220;thinking about work time.&#8221; Sleep. Hobbies that have nothing to do with your job. The stuff that feels indulgent when you&#8217;re behind on a sprint but is actually the only thing that keeps you sustainable long-term.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-silent-debt/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://thestoiccoder.michaelclawrence.com/p/the-silent-debt/comments"><span>Leave a comment</span></a></p><h2><strong>Paying It Down</strong></h2><p>You can&#8217;t eliminate cognitive debt, but you can stop letting it run unchecked.</p><ul><li><p><strong>Name things properly.</strong> Future you (and everyone else on your team) will thank you.</p></li><li><p><strong>Document the weird stuff.</strong> The undocumented edge case that only you know about? Write it down today.</p></li><li><p><strong>Triage your notifications on your schedule</strong>, not theirs. Batch them. Don&#8217;t let them interrupt flow state.</p></li><li><p><strong>Protect context blocks.</strong> Deep work and shallow work shouldn&#8217;t share the same time slot. When you&#8217;re in the zone, be in the zone.</p></li><li><p><strong>Estimate when you&#8217;re fresh.</strong> If someone asks for an estimate while you&#8217;re heads-down in something else, buy yourself time. &#8220;Let me circle back on that in an hour&#8221; is a complete sentence.</p></li></ul><p>And most importantly, take the rest seriously. Not as a reward for finishing your work. As part of the work.</p><p>Your team can track velocity. They can monitor build times and deployment frequency. But nobody&#8217;s tracking how much mental bandwidth you&#8217;re actually operating with on any given Tuesday afternoon.</p><p>That&#8217;s on you to manage.</p><p>You wouldn&#8217;t let technical debt accumulate indefinitely and expect your codebase to stay healthy. Don&#8217;t do it to your brain either.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;Nowhere can man find a quieter or more untroubled retreat than in his own soul.&#8221; &#8212; Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[You're Not Growing, You're Just Staying Busy]]></title><description><![CDATA[Comfort Is Quietly Killing Your Career And You Don't Even Know It]]></description><link>https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 22 Feb 2026 12:45:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DTS0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.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://substackcdn.com/image/fetch/$s_!DTS0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DTS0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DTS0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1801009,&quot;alt&quot;:&quot;A lone figure in modern clothing stands at the edge of a vast, dimly lit server room that stretches endlessly into darkness, cables and towering racks of blinking machines surrounding them&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/188749193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A lone figure in modern clothing stands at the edge of a vast, dimly lit server room that stretches endlessly into darkness, cables and towering racks of blinking machines surrounding them" title="A lone figure in modern clothing stands at the edge of a vast, dimly lit server room that stretches endlessly into darkness, cables and towering racks of blinking machines surrounding them" srcset="https://substackcdn.com/image/fetch/$s_!DTS0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Comfort is the slowest career killer in software development. It doesn&#8217;t look like failure, that&#8217;s what makes it dangerous. You&#8217;re shipping, you&#8217;re contributing, the work feels manageable. But underneath that feeling of productivity, your actual capabilities are quietly collecting dust. And the gap between what you <em>think</em> you can handle and what you <em>can</em> handle grows a little wider every time you play it safe.</p><p>Most of us spend our careers quietly optimizing for exactly that. We grab the familiar tickets. We stick with the technologies we already know. We find reasons to stay out of the messy legacy system nobody wants to touch. It feels productive. But here&#8217;s what&#8217;s actually happening: you&#8217;re building the <em>illusion</em> of competence while your real capabilities stagnate. And the worst part? You won&#8217;t know it until the moment it matters most.</p><p>Seneca put it plainly: &#8220;It is not that I am brave, but that I know what is not worth fearing.&#8221; Most of the tickets that make us hesitate aren&#8217;t actually dangerous to our careers. They&#8217;re just uncomfortable. There&#8217;s a difference, and learning to tell them apart is where growth actually starts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying?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://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>Choosing Hard on Purpose</strong></h2><p>The Stoics had a practice called <em>voluntary hardship</em>, deliberately putting yourself in uncomfortable situations not because you enjoy suffering, but because it reveals things about yourself that comfort never will. This isn&#8217;t masochism. It&#8217;s a diagnostic tool.</p><p>Challenging work shows you your real limits, your actual knowledge gaps, and your emotional triggers more accurately than any self-assessment or performance review ever could. You don&#8217;t discover that you&#8217;re weak in UI work by thinking about it. You discover it by taking the UI ticket, grinding through it, struggling, and coming out the other side with a clear picture of where you actually stand.</p><p>That&#8217;s how you figure out what you&#8217;re made of. Not by reading about it. Not by watching conference talks. By doing the work.</p><p>And the flip side is just as true. You take something that scared you, push through it, and realize you&#8217;re actually pretty good at this. That&#8217;s a discovery you never make from the safe end of the ticket queue.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying/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://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying/comments"><span>Leave a comment</span></a></p><h2><strong>The Problem with Waiting Until It&#8217;s Forced on You</strong></h2><p>There&#8217;s a big difference between <em>choosing</em> difficulty and having it dropped on you without warning.</p><p>When you voluntarily seek out hard problems, you have agency. You have time to prepare. You&#8217;re building the muscle before the game is on the line. But if you spend years avoiding everything uncomfortable and then suddenly the business is on fire, the system is down, and you&#8217;re the one holding the keyboard, you&#8217;re facing a five-alarm situation with zero reps under your belt.</p><p>That&#8217;s a terrible place to be.</p><p>Stress-testing systems is standard practice in software. You push load on the system <em>before</em> the traffic spike because you need to know where it breaks before it breaks in production. We are no different. Until we&#8217;re actually under pressure, we don&#8217;t know what we&#8217;re capable of. And building that pressure tolerance is something you have to do deliberately, over time, not in a crisis.</p><h2><strong>What the Hard Ticket Actually Costs You (Hint: Less Than You Think)</strong></h2><p>I work on a payment processing system. It&#8217;s not exactly the ticket people are lining up to grab. Complex business rules, serious compliance requirements, zero room for &#8220;oops.&#8221; A lot of people on the team have zero interest in it. But I took it on, and I&#8217;ve been building major functionality in it, functionality that actually matters to the business.</p><p>Here&#8217;s what that cost me: some uncomfortable weeks of ramping up. Some moments of genuine uncertainty. A few late nights tracing through code I didn&#8217;t write.</p><p>Here&#8217;s what it gave me: visibility. Credibility. The kind of hands-on understanding that you simply cannot Google your way to. When you&#8217;re the person willing to go where others won&#8217;t, the organization notices. The contribution becomes more valuable precisely because the barrier to entry is high.</p><p>That&#8217;s the visibility paradox. The problems that scare everyone else are the ones that make your contributions stand out.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Good Stress Is a Thing</strong></h2><p>Most of us are wired to avoid stress wherever possible, and that makes sense on the surface. But there are two kinds of stress, and collapsing them together is a mistake.</p><p>Distress, the kind that grinds you down and burns you out, is worth avoiding. But eustress, the productive pressure of a hard deadline or a challenging problem, is actually where some of your best work happens. Deadlines force hyper-focus. Pressure strips away the noise and forces you to solve the actual problem in front of you rather than the abstract version of it. Some of the cleanest, most elegant solutions I&#8217;ve ever written came out of &#8220;we need this working by end of day&#8221; situations where I had no choice but to think clearly and move fast.</p><p>That kind of pressure builds a tolerance. And once you&#8217;ve shipped something real under real stakes, every future high-pressure situation feels a little more manageable.</p><h2><strong>The Confidence Compounds</strong></h2><p>Here&#8217;s something that doesn&#8217;t get talked about enough: the confidence you build from technical challenges doesn&#8217;t stay in the technical domain. It transfers.</p><p>You white-knuckle your way through a gnarly integration that nobody else wanted to touch, and you ship it. A month later, you&#8217;re in a room negotiating scope with a project manager who&#8217;s pushing back hard. Or you&#8217;re giving a presentation to stakeholders who are skeptical. Or you&#8217;re being asked to lead something for the first time. That reservoir of &#8220;I&#8217;ve done hard things before&#8221; is sitting right there, and it&#8217;s real. You can draw on it.</p><p>Every challenge, whether technical or personal, teaches a simple lesson: it&#8217;s just another problem to solve. You&#8217;ve figured out hard things before. You&#8217;ll figure this out too.</p><h2><strong>Stop Waiting for the Safe Moment</strong></h2><p>The comfort zone doesn&#8217;t protect you. It just makes the eventual collision with difficulty more violent because you&#8217;ve been doing nothing to prepare for it.</p><p>Adversity isn&#8217;t optional. It&#8217;s coming regardless. The only choice you have is whether you meet it with some reps behind you or whether you meet it cold. Avoiding challenges doesn&#8217;t make you comfortable, it makes you brittle. It quietly strips away your tolerance for difficulty until the day when avoidance isn&#8217;t possible and you have nothing left to draw on.</p><p>The developers who build the careers worth having aren&#8217;t the ones who avoided the hard stuff. They&#8217;re the ones who kept picking up the scary ticket, kept pushing into unfamiliar territory, kept stressing their own systems before the system got stressed for them.</p><p>Your resume tells people where you&#8217;ve been. How you handle difficulty tells them where you&#8217;re going.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;The impediment to action advances action. What stands in the way becomes the way.&#8221; - Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item><item><title><![CDATA[Everything You're Learning Right Now Will Be Obsolete]]></title><description><![CDATA[Here's Why That Should Fire You Up]]></description><link>https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 15 Feb 2026 12:45:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rJ8w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.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://substackcdn.com/image/fetch/$s_!rJ8w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rJ8w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2130281,&quot;alt&quot;:&quot;A Roman marble bust of a Stoic philosopher slowly dissolving into streams of glowing source code and digital particles&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/187966964?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A Roman marble bust of a Stoic philosopher slowly dissolving into streams of glowing source code and digital particles" title="A Roman marble bust of a Stoic philosopher slowly dissolving into streams of glowing source code and digital particles" srcset="https://substackcdn.com/image/fetch/$s_!rJ8w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>I spent three months building a Flash application back in 2003. I&#8217;m talking late nights, weekends, the whole deal. I was proud of that thing. It was slick, it was responsive, it did exactly what the client needed. I remember showing it off to my team like I&#8217;d just built the Sistine Chapel ceiling out of ActionScript.</p><p>That application doesn&#8217;t exist anymore. Neither does the company that commissioned it. Neither does Flash.</p><p>And you know what? That&#8217;s fine. Better than fine, actually. Because the Stoics figured out something about two thousand years ago that most of us in tech are still struggling to accept: everything ends, and that&#8217;s not a tragedy, it&#8217;s the whole point.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now?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://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>Memento Mori for Your Codebase</strong></h2><p>The ancient Stoics had this practice called <em>memento mori</em>, &#8220;remember that you will die.&#8221; But it wasn&#8217;t meant to be depressing. Marcus Aurelius used to meditate on his own mortality not to freak himself out, but to sharpen his focus. If your time is limited, you stop wasting it on things that don&#8217;t matter. You show up more fully for the things that do.</p><p>Now apply that to your code.</p><p>Every line you write today will be deleted, rewritten, or abandoned. Every framework you master will eventually fade into irrelevance. Every architectural decision you agonize over will be reversed by someone who thinks they know better. And honestly, they might.</p><p>This isn&#8217;t pessimism. It&#8217;s just the nature of what we do. And once you stop fighting it, something shifts. You stop writing code like you&#8217;re carving it into marble. You start writing it like it&#8217;s meant to solve <em>this</em> problem, for <em>these</em> people, right now. And weirdly enough, that makes you a better developer.</p><p>I can think back across 25 years in this industry, applications I poured myself into, systems I thought were bulletproof. Where are they now? Gone. Rethought. Reimagined. Absorbed into something else entirely. The technology moved on. The business needs changed. And the code I was so precious about? It served its purpose and then it made way for what came next.</p><p>That&#8217;s not failure. That&#8217;s the job.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now/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://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now/comments"><span>Leave a comment</span></a></p><h2><strong>Stop Building Monuments, Start Solving Problems</strong></h2><p>Here&#8217;s where most of us get tripped up. We get attached. Not just to our code, but to our <em>tools</em>. We wrap our entire identity around being &#8220;a React developer&#8221; or &#8220;a .NET guy&#8221; or whatever framework happens to be hot right now.</p><p>I get it. I&#8217;ve been there. When I made the jump from Flash to .NET development, it felt like starting over from scratch. All that expertise, all those years of learning ActionScript inside and out, suddenly irrelevant. It stung. It felt personal, like the industry was telling me that everything I&#8217;d invested in didn&#8217;t matter.</p><p>But here&#8217;s the thing: it wasn&#8217;t personal. React, Angular, Vue &#8212; they&#8217;ll all get replaced eventually too. Some new hotness will come along and the cycle starts again. If your identity is tied to a specific tool, you&#8217;re setting yourself up to have an existential crisis every few years.</p><p>The Stoics called this <em>apatheia</em>. Not apathy in the way we think of it, but freedom from being jerked around by things outside your control. You don&#8217;t control which frameworks survive. You don&#8217;t control which languages the industry decides to adopt next. What you control is your ability to think clearly, learn quickly, and solve problems regardless of the tools in front of you.</p><p>Data structures. Algorithms. System design. Communication. How to break down a complex problem into manageable pieces. <em>That&#8217;s</em> the stuff that transfers. That&#8217;s what you take with you from job to job, from stack to stack, from one technological era to the next.</p><p>Learning React or .NET or whatever comes next: those are just means to an end. They&#8217;re vehicles, not destinations.</p><h2><strong>The Sh*t That Actually Scares Us</strong></h2><p>The reason impermanence in tech feels so threatening isn&#8217;t because we love our frameworks that much. It&#8217;s because it triggers something deeper, the fear that <em>we</em> might become irrelevant.</p><p>You&#8217;ve felt it. That moment when a junior dev rewrites your &#8220;perfect&#8221; module without even reading your comments. When you&#8217;re in a meeting defending a technology choice and you can see in people&#8217;s eyes that they&#8217;ve already moved on. When you read a job posting and half the required skills didn&#8217;t exist two years ago.</p><p>That anxiety is real. And the knee-jerk reaction is to dig in. To defend the old way. To cling to what you know because at least it&#8217;s familiar. The Stoics had a word for this kind of attachment too. They called it a <em>passion</em>, and not in a good way. It&#8217;s an irrational emotional response that clouds your judgment and keeps you stuck.</p><p>Think about sunk cost for a second. How many times have you watched a team defend an outdated approach not because it was the best solution, but because they&#8217;d already invested so much time in it? &#8220;We can&#8217;t switch now, we&#8217;ve spent six months on this.&#8221; Yeah, and you&#8217;ll spend six more months making it work when the right answer was to let it go three months ago.</p><p>When you accept obsolescence upfront. When you walk into a project knowing that this too shall pass, you don&#8217;t fall into that trap. You make decisions based on what&#8217;s best <em>now</em>, not on what justifies your past choices.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>The AI Elephant in the Room</strong></h2><p>And then there&#8217;s the big one. The thing that&#8217;s accelerating all of this impermanence at a pace none of us were really prepared for.</p><p>AI isn&#8217;t just another tool in the belt. It&#8217;s the impermanence engine. It&#8217;s taking skills that used to be the bread and butter of a developer&#8217;s career and commoditizing them in real time. Boilerplate code? AI handles that. Repetitive tasks? Automated. That thing you spent three years mastering? There&#8217;s a prompt for it now.</p><p>You can either freak out about that or you can see it through the Stoic lens. This is creative destruction happening at scale. The developers who thrive won&#8217;t be the ones who memorize syntax or cling to their ability to write a perfect for-loop. They&#8217;ll be the ones who know how to <em>think</em>. People who grasp the principles behind the code can design solutions. They can also explain complex ideas to others.</p><p>AI doesn&#8217;t replace that. It makes it more valuable.</p><p>So use the tools. Leverage AI for the grunt work. Invest your energy in timeless skills. Focus on critical thinking, problem-solving, system understanding, and the ability to learn new things.</p><h2><strong>The Beginner&#8217;s Advantage</strong></h2><p>When you know that everything becomes obsolete, continuous learning stops feeling like you&#8217;re desperately trying to keep up.</p><p>Instead, it just feels like... being alive.</p><p>Like staying curious. You&#8217;re not behind, you&#8217;re just always at the beginning of something new. And that&#8217;s actually a pretty exciting place to be.</p><p>I&#8217;ve been doing this for 25 years and I&#8217;m still learning. Not because I&#8217;m slow, but because the field demands it. What I knew a decade ago is legacy now. What I&#8217;m learning today will probably be legacy in another five to ten years. And I&#8217;ve made my peace with that.</p><p>You learn early in this career that you&#8217;ll never stop learning. You either embrace that or you burn out fighting it. There&#8217;s no third option.</p><h2><strong>Your Code Dies. Your Growth Doesn&#8217;t.</strong></h2><p>So if nothing lasts, what&#8217;s the point? Why pour yourself into something that&#8217;s just going to be replaced?</p><p>Because it was never about the code lasting forever. It was about what building it <em>did to you</em>. Every problem you solved made you a sharper thinker. Every failed approach taught you something about how systems work. Every late-night debugging session (as much as it sucked in the moment) added something to your toolkit that nobody can take away.</p><p>That Flash application I built in 2003? The code is long gone. But what I learned building it (how to think about user experience, how to optimize performance within constraints, how to communicate with clients who didn&#8217;t speak developer) all of that came with me. It shaped how I approach problems today, twenty years later.</p><p>The Stoics understood that external things are temporary. Your job, your title, your framework of choice: all of it can change tomorrow. But your character, your skills, your ability to adapt and grow. That&#8217;s yours. That&#8217;s what you&#8217;re really building every time you sit down at the keyboard.</p><p>Your code&#8217;s value isn&#8217;t in lasting forever. It&#8217;s in solving today&#8217;s problems and teaching you what you needed to learn to solve tomorrow&#8217;s.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;Loss is nothing else but change, and change is nothing else but Nature&#8217;s delight.&#8221;  - Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.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">The Stoic Coder 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><p></p>]]></content:encoded></item></channel></rss>