<?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>Sat, 29 Aug 2026 10:20:09 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 Forecast Was Never the Point]]></title><description><![CDATA[Knowing what's coming was never the hard part. Knowing what to do about it always was]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-forecast-was-never-the-point</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-forecast-was-never-the-point</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 23 Aug 2026 11:45:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AYRZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_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_!AYRZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AYRZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!AYRZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!AYRZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!AYRZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AYRZ!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/584b6f60-07de-4172-847d-1947a9da1aac_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;:1702890,&quot;alt&quot;:&quot;A weathered stone sundial half-shrouded in thick morning fog&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/212275558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A weathered stone sundial half-shrouded in thick morning fog" title="A weathered stone sundial half-shrouded in thick morning fog" srcset="https://substackcdn.com/image/fetch/$s_!AYRZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!AYRZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!AYRZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!AYRZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584b6f60-07de-4172-847d-1947a9da1aac_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p><span>At some point in every career, someone asks you to predict the future. Not literally. Nobody hands you a crystal ball in a meeting. But the question shows up in disguise, over and over: what&#8217;s going to happen to this role, this industry, this skill you&#8217;ve spent a decade building. And underneath the question is a hope.</span></p><p><span>If you could just get the prediction right, the fear would go away.</span></p><p><span>It won&#8217;t.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-forecast-was-never-the-point?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-forecast-was-never-the-point?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p><span>After twenty-five years, I&#8217;ve seen developers ask about outsourcing. They also wonder about the cloud and no-code platforms. Each new trend brings fears that their jobs might disappear. A different decade brings the same question and hope: if I knew what was coming, I could stop my fear now.</span></p><p><span>That hope is a category error. Knowing the outcome in advance was never going to tell you what to do today. It only felt like it would.</span></p><p><span>Epictetus spoke about this clearly, avoiding the usual comforting quotes people share. He talked about how Romans practiced divination. It was common. You would visit a diviner, pay for a reading, and receive answers about how your plans might turn out. Epictetus didn&#8217;t tell his students to stop going. He told them to notice what the diviner could and couldn&#8217;t actually give them.</span></p><p><span>The diviner can tell you the event. He cannot tell you whether the event is good or bad for you, because that was never his to know. It was already decided, before you walked in, by what kind of decision you were prepared to make in response. If duty calls you to stand by a friend in danger, Epictetus says, and the reading comes back unlucky, you go anyway. The forecast doesn&#8217;t change the action. It was never going to.</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>That&#8217;s the part people skip when they reach for prediction as a cure for anxiety. They imagine that if they could just see far enough ahead, they&#8217;d know what to do. But you already know what to do, or you know how to find out, using the same judgment you&#8217;d use whether the news is good or bad. Seeing the future in advance doesn&#8217;t hand you that judgment. It just moves the moment you&#8217;d need it. You&#8217;d still have to decide how to respond, on the other side of knowing, with the same self you have right now.</span></p><p><span>I think this is worth saying plainly for people in this field specifically, because our industry has a forecasting habit baked into it. We&#8217;re trained to estimate, to plan sprints, to model out what a system will need in six months. That instinct is useful for software. It&#8217;s close to useless for a career, because a career isn&#8217;t a system you&#8217;re designing from a spec. Nobody hands you the requirements in advance. You find out what the requirements were by living through them, the same way everyone before you did.</span></p><p><span>So what do you actually do instead of forecasting.</span></p><p><span>You do what Epictetus emphasized: decide ahead of time how you will respond, no matter the outcome. Not the outcome itself. The response. That&#8217;s the only part that was ever available to you before the fact, and it&#8217;s the only part that was ever going to matter.</span></p><p><span>This means the questions we should focus on aren&#8217;t &#8220;What&#8217;s going to happen to this skill?&#8221; or &#8220;Will this role still exist?&#8221; Those questions have no answer you can act on today, and chasing one is just anxiety wearing a research hat. The questions to consider are: If my fear happened tomorrow, what would the best version of me do next? Would I know how to learn. Would I know how to start over on something smaller than my ego wants. Would I still recognize good work when I did it, even without the title that used to certify it for me.</span></p><p><span>Answer those, and you&#8217;ve done the only preparation that was ever real. You haven&#8217;t reduced the uncertainty by one percent. You&#8217;ve made yourself into someone who doesn&#8217;t need it reduced.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-forecast-was-never-the-point/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-forecast-was-never-the-point/comments"><span>Leave a comment</span></a></p><p><span>This isn&#8217;t resignation. People often hear &#8220;stop trying to predict the future&#8221; and think it means being passive. They believe it&#8217;s about just waiting for things to happen. It&#8217;s the opposite. Forecasting is actually the passive move, dressed up as diligence. You&#8217;re outsourcing your peace of mind to information you don&#8217;t have and can&#8217;t get. Deciding your response in advance is active. It&#8217;s the only thing in this whole equation that was ever yours to build.</span></p><p><span>I&#8217;ve watched this play out both ways across a career, in myself and in people I&#8217;ve worked with. Developers who focused on guessing future technologies often struggled when changes hit. The ones who did best were those who quietly developed the ability to be useful, no matter the direction. That capacity didn&#8217;t come from a correct guess. They decided ahead of time what kind of worker and person they would be, no matter what the news was.</span></p><p><span>You don&#8217;t need to see it coming. You need to already know who you&#8217;ll be when it arrives. Those are different problems, and only one of them was ever solvable.</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[Somebody Is Still Vouching for You]]></title><description><![CDATA[You knew before they did. That gap is the part you own.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/somebody-is-still-vouching-for-you</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/somebody-is-still-vouching-for-you</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 16 Aug 2026 11:46:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LtxH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_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_!LtxH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LtxH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!LtxH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!LtxH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!LtxH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LtxH!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81a05e1b-0bf1-487f-80bf-0ce693e81313_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;:1133661,&quot;alt&quot;:&quot;empty corporate meeting room after a meeting&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/211296419?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="empty corporate meeting room after a meeting" title="empty corporate meeting room after a meeting" srcset="https://substackcdn.com/image/fetch/$s_!LtxH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!LtxH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!LtxH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!LtxH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a05e1b-0bf1-487f-80bf-0ce693e81313_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p><span>There was a time I worked as a team lead, still a developer but also closer to the customers. Basically, I was involved with feature requests as well as first in line for complaints.</span></p><p><span>The mechanics of that job are simple. Someone tells you the feature will be done in three weeks and the budget will hold.</span></p><p><span>So you take their word. Then you turn around and give that word to the customer.</span></p><p><span>A chain of people taking each other at their word, because the alternative is verifying everything yourself, which means the chain does not exist and neither does the work.</span></p><p><span>The word travels. What gets said in a standup does not stay in the standup. It gets carried into a room you are not in, by someone who has to keep facing the people in it long after you have moved on to the next ticket.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/somebody-is-still-vouching-for-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/somebody-is-still-vouching-for-you?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong><span>The Break</span></strong></h2><p><span>Sometimes three weeks becomes five. Sometimes the budget was never going to hold.</span></p><p><span>I have been in the meeting after that. You explain it to the customer. You give them the reasons, and the reasons are usually real. Something was harder than it looked. A dependency moved. The requirements were less settled than everyone had been pretending. None of it is a lie.</span></p><p><span>But you are the one saying it, and the person who made the commitment is not in the room. They are back at their desk, working. From where they sit, the outcome was a date that moved. From where you sit, something got spent that does not come back.</span></p><p><span>Missing the date is frequently nobody&#8217;s fault. I have said before that an estimate was never a promise about a future you control, and I still think that.</span></p><p><span>The failure is somewhere else.</span></p><h2><strong><span>The Gap</span></strong></h2><p><span>In almost every one of these, the person doing the work knew before I did.</span></p><p><span>Not with certainty. Not with a new number. But they knew.</span></p><p><span>There is a day, usually well before the deadline, when the person building the thing stops believing their own estimate. They do not announce it. They keep working. They tell themselves they can make it up, and sometimes they do.</span></p><p><span>That gap, between the day you stop believing it and the day you say so, is the whole subject.</span></p><p><span>Because during that gap the number is still circulating. Somebody is still repeating it. Still planning against it. Still telling a customer it is on track. Still declining to line up a fallback, because as far as they know there is no reason to.</span></p><p><span>Every day of that silence is a day somebody else spends credibility on your behalf, out of an account you do not own and cannot see the balance of.</span></p><p><span>You were not idle during that gap. You were working hard. That is what makes it so easy to miss. It feels like effort, because it is effort, aimed at the wrong obligation.</span></p><p><span>The miss was never fully in your control. The gap was entirely in your control. It is the only part of this that ever was.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/somebody-is-still-vouching-for-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/somebody-is-still-vouching-for-you/comments"><span>Leave a comment</span></a></p><h2><strong><span>The Other Side</span></strong></h2><p><span>I have been on the other side of it.</span></p><p><span>I have held a number past the point I believed it. Not out of dishonesty. It felt like loyalty to the work. Saying something early feels like quitting early, like asking to be let off before you have really tried. So you stay quiet and you push, and staying quiet feels like the more committed thing to do.</span></p><p><span>It is not. It is the cheaper thing to do. Speaking up early costs you something immediately, in the moment, in front of people. Staying quiet costs somebody else, later, out of your sight.</span></p><p><span>Every incentive you can actually feel in your body points at the second one.</span></p><p><span>Epictetus noticed that we only count a loss when it is material.</span></p><p><span>Money, property, a limb. Then he asked whether fidelity is not also something a person can lose, and whether losing it is not also damage.</span></p><p><span>Nothing material moves when a date slips. The retro finds a process cause. The estimate gets called optimistic.</span></p><p><span>Every measurement comes back clean, because nothing measures the thing that actually got spent.</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>What It Costs to Fix</span></strong></h2><p><span>The practice is small.</span></p><p><span>Tell the person repeating your number on the day you stop believing it.</span></p><p><span>Not the day it comes due. Not once you have a recovery plan, or a root cause, or a version of the story where you come out reasonable. The day the belief changes. On that day you usually have nothing useful to offer except the fact itself.</span></p><p><span>Say it anyway. I said three weeks. I no longer think three weeks is right. I do not have the new number yet. That is a complete message. It is enough for somebody downstream to stop spending.</span></p><p><span>You will be wrong sometimes. You will say it, then make the date anyway, and feel like you raised an alarm over nothing. Take that trade. The cost of being early and wrong lands on you, in one uncomfortable conversation you will forget inside a month. The cost of being late and right lands on somebody who trusted you and never got told there was a decision being made.</span></p><p><span>Right now somebody is repeating a number you gave them, to a person they have to face again next week.</span></p><p><span>Whether it is still true is something you know and they do not.</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[I Kept the Decisions and Gave Away the Typing]]></title><description><![CDATA[A CSV parser, a junior developer, and the wrong place to cut a task in half.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/i-kept-the-decisions-and-gave-away</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/i-kept-the-decisions-and-gave-away</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 09 Aug 2026 11:45:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TRBE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_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_!TRBE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TRBE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!TRBE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!TRBE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!TRBE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TRBE!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06a209d1-4364-453e-b2dc-901800e56b6f_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;:2065879,&quot;alt&quot;:&quot;weathered limestone block split cleanly in two, one half deeply eroded and pitted from long exposure,&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/210349255?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="weathered limestone block split cleanly in two, one half deeply eroded and pitted from long exposure," title="weathered limestone block split cleanly in two, one half deeply eroded and pitted from long exposure," srcset="https://substackcdn.com/image/fetch/$s_!TRBE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!TRBE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!TRBE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!TRBE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06a209d1-4364-453e-b2dc-901800e56b6f_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p><span>I cannot point to one person. That is the first problem with writing this down.</span></p><p><span>There is no single developer I can name, no particular afternoon I can put a date on. It happened often enough over twenty five years that the faces run together. Someone came to me stuck, I looked at what they were stuck on, and I built enough of it to get them moving. Then I went back to my own work feeling like I had done the right thing, because I had.</span></p><p><span>One of them still surfaces, though.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/i-kept-the-decisions-and-gave-away?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-kept-the-decisions-and-gave-away?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p><span>We had a client with a public website we had built for them. Product catalog, entity model we had designed a year or so before, all of it stable and working. They had another internal system holding the authoritative product data, and they wanted that data on the site. The export came out as CSV. A decent number of fields, each one needing to land somewhere in the entities we had already built.</span></p><p><span>The work was a parser. Read the file, map the columns, build the objects, handle duplicates, validate that the required fields were actually there. Straightforward in shape, fuzzy in the details, the kind of ticket that looks small until you are inside it.</span></p><p><span>The developer assigned to it was junior. Solid for his experience, the sort you hand real work to because he would finish it.</span></p><p><span>This was years before anyone was pasting a CSV into a model and asking for a parser back. If he got stuck, he was going to Google it, or read the docs, or find a Stack Overflow answer from 2009 and work out which parts still applied.</span></p><p><span>I had written a lot of file parsers by that point. So I sat down and knocked out a start. A few hours. The file was open, the stream was reading, three or four fields were mapped into the entity, and I wrote one validation check as an example of the pattern. Not tested properly. Not finished. Deliberately not finished. I left most of it for him.</span></p><p><span>Then I sent it over and went back to my own work.</span></p><p><span>He finished it. It worked. The import ran, the products showed up on the site, and nobody mentioned it again.</span></p><p><span>A few hours of my time against what would have been a few days of his. The client had a date. I knew this problem cold and he did not.</span></p><p><span>And I did not hand him a finished routine. I want to be clear about that too, because it is the part I was quietly proud of at the time. I held back on purpose. I left him the bulk of it.</span></p><p><span>Here is what I actually left.</span></p><p><span>The remaining fields, which were the same operation as the first three, repeated thirty times.</span></p><p><span>The duplicate handling, which was the one genuine open question in the ticket, except the database already had a constraint on it. So the answer was not something he had to reason toward. It was going to arrive as an exception at insert time and he was going to catch it. That is debugging. Debugging is a fine thing to learn. It is not the same as deciding what a duplicate means for this client&#8217;s product data and then going to find out whether the schema agreed with you.</span></p><p><span>The validation was closed by the example I wrote. One instance of a pattern turns every remaining case into copying.</span></p><p><span>The entity mapping was closed by the three fields I had already mapped, which said, in effect, these go here.</span></p><p><span>And the question of what the ticket even was, whether this was a parsing problem or a modeling problem or a business rules problem wearing a parser costume, was closed before he opened the file. Because a file already open and a stream already reading answers that question. It says: this is typing. Follow the pattern.</span></p><p><span>So he typed.</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>I left him the bulk of it, and the bulk of it was grunt work. Every question in that ticket that could have taught him something had already been answered by the time he saw it. Some of them by me, one of them by the database, and the largest one by the shape of what I sent.</span></p><p><span>That is the part I got wrong, and it is not the part I would have guessed.</span></p><p><span>What I could have sent instead was smaller and would have cost me fifteen minutes. A link to the docs for reading a file in C#. A note that there was a stream API worth understanding before he picked an approach. And a question: which of our entities do these columns belong to, and what makes a row a duplicate here?</span></p><p><span>That version takes him longer. Days, probably, and some of those days are him going in a direction that does not work and coming back. From the outside, those days look identical to being stuck. They are not. They are the only part of the ticket that was going to leave anything behind.</span></p><p><span>I have written a lot about choosing difficulty. Doing the hard version on purpose. Staying in the confusion instead of reaching for the thing that ends it. All of it aimed inward, at myself, or at you doing it for yourself.</span></p><p><span>That handoff was a decision about somebody else&#8217;s difficulty. His formation, his hours, his chance to hit the edge of what he knew and go find out. I spent all of it and it cost me nothing. I was not even the one who would have had to sit through the slow days. He was.</span></p><p><span>That is a strange kind of authority to hold over another person&#8217;s week, and I did not know I was exercising it.</span></p><p><span>The feature shipped. The client was satisfied. He finished the work and I imagine he felt fine about finishing it, and I felt fine about having unblocked him. Every visible signal available said this went well.</span></p><p><span>Compare that to the mistakes that actually teach you something.</span></p><p><span>Years ago I built one feature in a stable system using a framework nobody else on the project used, because the standard approach felt boring. That one buckled under production load, cost weeks to rebuild, and cooled a client relationship in a way I could feel in meetings for months afterward. I learned it immediately, because it hit me in the face.</span></p><p><span>This one thanked me.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/i-kept-the-decisions-and-gave-away/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-kept-the-decisions-and-gave-away/comments"><span>Leave a comment</span></a></p><p><span>I still do not know what it cost. Maybe nothing. Maybe he wrote five more parsers and the sixth one taught him everything mine skipped. Maybe he is better at this than I am by now. I am not going to claim a harm I cannot demonstrate.</span></p><p><span>But the absence of a bad outcome is not evidence that the call was right, and a mistake that produces no evidence in either direction is one you can go on making for twenty five years without anything ever stopping you. No test catches it. No review raises it. No retro has a column for it. And the person on the other end cannot see what he was not given, because you cannot see the shape of an absence when the absence is all you have ever worked in.</span></p><p><span>I wrote that sentence once about my own first four years, working without a senior developer anywhere near me. It points in both directions.</span></p><p><span>The whole thing came down to a single seam, and I cut it in the wrong place. I kept the decisions and gave away the typing.</span></p><p><span>None of this had anything to do with AI, which is exactly why it is worth writing down. This was one person with a few hours and good intentions, deciding by hand where to divide a task, and dividing it in the place that removed everything worth having. The tools did not invent this failure. They inherited it. What I did occasionally, for one developer, while trying to leave something behind, is now available instantly, to anyone, on request, with no intention behind it at all and nobody on the other end deciding which half to keep. The seam has not moved. It just gets cut a thousand times a day now, by something that is not thinking about it.</span></p><p><span>So the question I did not ask then, and try to ask now, is not whether I have time to help.</span></p><p><span>It is whose difficulty this is, and which half of it I am about to spend.</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[What You Owe the Strangers Who Run Your Code]]></title><description><![CDATA[The build tells you it works. Nothing tells you what it does.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/what-you-owe-the-strangers-who-run</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/what-you-owe-the-strangers-who-run</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 02 Aug 2026 11:45:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XZBo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.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_!XZBo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XZBo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png 424w, https://substackcdn.com/image/fetch/$s_!XZBo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png 848w, https://substackcdn.com/image/fetch/$s_!XZBo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png 1272w, https://substackcdn.com/image/fetch/$s_!XZBo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XZBo!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png" width="1200" height="514.2857142857143" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:624,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1830284,&quot;alt&quot;:&quot;ancient stone amphitheater seen from directly above&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/209372014?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="ancient stone amphitheater seen from directly above" title="ancient stone amphitheater seen from directly above" srcset="https://substackcdn.com/image/fetch/$s_!XZBo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png 424w, https://substackcdn.com/image/fetch/$s_!XZBo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png 848w, https://substackcdn.com/image/fetch/$s_!XZBo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png 1272w, https://substackcdn.com/image/fetch/$s_!XZBo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0a1d897-8495-4224-bd38-2a2ac15bd646_1680x720.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p><span>You write the function, run the suite, watch it go green.</span></p><p><span>I have argued before that the compiler is the one judge you cannot talk past. A tired reviewer can be worn down. A manager against a deadline can be managed. A failing test cannot be negotiated with. I still believe that, and I left out half of it.</span></p><p><span>The judge answers one question: Is this correct?</span></p><p><span>It has never once answered what the correct thing does to anybody.</span></p><p><span>Nothing else in the pipeline answers it either.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/what-you-owe-the-strangers-who-run?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/what-you-owe-the-strangers-who-run?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong><span>Hierocles Drew Circles</span></strong></h2><p><span>There was a Stoic in the second century named Hierocles. Nearly all of him is lost. One image survived.</span></p><p><span>Picture yourself at the center of a set of rings. You, then your household, then relatives, then neighbors, then the city, and at the far edge everyone else. Strangers you will never meet.</span></p><p><span>Drawing the rings was not the point. He wanted you to pull the outer ones inward, to treat someone further out the way you would treat someone a ring closer. His method was oddly specific. Change what you call them. Address the cousin as a brother, the uncle as a father. Fix the language and let the feeling arrive behind the name.</span></p><p><span>He is not asking for impartiality. Closer stays heavier. The instruction is narrower than it sounds and it is achievable. Move one ring.</span></p><p><span>Now put a deployment in the middle of that diagram.</span></p><p><span>In his world, distance and effect traveled together. The stranger sat at the far edge because your life did not reach them. The rings measured closeness and consequence at the same time, because those were the same measurement.</span></p><p><span>They are not the same measurement anymore. The person at the outer edge of your rings is living inside a decision you made in ninety seconds and never revisited. The distance held. The effect collapsed. You reach the last ring hourly, at volume, feeling about it exactly what anyone feels about the last ring.</span></p><p><span>I am not standing outside this. Code I wrote years ago is still running and I could not name one person who runs it. Not a name, not a job, not a room they sit in. That does not make me negligent, it makes me a working developer. The job is built that way.</span></p><p><span>And our word for them is users. A container you can put a million people into and carry with one hand. Hierocles would have recognized immediately what that word is doing.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/what-you-owe-the-strangers-who-run/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/what-you-owe-the-strangers-who-run/comments"><span>Leave a comment</span></a></p><h2><strong><span>You Don&#8217;t Pick the Features. That Was Never the Obligation.</span></strong></h2><p><span>You did not choose the product. You did not write the requirements. You were handed a ticket with acceptance criteria attached, and the decisions that determine what this software does to people were made in rooms you were not in. Push back hard enough and often enough and you get managed out, and the thing ships anyway with somebody else&#8217;s name on the commit.</span></p><p><span>All of that is accurate. It is also the most load bearing excuse in this profession, and it is covering for a pile of decisions nobody made you make.</span></p><p><span>The timeout you picked without thinking, which decides whether someone on a bad connection finishes the form or loses everything they typed into it.</span></p><p><span>The error message you left as &#8220;An error occurred. Please try again,&#8221; read at eleven at night by somebody with no idea whether their money moved.</span></p><p><span>The validation rule you tested against your own name, which rejects a real one for having an apostrophe in it.</span></p><p><span>The retry that quietly swallowed a failure, so someone believes their submission went through.</span></p><p><span>Nobody assigned you those. No reviewer will comment on them. They take under two minutes each, and they are the parts of the system a stranger actually has to stand inside.</span></p><p><span>That is the obligation, and it is smaller than it sounded. Not the roadmap. The ninety-second decisions, and what you are willing to say out loud before the thing ships.</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>Nothing Will Prompt You</span></strong></h2><p><span>There will never be a ticket that says a human being is on the other end of this. The suite will not check for it. The linter has no rule. The retro will not get to it. Every prompt this job gives you points at the machine, because the machine is the part that answers in seconds.</span></p><p><span>So it has to be deliberate, and small enough to survive a normal week.</span></p><p><span>Before you close the ticket, take one pass through it as one person. Not users. One. Somebody with a bad connection, an unusual name, a reason to be doing this at eleven at night, and no idea what any of your words mean. Then read your own work back and ask what the next five minutes look like for them.</span></p><p><span>That is the practice. It costs a minute and it will not always change anything.</span></p><p><span>You still will not learn their name. That part is permanent. The rings do not close.</span></p><p><span>You pull anyway.</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[Mentorship as a Debt, Not a Favor]]></title><description><![CDATA[You owe the company nothing. That was never the whole accounting]]></description><link>https://thestoiccoder.michaelclawrence.com/p/mentorship-as-a-debt-not-a-favor</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/mentorship-as-a-debt-not-a-favor</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 26 Jul 2026 11:45:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0ZKh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_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_!0ZKh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0ZKh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!0ZKh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!0ZKh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!0ZKh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0ZKh!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a90acc0-7474-4aa0-a2af-1db08a4a11bd_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;:2169394,&quot;alt&quot;:&quot;weathered Roman stone aqueduct receding into distance, arches diminishing one after another into pale morning mist&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/208449802?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="weathered Roman stone aqueduct receding into distance, arches diminishing one after another into pale morning mist" title="weathered Roman stone aqueduct receding into distance, arches diminishing one after another into pale morning mist" srcset="https://substackcdn.com/image/fetch/$s_!0ZKh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!0ZKh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!0ZKh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!0ZKh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a90acc0-7474-4aa0-a2af-1db08a4a11bd_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p><span>I spent my first four years without a senior developer.</span></p><p><span>The first three were at a startup. I was hands on with everything, learning whatever I could get in front of, figuring things out because there was nobody else to figure them out. Year four was an agency. Strict, fast, the kind of place where a lot of your energy goes into not getting hit by whatever is coming next. I learned a great deal in both places.</span></p><p><span>What I did not learn was what I was missing. That part does not announce itself. You cannot see the shape of an absence when the absence is all you have ever worked in. I thought I was doing the work, and I was doing the work.</span></p><p><span>Year five was another startup, and this time there was Terry.</span></p><p><span>I picked up a project he had started, and early on he walked me through his build and testing setup. It did not make sense to me. Writing code to test code looked like a tax on getting anything done. You can see the application. You can click through it. Why build a second system to tell you what your eyes are already telling you.</span></p><p><span>Then the dev cycle did what dev cycles do. Changes went in. One small change, in a place that looked unrelated, broke something that mattered. Not visibly. The screens came up. Everything worked the way it was supposed to look. Underneath, a value was wrong, and that wrong value went downstream and became a data problem nobody would have caught by clicking around.</span></p><p><span>The tests caught it. That was the moment the whole thing turned over.</span></p><p><span>What Terry handed me was not a testing framework. It was the understanding that a system appearing to work and a system being correct are two different claims, and only one of them can be verified by looking. Four years of hands on experience had not gotten me there. One person, one project, one afternoon of being walked through something I was sure was overhead.</span></p><p><span>I never paid Terry back. I could not have. At the time I did not know the size of what I had been given.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/mentorship-as-a-debt-not-a-favor?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/mentorship-as-a-debt-not-a-favor?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong><span>Marcus Kept A List</span></strong></h2><p><span>Marcus Aurelius opens Meditations with an inventory.</span></p><p><span>Not a meditation on gratitude. A list. His grandfather, his mother, his teachers, the emperor who adopted him, each one named, each one credited with something specific. From this one, how to read carefully rather than skim and call it reading. From that one, not to be taken in by nonsense. The most powerful man alive began his private notebook by accounting for which parts of himself were not self-made.</span></p><p><span>He settles none of it. Most of the people on that list were dead by the time he wrote it. There is no plan in Book 1 to repay anyone, because repayment was not available. The purpose of the list is not sentiment, it is accuracy.</span></p><h2><strong><span>A Favor Closes. A Debt Does Not.</span></strong></h2><p><span>A favor is optional, and it flatters whoever grants it. You did something you did not have to do, the other person says thank you, and the ledger closes. That is how most of this industry thinks about mentorship. A generous thing a senior does when there is bandwidth for generous things.</span></p><p><span>A debt is a different instrument. It is a fact about your position whether you acknowledge it or not. It did not require your consent and it does not close when you say thanks.</span></p><p><span>So do the accounting. Separate the parts of your judgment you built alone from the parts that were handed to you. Not facts. Facts are available anywhere, that is what documentation is for. Judgment: what you weigh before you commit, what makes you slow down, what you refuse to ship. A meaningful share of it came from people who got nothing back for giving it to you.</span></p><h2><strong><span>The Company Is Not The Counterparty</span></strong></h2><p><span>I have spent two years writing that employment is transactional, and none of it gets walked back here. The company will drop you in a quarter if the numbers say so. Hold your career accordingly, without illusions and without loyalty nobody paid for.</span></p><p><span>That has nothing to do with this.</span></p><p><span>The debt to Terry never sat on the company&#8217;s books. The company could not settle it, could not cancel it, and had no standing in it. Quitting does not clear it. A bad employer does not void it. Those are transactions with the entity signing the checks, and this is a separate account entirely.</span></p><p><span>Confusing the two is how a lot of good developers arrived at the conclusion that they owe nobody anything, when the true version is narrower: you owe the company nothing.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/mentorship-as-a-debt-not-a-favor/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/mentorship-as-a-debt-not-a-favor/comments"><span>Leave a comment</span></a></p><h2><strong><span>&#8220;Why would I train my replacement&#8221;</span></strong></h2><p><span>The objection shows up on schedule, and in this market it is not stupid. Junior roles are thinning. Companies are asking out loud whether they need the position when the tools cover the output. The pressure is real, and it makes refusing look like prudence.</span></p><p><span>Here is what it misses.</span></p><p><span>Terry had the same option. He was a senior developer at a startup with somebody else&#8217;s junior on his project, and the arithmetic of spending an afternoon on my testing education instead of shipping was not favorable to him. Nobody paid him extra. It did not go on a review. He did it anyway, and he did it well enough that I am still describing it twenty some years later.</span></p><p><span>The obligation was never contingent on the math working out. That is exactly what separates it from a transaction. A debt payable only when convenient is a favor, and we have already been through what a favor is.</span></p><p><span>A thinning pipeline does not lighten what you owe. It makes you one of a shrinking number of people still able to pay it.</span></p><h2><strong><span>What Paying Looks Like</span></strong></h2><p><span>Mostly it is unglamorous, and mostly it costs time you would rather spend shipping.</span></p><p><span>It looks like walking someone through the thing they are certain is overhead, and staying in the conversation past the point where they nod, because Terry did not stop at my first nod.</span></p><p><span>It looks like letting confusion sit instead of resolving it for them. Answering with the wrong amount of help is the most reliable way to spend the time and transmit nothing.</span></p><p><span>That is most of it. The cost is real, and the return does not come back to you.</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>The Chain Only Runs One Direction</span></strong></h2><p><span>Epictetus never wrote anything down. Everything we have from him exists because Arrian, a student, took notes and kept them.</span></p><p><span>Musonius taught Epictetus. Epictetus taught Arrian. Arrian wrote it down, and a copy of that reached Rusticus, and Rusticus handed it to Marcus, who read it and started a notebook of his own, which reached you.</span></p><p><span>Not one of those debts ran backward. Marcus never repaid Rusticus and could not have. What he did instead was become the kind of emperor Rusticus made possible, and then write it down for whoever came next.</span></p><p><span>You are on that chain whether you intended to be or not. Somebody put you here.</span></p><p><span>The payment only goes forward.</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[Same Question, Two Answers]]></title><description><![CDATA[The first tool on your desk that won't repeat itself, and what that should change about how far you trust it.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/same-question-two-answers</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/same-question-two-answers</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 19 Jul 2026 11:45:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9xhK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_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_!9xhK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9xhK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!9xhK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!9xhK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!9xhK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9xhK!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14f34e0d-3706-4694-afda-41cf3ab6a757_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;:1684644,&quot;alt&quot;:&quot;Two nearly identical weathered standing stones side by side on bare ground&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/207543730?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="Two nearly identical weathered standing stones side by side on bare ground" title="Two nearly identical weathered standing stones side by side on bare ground" srcset="https://substackcdn.com/image/fetch/$s_!9xhK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!9xhK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!9xhK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!9xhK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f34e0d-3706-4694-afda-41cf3ab6a757_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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p><span>A while back I was building an iOS app and hit a spot where I needed user data to sync automatically across a person&#8217;s devices. In Apple&#8217;s world that means wiring your data layer up to CloudKit. I was using SwiftData, the current way to handle persistence, so I asked the model how to connect the two.</span></p><p><span>The first session, it handed me a solution built on Core Data. Core Data is the older framework, the one SwiftData was designed to succeed. The code was not wrong, exactly. It would have run. It was just the previous decade&#8217;s answer to a question I was asking this year, and nothing in the response mentioned that.</span></p><p><span>I asked the same thing again in a separate session. This time it surfaced Apple&#8217;s own documentation and walked me straight to the current SwiftData approach, the one I had been looking for in the first place.</span></p><p><span>Same question. Two sessions. Two different answers, and the gap between them was not noise. It was years of framework design. If I had only ever run the first session, I would have built on the old way and never known the clean one was sitting right there.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/same-question-two-answers?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/same-question-two-answers?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><span>The First Tool That Samples</span></h2><p><span>I have used a lot of tools in twenty-five years. Compilers, debuggers, linters, editors, build systems. Every one of them had a property so basic I never once thought about it: it did the same thing twice. Feed it the same input and it hands you back the same output, today, tomorrow, on the machine in the next room. That sameness is the reason I could trust a tool without watching it. I never had to sort my instruments into ones I could rely on and ones I could not, because none of them had ever surprised me.</span></p><p><span>The model is the first tool on my desk that samples.</span></p><p><span>Ask it the same thing on Tuesday and Thursday and you may get two different answers, both fluent, both confident, one of them wrong. It draws from a distribution instead of returning a fact, and the interface is careful not to remind you of that.</span></p><p><span>A deterministic tool can be wrong. A compiler with a bad flag will be wrong the same way every time, and you can find the pattern and route around it. What the model takes away is reproducibility. The wrongness moves. You cannot build a stable relationship with an instrument that will not hold still, and reproducibility was the quiet thing that let you off-load to every tool you ever trusted. Pull it out and the tool does not get less useful. It gets differently useful, in a way most developers have not accounted for.</span></p><h2><span>Operating Is Not Controlling</span></h2><p><span>The trap is not that the model is unreliable. You can plan around unreliable. The trap is that it does not feel unreliable while you are using it.</span></p><p><span>You prompt it. You refine the prompt. You do not like the answer, so you re-roll, steer, add a constraint, try again. The whole loop feels like driving. Your hands are on the wheel the entire time, and a thing you are steering feels, in the moment, like a thing you control.</span></p><p><span>Epictetus opens the </span><em><span>Enchiridion</span></em><span> by cutting the world in two. Some things are up to us and some are not.</span></p><p><span>Up to us: our judgments, our choices, what we assent to.</span></p><p><span>Not up to us: everything else, no matter how close it sits to our hands.</span></p><p><span>The whole of the philosophy runs on sorting each thing into the right column and then spending your energy only in the first one. Get the sort wrong and you pour yourself into things you were never going to govern, and call the exhaustion that follows bad luck.</span></p><p><span>Operating a thing is not the same as controlling it. You operate the market when you place a trade. You do not control where it goes. You operate the weather in the sense that you decide when to walk out into it, and you control none of it. And you operate the model when you prompt it, but what comes back is not up to you. It is a sample. You did not produce it. It happened to you, dressed up as something you made.</span></p><p><span>That is the misclassification, and almost everyone is making it. The output arrives, it is articulate, it appeared in response to your keystrokes, so it files itself under </span><em><span>mine, produced, up to me</span></em><span> before you have thought about it. Then you stake real weight on it, because that is what you do with things you made yourself.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/same-question-two-answers/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/same-question-two-answers/comments"><span>Leave a comment</span></a></p><h2><span>The Question Changes</span></h2><p><span>Put it back where it belongs. The model&#8217;s answer is not up to you. File it under the same heading as the weather and the market and every other external that does not check with you first, and watch what changes.</span></p><p><span>The question stops being </span><em><span>do I trust this</span></em><span>. Trust is the wrong frame for an external that samples, the same way trust is the wrong frame for a coin. The question becomes </span><em><span>how much am I willing to build on an answer I cannot reproduce.</span></em><span> That is a question with a real answer, and the answer moves case by case. A throwaway script, build on it freely, the cost of a bad draw is nothing. A date calculation in a payments path, verify every line yourself before you stake a cent of your judgment on it, because the confident wrong answer costs the same whether a person or a distribution handed it to you.</span></p><p><span>You start treating the model the way a Stoic treats anything that will not behave. You plan around its behavior instead of trusting its consistency. It is the brilliant contractor who is sharp on Tuesday and wrong on Thursday and never tells you which day it is: you use the work, and you check it, and you do not hand him the keys. You do not fire the weather for raining. You bring a coat.</span></p><h2><span>The Oldest Competence</span></h2><p><span>None of this is a new practice you have to install. This is the oldest competence the philosophy has. Stoicism was never built for a world that behaves. It was built for weather, markets, other people, the body, luck, every force that acts on your life without consulting you. Two thousand years of the discipline is one long training in living well next to things you do not control. The non-deterministic tool is just the newest member of that ancient family.</span></p><p><span>What is new is only this: it is the first one that lives inside your workflow and wears the costume of something you own. The market is honest about being outside you. The weather never once pretended to be your idea. The model does pretend, every time it answers in your voice to your prompt, and the pretense is the whole of its power to pull you into the wrong column.</span></p><p><span>So do the thing the philosophy has always asked. Sort it correctly. The output is not yours and never was. Once it sits in the right column, it loses the one thing it had going for it, which was the illusion that you made it and can therefore trust it like you trust your own reasoning. You cannot. You did not do the reasoning. Something drew a sample.</span></p><p><span>That is the entire move. Not a habit, not a checklist. Just putting a thing back where it belongs, which is the first thing the </span><em><span>Enchiridion</span></em><span> ever asked anyone to do, applied to the strangest tool a developer has ever been handed.</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 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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">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></channel></rss>