<?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, 30 May 2026 18:52:24 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[You're Getting Better at the Wrong Thing]]></title><description><![CDATA[After 25 years, I'm convinced the craft problem and the character problem are the same problem.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 24 May 2026 11:45:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QyPd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QyPd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QyPd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QyPd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1579842,&quot;alt&quot;:&quot;A weathered developer sits alone at a sparse wooden desk, soft morning light falling across an open notebook and a single cup of coffee&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/198975716?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A weathered developer sits alone at a sparse wooden desk, soft morning light falling across an open notebook and a single cup of coffee" title="A weathered developer sits alone at a sparse wooden desk, soft morning light falling across an open notebook and a single cup of coffee" srcset="https://substackcdn.com/image/fetch/$s_!QyPd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!QyPd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F293f0e2c-738f-4e37-a97f-37ed92091df7_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Early in my career, I watched a developer do something I&#8217;ve never forgotten.</p><p>He inherited a codebase that was, by any honest measure, a mess. Years of rushed deadlines, mid-sprint requirement changes, and the particular brand of creative improvisation that happens when good developers are under constant pressure. The kind of code that tells a story. Not a flattering one, but a real one.</p><p>He was talented. Genuinely good. And he was furious.</p><p>Within a week, he had decided to rewrite the entire e-commerce system from scratch. The right way, this time. Clean architecture. Proper separation of concerns. The kind of code you&#8217;d be proud to show in an interview. He was meticulous about it. He worked longer hours than anyone on the team. He was, in his own estimation, fixing what was broken.</p><p>What he actually did was break what was working.</p><p>The original system, for all its ugliness, had accumulated years of edge case handling. Weird discount logic that reflected real customer behavior. Payment processing quirks specific to their merchant processor. The kind of institutional memory that doesn&#8217;t live in documentation, it lives in code that&#8217;s been in production long enough to absorb the real world.</p><p>His rewrite was architecturally beautiful and practically broken. It took months to untangle.</p><p>When I think about that developer now, what strikes me isn&#8217;t the technical failure. The technical failure was just the outcome. What strikes me is what he never saw: that his internal state was doing the work. He thought he was making an engineering decision. He was executing an emotional one. The system he shipped was organized by anger, and it looked clean, and it didn&#8217;t work.</p><p>He treated it as a technical problem. It wasn&#8217;t.</p><p>In 25 years, I have watched that pattern in a hundred forms. The developer who can&#8217;t hear feedback because their certainty is load-bearing. The architect who solves every problem with another abstraction layer because abstraction feels like intelligence. The senior engineer who stopped learning at year seven and mistakes comfort for mastery. Different symptoms. Same root.</p><p>The root isn&#8217;t technical. It never was.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h3><strong>The Wrong Question</strong></h3><p>Most developers spend their careers asking one question: <em>how do I get better at this?</em></p><p>It&#8217;s a good question. It has real answers. Deliberate practice on hard problems. Working alongside people who are better than you. Reading widely, not just documentation, but systems, histories, postmortems. Staying curious about the craft itself, not just the tools. These things work. They produce competent developers.</p><p>They don&#8217;t produce wise ones.</p><p>The technical question optimizes for a specific kind of output. You get faster. You accumulate patterns. You build intuitions about architecture, about performance, about where bugs tend to hide. All of that matters. All of that is real.</p><p>But past the journeyman stage, and you reach that stage earlier than you think, more of the same returns less. The developer who grinds harder on the technical question past that inflection point isn&#8217;t getting sharper. They&#8217;re just staying busy. They&#8217;re adding syntax to a foundation that isn&#8217;t the problem.</p><p>The developers who don&#8217;t plateau, don&#8217;t burn out, don&#8217;t lose the plot at year twelve, they found a different question. Not consciously, for the most part. Nobody sat them down and assigned it. But somewhere along the way, they started asking something else.</p><p>The question isn&#8217;t <em>how do I get better at code?</em></p><p>It&#8217;s <em>what kind of developer am I becoming through this work?</em></p><p>That sounds like a soft question. It isn&#8217;t. It&#8217;s harder than any technical problem you&#8217;ll face, because it has no Stack Overflow answer and no framework that solves it for you. And ignoring it, which most developers do, because the technical question is so much more tractable, doesn&#8217;t make it go away. It just means the answer accumulates silently, in the background, until you&#8217;re that developer rewriting working systems out of ego and calling it engineering.</p><h3><strong>What Stoicism Actually Is</strong></h3><p>I want to be direct about something before going further, because this is where people tend to check out.</p><p>Stoicism has a branding problem. Most of what circulates under that name is a thin self-help product: control what you can control, don&#8217;t sweat the rest. It&#8217;s not wrong, exactly. But it&#8217;s the philosophy stripped of everything that makes it worth practicing. It&#8217;s the bumper sticker without the argument.</p><p>The actual practice has real load-bearing pieces, and three of them apply to software development with uncomfortable precision.</p><p>The first is what Epictetus called <em>prosoche</em>: a sustained, disciplined attention to your own internal state. Not a journaling practice. Not meditation, though those can serve it. The actual discipline of noticing, in real time, what is happening inside you before it becomes behavior. The anger before it becomes a rage rewrite. The anxiety before it becomes an architectural decision made from fear. The certainty before it calcifies into an inability to hear what someone is actually saying to you.</p><p>Marcus Aurelius&#8217;s <em>Meditations</em> are, essentially, prosoche in written form. A daily record of a man watching himself think, catching his own patterns, trying to close the gap between his values and his behavior. He was the most powerful person on earth and he spent his mornings doing this work. That&#8217;s not incidental.</p><p>The second is <em>askesis</em>: what Seneca and Epictetus both described as voluntary discomfort, the deliberate choice to stay with what&#8217;s hard rather than reach for what&#8217;s easier. Not punishment, but training. You don&#8217;t stumble into deep competence by accident. You choose difficulty repeatedly, especially when you don&#8217;t feel like it, because the struggle is where the actual formation happens. Seneca recommended periodically living as if poor, not out of asceticism, but to prove to himself that what he feared losing wasn&#8217;t actually what sustained him. The principle scales: every time you skip the painful debugging session by asking someone else, every time you reach for an abstraction before you understand the concrete, you&#8217;re making a small choice against formation.</p><p>Those choices compound.</p><p>The third is the dichotomy of control. And I want to rescue this one from its bumper sticker version, because it&#8217;s a sorting tool, not a coping mechanism. Epictetus opens the <em>Enchiridion</em> with it for a reason: some things are up to us, some things are not, and wisdom begins with correctly sorting everything in your life into one of those two categories. The question isn&#8217;t <em>how do I feel okay about things I can&#8217;t control?</em> The question is <em>where exactly is my sphere of genuine agency, and am I actually working there?</em></p><p>Most developers are working outside it constantly. Reacting to code someone else wrote as if it&#8217;s a personal affront. Anxious about market forces they cannot move. Performing competence for stakeholders who don&#8217;t understand what they do. That&#8217;s not bad character, it&#8217;s what happens when nobody gives you the sorting tool. The work is scattered across the uncontrollable, and it feels like effort, and it produces very little.</p><p>These three practices are two thousand years old. They were developed by people who had nothing like software in mind. They fit the specific conditions of software development. The uncertainty, the pace, the fragile ego that the industry somehow both produces and exploits, with an accuracy that still surprises me.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/youre-getting-better-at-the-wrong/comments"><span>Leave a comment</span></a></p><h3><strong>The Right Question</strong></h3><p>Go back to that developer and the e-commerce rewrite.</p><p>What he lacked wasn&#8217;t technical knowledge. He had more than enough of that. It was, in fact, his technical knowledge that made the failure possible. He could see clearly everything that was wrong with the original system. He had the skills to fix it. What he didn&#8217;t have was <em>prosoche</em>. The self-awareness to notice that his certainty about the right answer was being generated by his anger at the wrong one. His internal state was the variable. He never looked at it.</p><p>The right question, <em>what kind of developer am I becoming through this work?</em>, is a prosoche question. It requires watching yourself over time. Not in a self-absorbed way, but in the way that Marcus Aurelius watched himself: practically, unsparingly, with the goal of closing the gap between who you are and who your work requires you to be.</p><p>What does that actually look like at year five? At year fifteen? At year twenty-five?</p><p>At year five, the right question starts to reveal that technical skill is not the ceiling you thought it was. You&#8217;ve watched junior developers who are technically sharper than you produce worse outcomes, and you&#8217;re starting to understand why: they can&#8217;t hear feedback, they can&#8217;t operate in uncertainty, they can&#8217;t estimate honestly because their ego is on the line. You realize that you are also doing all of these things, just with more years behind you. The question starts to feel urgent.</p><p>At year fifteen, the right question sounds different. You&#8217;ve accumulated enough judgment to walk into an unfamiliar codebase and know, within an hour, where the real problems are. Not from technical inspection alone, from pattern recognition that lives somewhere below the explicit, built from thousands of situations where you paid attention to what was actually happening, not just to the code. You can hear a requirements meeting and catch what&#8217;s not being said. You can feel the moment a technical decision is actually a political one wearing technical clothing.</p><p>That capacity doesn&#8217;t come from solving more tickets. It comes from having practiced prosoche across thousands of decisions. Having paid attention to your own internal state often enough, honestly enough, that your read of a situation now includes what you&#8217;re bringing to it.</p><p>At year twenty-five, the question has become something close to habitual. You don&#8217;t ask it explicitly every day. But the practice of asking it, over decades, has changed what you notice and how quickly you notice it. You sit with a hard problem differently. Not with less uncertainty, with more comfort in uncertainty. The willingness to stay in the not-knowing until the actual shape of the problem becomes clear, rather than reaching for the nearest pattern that fits.</p><p>That capacity, to sit with a hard problem rather than execute the first solution that reduces the discomfort of not-knowing, is <em>askesis</em> applied. It is the compounding return on having practiced voluntary discomfort. You stay with what&#8217;s hard because you have trained yourself to stay with what&#8217;s hard, and staying has become less costly than it used to be.</p><p>Here&#8217;s what doesn&#8217;t produce this: solving more tickets. Accumulating more frameworks. Getting faster at the technical parts of the job. Those things are real and they matter, but they are not the thing.</p><p>The thing is philosophical. It has always been philosophical.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h3><strong>What Actually Compounds</strong></h3><p>Technical skill has genuine diminishing returns past the journeyman stage. This is observable. Every senior engineering team has watched it: the brilliant junior who peaks at year five because they stopped choosing difficulty. The mid-level developer running the same three architecture patterns on every problem because those patterns work and nothing hurts enough to require something new. The staff engineer who can solve any technical problem put in front of them and cannot, for the life of them, figure out why they feel irrelevant.</p><p>It&#8217;s not that their skills degraded. It&#8217;s that their skills stopped growing in the direction that matters, because they were still asking the first question (<em>how do I get better at this?</em>) long after the ceiling on that question became visible.</p><p>What compounds differently is judgment. And judgment, I want to be clear about what this actually is, is not instinct. It is not talent. It is not something you either have or don&#8217;t.</p><p>Judgment is developed attention, over time.</p><p>The developer at year fifteen who can walk into an unfamiliar codebase and feel, within an hour, where the bodies are buried. They&#8217;re not magic. They have been practicing prosoche. They have been paying disciplined attention to their own read of situations, to the patterns in their own perception, across thousands of instances. They&#8217;ve been getting fast at noticing what they&#8217;re noticing.</p><p>They will tell you they have good instincts. They don&#8217;t. They have something better: a calibrated relationship with their own attention, built through practice. The difference matters because instincts can&#8217;t be transferred and can&#8217;t be improved. Developed attention can be both.</p><p>The practical consequence: the questions that feel most important at year three, <em>which framework should I learn, is this the right stack, am I behind?</em>, are almost entirely technical questions with technical ceilings. They are worth answering. Answer them. And then start asking the question underneath them, before you reach year seven and find yourself wondering why the work that used to feel like growth now just feels like effort.</p><p>There is a version of a software career that is twenty-five years of accumulating syntax. And there is a version that is something else entirely. Something harder to name and much harder to acquire, because it requires a different kind of attention than the industry teaches you to pay.</p><p>The developers who figure out which version they&#8217;re building, early enough to do something about it, are not smarter. They found the right question sooner.</p><h3><strong>Where This Goes</strong></h3><p>Three practices. Not a philosophy lecture, three concrete things that take fifteen minutes each to learn and a career to get right.</p><p>The morning sequence: before the day&#8217;s first Slack notification, before the standup, before anything external has a claim on your attention, take fifteen minutes to set an intention grounded in what you actually value. Not what you need to ship. What kind of developer you want to be today. It sounds soft. It is structurally the most important fifteen minutes of the day, because everything else follows from what it surfaces.</p><p>The evening review: Seneca did this every night. He described it in <em>De Ira</em>: &#8220;I examine my entire day and go back over what I&#8217;ve done and said, hiding nothing from myself, passing nothing by.&#8221; Five questions. Where did I fall short? What went well? What was outside my control and am I still holding it anyway? What did I learn? What is my intention for tomorrow? Fifteen minutes. The compounding effect, over years, is not theoretical.</p><p>The Stoic pause: in the moment before you respond to the critical code review, the impossible deadline, the Slack message that made you feel what you felt, stop. Physically. Close the laptop screen. Apply the sorting tool: what here is actually in my control? Respond from there. It is the smallest practice and, in the daily conditions of developer work, the one with the most immediate return.</p><p>These are the frameworks I&#8217;ve built The Stoic Coder around. Not because Stoicism is the only lens on this, but because it&#8217;s a 2,000-year-old technology for exactly the problem I&#8217;ve spent 25 years watching developers fail to name: that the work is harder than the technical parts suggest, and the reason is philosophical, and there are actually answers.</p><p>You&#8217;re in the right place to find them.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;First say to yourself what you would be; and then do what you have to do.&#8221; - Epictetus, Discourses</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Humans Are Bottlenecks. That's the Point.]]></title><description><![CDATA[Friction isn't the enemy of quality. It's how quality happens.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 17 May 2026 11:54:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1GPl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1GPl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1GPl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1GPl!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bda19dbe-da80-43e1-8901-36f060e85941_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:2123156,&quot;alt&quot;:&quot;A weathered stone aqueduct stretching across a vast landscape&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/198014309?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A weathered stone aqueduct stretching across a vast landscape" title="A weathered stone aqueduct stretching across a vast landscape" srcset="https://substackcdn.com/image/fetch/$s_!1GPl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!1GPl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbda19dbe-da80-43e1-8901-36f060e85941_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>The software industry has been on a mission to remove its bottlenecks. Slower developers. Code review. Human judgment. The painful friction between &#8220;here&#8217;s what the ticket says&#8221; and &#8220;here&#8217;s what actually ships.&#8221;</p><p>AI makes this mission feel achievable. Finally, we can get the bottlenecks out of the way.</p><p>There&#8217;s one problem with that goal: the bottleneck is the point.</p><p>When a senior developer reviews a pull request and stops cold with a &#8220;<em>wait, what is this doing?&#8221;</em> that pause is not a failure of the process. It&#8217;s the process working. Confusion is data.</p><p>The fact that something took twenty minutes to understand when it should have taken two means something is wrong with what was written.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p><strong>Pain is information.</strong></p><p>A developer who reads code and feels nothing, who zips through review at the same speed regardless of what the code actually contains, is either reviewing code they can read in their sleep, or they&#8217;ve stopped seeing it.</p><p>The friction of reading someone else&#8217;s code: the slowness, the occasional <em>what the hell were you thinking</em>. That&#8217;s not inefficiency. That&#8217;s the quality signal. You need it. Your team needs it. Your production environment at 2am really needs it.</p><p>Now remove the human.</p><p>Automated agents don&#8217;t feel confusion. They don&#8217;t slow down when something is wrong. They don&#8217;t stop at a function name that seems slightly off, or a comment that doesn&#8217;t quite match the implementation, or a change that seems fine in isolation but is going to blow up the integration test they can&#8217;t see from here.</p><p>They ship. Confidently. Quickly.</p><p>And when it breaks, nobody can read the codebase, because nobody wrote the codebase.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/humans-are-bottlenecks-thats-the/comments"><span>Leave a comment</span></a></p><p>The industry heard &#8220;bottleneck&#8221; and heard <em>problem</em>. They heard slow. They heard blocker. They heard something to engineer around.</p><p>What they missed is what every developer who&#8217;s debugged anything already knows: the moment you finally understand the bug is the moment the pain stops. You weren&#8217;t stuck because you were bad at your job. You were stuck because the system was telling you something. The confusion was trying to hand you information. The moment you stopped fighting the friction and started listening to it, that&#8217;s when you found it.</p><p>Removing friction from the development process isn&#8217;t removing inefficiency. It&#8217;s removing the feedback loop that tells you when something is wrong.</p><p>That&#8217;s a different problem. A worse one.</p><p>The Stoics weren&#8217;t advocating for suffering as an end, they were observing that difficulty is how you build the capacity to handle difficulty.</p><p>This is not abstract philosophy. It&#8217;s a practical observation about how human beings develop judgment.</p><p>A developer who has spent five years fighting confusing code. Writing it, breaking it, fixing it, reading other people&#8217;s worst commits at the worst possible moments, has built a model of software systems that lives in their head. It&#8217;s not in any book. It&#8217;s in the scar tissue.</p><p>That model is what catches the null check at code review before it becomes the null check in production.</p><p>AI didn&#8217;t form the model. You did. Through years of friction.</p><p>You are the bottleneck. The bottleneck is the model. The model is the thing no one can replace.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><p>Here&#8217;s what worries me about the current trajectory.</p><p>We&#8217;re building a generation of developers who are going to miss the formation that produces the model. Not because they&#8217;re lazy. Because the environment removed the conditions that produce it.</p><p>You can&#8217;t shortcut the frustration. The frustration is where learning happens. Every hour a junior developer spends confused by a codebase they didn&#8217;t write is an hour they&#8217;re building the mental map they&#8217;ll spend the next twenty years navigating by.</p><p>Pull AI into that loop too early, and the confusion disappears. Not because the developer understood it. Because the AI resolved it before the confusion could do its work.</p><p>That&#8217;s not a win. That&#8217;s a generation of developers who reach senior titles without ever building the model that makes the title mean something.</p><p>I&#8217;m not arguing against using AI. I use it. I&#8217;ll keep using it.</p><p>What I&#8217;m arguing is this: understand what you&#8217;re the bottleneck <em>for</em>.</p><p>You&#8217;re not the bottleneck because you type slowly. You&#8217;re the bottleneck because your judgment, earned through years of watching things go wrong in predictable and completely unpredictable ways, is the mechanism that catches problems before they compound.</p><p>Voluntary discomfort isn&#8217;t just a Stoic practice. In this context, it&#8217;s professional maintenance. Writing code by hand when you could have AI write it. Reading unfamiliar codebases when you could have AI summarize them. Staying in the difficulty long enough to understand it instead of optimizing the difficulty away.</p><p>Because the moment you outsource the hard reading, the slow thinking, the uncomfortable pauses.: you&#8217;re quietly maintaining less of the thing that makes you valuable.</p><p>You don&#8217;t feel it for a while. And then you need the model and it&#8217;s not there.</p><p>The bottleneck is the feature.</p><p>Pain is information. Confusion is data. The friction in the development process&#8212;the human kind, the slow kind&#8212;is what separates <em>shipped</em> from <em>good</em>.</p><p>Own being the bottleneck. It&#8217;s the best thing about you.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;The impediment to action advances action. What stands in the way becomes the way.&#8221; - Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[We Broke Software ]]></title><description><![CDATA[How we learned to ship shit and call it delivery]]></description><link>https://thestoiccoder.michaelclawrence.com/p/we-broke-software</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/we-broke-software</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 03 May 2026 11:45:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yOjd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yOjd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yOjd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yOjd!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1667805,&quot;alt&quot;:&quot;A crumbling Roman marble column mid-collapse, its fractured surface etched with faint circuit board patterns, set against the dark backdrop of a modern developer workspace &quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/196241756?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A crumbling Roman marble column mid-collapse, its fractured surface etched with faint circuit board patterns, set against the dark backdrop of a modern developer workspace " title="A crumbling Roman marble column mid-collapse, its fractured surface etched with faint circuit board patterns, set against the dark backdrop of a modern developer workspace " srcset="https://substackcdn.com/image/fetch/$s_!yOjd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!yOjd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3caffda3-19c2-457d-b12c-c2bc13ef1b5e_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>There&#8217;s a specific kind of frustration that only developers know. It&#8217;s not the frustration of a bug you can&#8217;t track down, or a stakeholder who keeps moving the goalposts. It&#8217;s the frustration of shipping something you <em>know</em> isn&#8217;t right.</p><p>2014 - Enterprise CMS rebuild. The whole promise of the project was better performance, better UX &#8212; and buried in that promise was search. Search was the thing that mattered most to the client. Search was the thing that was supposed to actually get fixed.</p><p>It didn&#8217;t get fixed. It got band-aided. And we shipped it anyway.</p><p>I led that project. That&#8217;s on me. And I&#8217;ll be honest, it wasn&#8217;t relief when we finally shipped it. It was frustration. Because delivery is always expected of us. But there&#8217;s a difference between delivering and delivering <em>shit</em>. Somewhere along the way, we stopped feeling that distinction as sharply as we should.</p><p>What I didn&#8217;t have a name for back then, we have a name for now: <strong>enshittification</strong>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/we-broke-software?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/we-broke-software?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Pattern Has a Name</strong></h2><p>Enshittification, coined by writer Cory Doctorow, describes the gradual decay of digital products. It usually gets applied to platforms: how they start by serving users, then pivot to extracting value from them. But the same pattern plays out in how we build software, sprint by sprint, shortcut by shortcut.</p><p>Timeline and promise drive decisions that quality should be driving. You know it&#8217;s happening. You feel it. But the deadline is real, the stakeholders are waiting, and so you ship the band-aid and tell yourself you&#8217;ll come back and fix it.</p><p>You don&#8217;t come back and fix it.</p><p>The next sprint has its own shortcuts. And the one after that. Each one feels manageable in isolation. Collectively, they compound into something that embarrasses you. Slow apps, inconsistent behavior, features that technically work but don&#8217;t actually serve anyone.</p><p>We&#8217;ve been doing this for years. We just got really good at normalizing it.</p><p>Here&#8217;s the uncomfortable truth: the client in my 2014 project was initially happy with the delivery. The cracks didn&#8217;t show up right away. They never do. That&#8217;s what makes this pattern so easy to fall into. The consequences are delayed, but they&#8217;re never cancelled.</p><h2><strong>AI Didn&#8217;t Create This Problem. But It&#8217;s Making It Worse</strong></h2><p>Let&#8217;s be fair: AI is genuinely changing what&#8217;s possible for developers. Codex, Cursor, Claude. These tools are real, and the productivity gains are real. I&#8217;m not here to tell you to throw them out.</p><p>But here&#8217;s what I&#8217;m watching happen: we&#8217;ve taken a profession that already had a speed problem and handed it a turbocharger. We&#8217;re moving faster. We&#8217;re also making mistakes faster. And instead of using AI to close the gap between what we promise and what we deliver, a lot of us are using it to build more elaborate scaffolding around the wrong problems.</p><p>Agentic workflows. Autonomous pipelines. Multi-model orchestration. Some of it is genuinely useful. Some of it is us chasing the next shiny thing while our customers are still waiting for the thing we promised them two quarters ago.</p><p>The question worth asking is simple: <em>what are we optimizing for?</em> If the answer is &#8220;a faster dev cycle,&#8221; that&#8217;s not good enough. A faster dev cycle that produces the same shortcuts at higher velocity isn&#8217;t progress.</p><p>It&#8217;s just enshittification with better tooling.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/we-broke-software/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/we-broke-software/comments"><span>Leave a comment</span></a></p><h2><strong>The Complexity Tax</strong></h2><p>Frontend development is a decent example of where this gets out of hand. HTML and CSS have evolved into webpack configs, Vite setups, package.json files that look like they need their own documentation. To be clear, modern tooling exists for real reasons. Polished, functional UIs require it. But it&#8217;s worth occasionally asking whether the complexity we&#8217;ve introduced is serving the customer or serving our preference for a particular stack.</p><p>When the tools become the product, something has gone wrong.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Coming Back to Center</strong></h2><p>None of this means slowing down to the point of paralysis. It means being honest about what &#8220;done&#8221; actually means. It means asking, before you ship the band-aid, whether you&#8217;re solving the customer&#8217;s problem or just closing a ticket.</p><p>The rebuild I led in 2014 promised search that worked. We delivered search that barely limped along. The client felt it eventually. That gap between what you promise and what you deliver, customers always feel it eventually. The apps that feel sluggish, the features that half-work, the UX that technically functions but clearly wasn&#8217;t thought through. That&#8217;s the accumulated weight of a thousand decisions where speed won and quality lost.</p><p>We can use better tools. We can run tighter sprints. We can build smarter workflows. But none of that matters if we&#8217;ve accepted a definition of &#8220;shipped&#8221; that means &#8220;it works well enough that no one will complain today.&#8221;</p><h2><strong>The Challenge</strong></h2><p>Here&#8217;s what I&#8217;m putting in front of you: the next time you&#8217;re about to ship something you know isn&#8217;t right, stop for a second. Not to blow up the timeline, just to be honest about what you&#8217;re actually doing.</p><p>Are you solving a real problem for a real customer? Or are you closing a gap between a promise and a deadline and hoping no one notices?</p><p>We have to stop accepting shit as good enough. Not because some blog post told us to. Because we&#8217;re better than that, and our customers deserve better than that.</p><p>The bar we set for ourselves is the bar our software lives up to. What&#8217;s yours?</p><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[I've Used AI. That's Why I'm Not Excited About This.]]></title><description><![CDATA[What happens when the demo ends and the real codebase begins.]]></description><link>https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 26 Apr 2026 11:45:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!so0-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!so0-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!so0-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!so0-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!so0-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!so0-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!so0-!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1514038,&quot;alt&quot;:&quot;A developer sits alone at a cluttered workstation, multiple monitors casting cold blue light across their face, expression unreadable&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/195472838?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A developer sits alone at a cluttered workstation, multiple monitors casting cold blue light across their face, expression unreadable" title="A developer sits alone at a cluttered workstation, multiple monitors casting cold blue light across their face, expression unreadable" srcset="https://substackcdn.com/image/fetch/$s_!so0-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!so0-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!so0-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!so0-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49d1a22b-e407-4256-ada6-3c5b8904774f_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>My company just went all in on agentic AI workflows. Full automation: code, tests, the whole pipeline. The Slack channels lit up immediately. Pure excitement, people sharing demos, optimism everywhere you looked.</p><p>I get it. The first time you watch it work, it genuinely is impressive as hell.</p><p>But here&#8217;s the thing, I&#8217;ve been using AI as a coding assistant on my own projects for a while now. I wrote about building a real iOS app with it<a href="https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres"> here</a>, so I won&#8217;t rehash all of that. The short version: it&#8217;s useful, it&#8217;s not perfect, and working through the imperfections taught me a lot about what these tools actually are versus what people think they are. So while everyone else was marveling at the demo, I was sitting there thinking &#8220;<em>we haven&#8217;t found the sharp edges yet&#8221;.</em></p><p>This isn&#8217;t a hit piece on AI. I think it&#8217;s genuinely useful. But there&#8217;s a big difference between useful and ready. And right now, I&#8217;m not convinced everyone in that Slack channel knows what they don&#8217;t know yet.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>From Side Projects to the Main Stage</strong></h2><p>There&#8217;s a big difference between experimenting with AI on a side project and dropping it into a large, complex, legacy fintech system with real customers on the other end.</p><p>On side work, the stakes are low. If something goes sideways, you fix it, you learn, you move on. But I work on a loan origination and servicing system. We&#8217;re talking about a codebase that&#8217;s been around long enough to have its own mythology. Every piece of logic in there exists for a reason, sometimes a reason nobody fully remembers anymore. That context matters. The domain knowledge matters. The history of why things were built the way they were matters.</p><p>Most of my colleagues are brand new to this space. They haven&#8217;t had the chance to work through the rough edges on lower-stakes stuff first. They&#8217;re jumping straight from zero to full agentic, and the only frame of reference they have is a demo where everything worked perfectly. That&#8217;s a dangerous place to start forming expectations.</p><h2><strong>The Slack Channel Problem</strong></h2><p>Here&#8217;s what happens in every Slack channel when a shiny new thing lands: the optimists are loud, and the skeptics are quiet.</p><p>Nobody wants to be the person who kills the vibe. So the channel fills up with &#8220;&#128293;&#128293;&#128293;&#8221; reactions and screenshots of AI generating code in seconds, and anyone with a more measured take keeps it to themselves. Over time, that silence starts to look like consensus. And before you know it, you&#8217;re treating a tool that&#8217;s been in the building for six weeks like it&#8217;s a solved problem.</p><p>I&#8217;m not saying the enthusiasm is wrong. Excitement about new technology is a good thing. It drives adoption, it drives experimentation, it drives progress. But excitement without skepticism is how you end up in a mess you didn&#8217;t see coming. The people who&#8217;ve actually put time into these tools know they can hallucinate, stray from the task, produce code that looks right but isn&#8217;t, and confidently walk you in the wrong direction. That knowledge changes how you work with them. If you skip that learning curve, you&#8217;re setting yourself up.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/ive-used-ai-thats-why-im-not-excited/comments"><span>Leave a comment</span></a></p><h2><strong>We&#8217;re All Orchestrators Now</strong></h2><p>One of the things I keep hearing is that developers won&#8217;t be replaced, we&#8217;ll just become orchestrators. We&#8217;ll manage the AI, review the output, steer the direction. Sounds reasonable on the surface.</p><p>But think about what that actually means over time.</p><p>The less code you write, the harder it becomes to evaluate the code being written for you. It&#8217;s a feedback loop that works against you. Right now, an experienced developer can look at AI-generated code and spot the problems. The awkward logic, the edge cases it missed, the place where it technically compiles but violates how the rest of the system is supposed to work. That skill exists because of years of writing code, breaking things, and fixing them.</p><p>If we hand off the writing entirely, that skill atrophies. And when it does, who&#8217;s actually reviewing the output? Another automated process? At some point &#8220;human in the loop&#8221; becomes a formality, not a safeguard. In a fintech system where a bad calculation can have real consequences for real people, that&#8217;s not a theoretical concern, it&#8217;s a very practical one.</p><h2><strong>The LOC Flex That Isn&#8217;t</strong></h2><p>Let&#8217;s talk about metrics for a second, because this one drives me insane.</p><p>You&#8217;ve seen the posts. &#8220;AI generated 10,000 lines of code in 30 seconds.&#8221; It&#8217;s always framed like that&#8217;s obviously a good thing, like raw volume is the goal. Spoiler: it isn&#8217;t. It never was.</p><p>Lines of code has always been a garbage metric. It doesn&#8217;t tell you anything meaningful about productivity, quality, or value delivered. The question isn&#8217;t whether AI can write 10,000 lines in 30 seconds. The question is whether you needed 10,000 lines to solve the problem. The question is whether those 10,000 lines actually do what the business needs them to do. The question is whether you&#8217;d want to maintain that codebase in two years.</p><p>Bragging about volume is the AI equivalent of a junior dev who&#8217;s proud of a 500-line function. More code is not better code. Coding has always been a means to an end. The real value is in the decision making, the architecture, the problem solving. Syntax is the easy part. It&#8217;s always been the easy part. AI being good at the easy part isn&#8217;t the revolution it&#8217;s being sold as.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Tests That Pass Aren&#8217;t Always Tests That Matter</strong></h2><p>This one keeps me up at night more than anything else.</p><p>AI is pretty good at generating tests. The problem is it&#8217;s also pretty good at generating tests that pass without actually validating anything meaningful. I&#8217;ve seen it produce tests that check whether a function runs without throwing an error and call it coverage. Technically green. Completely useless.</p><p>In most systems, that&#8217;s annoying. In a fintech system, it&#8217;s a genuine liability. If your tests aren&#8217;t asserting the right things, if they&#8217;re not tied to actual business rules, you&#8217;re not testing anything. You have a false sense of safety. If an AI produces bad tests, what&#8217;s to stop it from subtly adjusting logic elsewhere to make those bad tests pass? It&#8217;s optimizing for green, not for correct. Those aren&#8217;t always the same thing.</p><p>This is where human judgment can&#8217;t be replaced with another automated step. Someone who understands the domain has to look at the assertions and ask whether they actually reflect reality. That requires knowing the business rules. It requires caring about what the code is supposed to do, not just whether it compiles.</p><h2><strong>Where I Actually Land</strong></h2><p>I&#8217;m not out here saying AI is useless. I use it. It speeds things up. It&#8217;s a legitimately good assistant when you keep it focused and stay in the driver&#8217;s seat.</p><p>But there&#8217;s a canyon between &#8220;useful assistant&#8221; and &#8220;autonomous agent running your production pipeline,&#8221; and right now we&#8217;re treating that canyon like a curb. The tooling is early. The integration patterns are still being figured out. Most teams haven&#8217;t had enough time with these tools to develop the instincts for when to trust them and when to push back.</p><p>My honest take: we need to slow down, let the tools mature, and build experience before we hand over the keys. Let people get comfortable with AI as an assistant first. Let them find the edges, make the mistakes in lower-stakes environments, and develop judgment. Then talk about agentic workflows.</p><p>Maybe I&#8217;m wrong. This stuff is moving fast, and I&#8217;m planning to keep writing about it as I get deeper into the process. I&#8217;m genuinely open to being surprised here.</p><p>But &#8220;open to being surprised&#8221; and &#8220;uncritically buying the hype&#8221; aren&#8217;t the same thing; one of them keeps you out of trouble.</p><p>So I want to hear where you&#8217;re at with this. Have you been pushing AI into production workflows, or are you still in the assistant phase? And if you&#8217;ve gone deeper into agentic territory, what have you learned that the demos didn&#8217;t show you?</p><p>Drop it in the comments. The more real-world experience we can put in the same room, the better off we all are.</p><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[I Built a Real iOS App with AI. Here's the Honest Truth]]></title><description><![CDATA[The Good, The Bad, and The Code I Had to Write Myself]]></description><link>https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 19 Apr 2026 11:45:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IDa2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IDa2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IDa2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IDa2!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1264194,&quot;alt&quot;:&quot;A developer hunched over a glowing monitor in a dark room, fingers on keyboard, with a translucent ghostlike second figure leaning in beside them&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/194624035?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A developer hunched over a glowing monitor in a dark room, fingers on keyboard, with a translucent ghostlike second figure leaning in beside them" title="A developer hunched over a glowing monitor in a dark room, fingers on keyboard, with a translucent ghostlike second figure leaning in beside them" srcset="https://substackcdn.com/image/fetch/$s_!IDa2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!IDa2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f1c8b2-39a5-43f9-adf2-5fa140580073_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated with Midjourney</figcaption></figure></div><p>Everyone&#8217;s got an opinion on AI in software development. Half the internet wants to tell you it&#8217;s going to replace developers. The other half is convinced it&#8217;s an overhyped toy that writes garbage code and calls it a day. The truth? It&#8217;s somewhere in the middle. And most people writing about it have never actually shipped anything with it.</p><p>I have. I built a real, live iOS app using Claude Code as my primary coding partner. It&#8217;s in the <a href="https://apps.apple.com/us/app/svngs/id6759472401">App Store</a> right now. And I&#8217;m here to tell you it was both more impressive and more frustrating than I expected.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Project: Svngs+</strong></h2><p>I work as a software engineer in fintech, dealing with legacy loan origination and servicing platforms all day. Heavy C#, TypeScript, SQL. Complex problems. I genuinely love it. There&#8217;s nothing quite like getting lost in a mind-bending problem and finally having that &#8220;aha&#8221; moment.</p><p>Best part of the job.</p><p>But spending that much time in financial systems got me thinking about my own finances. I wanted a simple way to track my savings rate, just log your net income and how much you saved each pay period. That&#8217;s it. No fancy dashboards, no bank integrations, no giving a third-party app access to your financial life.</p><p>So I built Svngs+. A native iOS app. Privacy-first. No third-party APIs, no cloud storage I control. Your data lives in Apple&#8217;s CloudKit, only you can see it. And I used this as the perfect opportunity to push Claude Code and see what it could actually do on a real project, not just a throwaway demo.</p><h2><strong>The Decision That Made Everything Else Work</strong></h2><p>Before writing a single line of code, I made one call that I think saved the whole project: I decided to use Claude as a <strong>pair programmer, not a full agentic solution</strong>.</p><p>This might sound like a small distinction. It&#8217;s not.</p><p>Going fully agentic means handing over the wheel. Let the AI run, generate, commit, and iterate on its own. Some people swear by it. My take? That&#8217;s a great way to end up with a codebase that works until it suddenly, catastrophically doesn&#8217;t. I wanted to review every piece of code Claude generated in real time. I managed the git workflow myself. I stayed in the driver&#8217;s seat.</p><p>That decision shaped everything about how the build went, including knowing when to trust the output and when to throw it out and do it myself.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/i-built-a-real-ios-app-with-ai-heres/comments"><span>Leave a comment</span></a></p><h2><strong>The Framework: Four Parts Before You Write Any Code</strong></h2><p>One thing I&#8217;d recommend to anyone trying this workflow: don&#8217;t just fire up Claude Code and start asking it to build things. You&#8217;ll get slop. I broke the project into four phases before touching the IDE.</p><p><strong>Part 1: Product Definition.</strong> What does this app do, what problem does it solve, who&#8217;s it for? Nothing technical yet. Just the idea, the scope, and a rough version breakdown so I could define a real MVP.</p><p><strong>Part 2: User Flow.</strong> Every screen, every interaction, the full onboarding experience. Map it out before you build it.</p><p><strong>Part 3: Tech Spec.</strong> This is where the nuts and bolts live. Architecture decisions, dependencies, data layer. For Svngs+, that meant Swift, SwiftUI, SwiftData for local storage, CloudKit for cross-device sync, StoreKit for an in-app purchase that unlocks unlimited history, and biometric authentication via Face ID, Touch ID, or passcode.</p><p><strong>Part 4: Build Plan.</strong> This is the heart of working with Claude Code. Break the MVP into phases, break those phases into hyper-focused tasks. Every task is its own session. I also generated a <em>CLAUDE.md</em> file that set up ground rules: patterns to follow, where code should live, what to avoid.</p><p>That structure kept Claude on track. Without it, you&#8217;re just prompting into the void.</p><h2><strong>Where Claude Actually Impressed Me</strong></h2><p>Five weekends. One App Store submission. Let&#8217;s give credit where it&#8217;s due.</p><p>Claude was genuinely strong with Swift. Modern Swift, not legacy Objective-C patterns dressed up in new syntax. Best practices around SwiftUI were solid. The component structure it generated was clean, readable, and maintainable. For a lot of the standard UI work and business logic, I was reviewing code and thinking <em>&#8220;yeah, I&#8217;d have written it pretty much like this.&#8221;</em></p><p>The in-app purchase flow with StoreKit? Handled it well. Local notifications for reminders? Clean. The biometric authentication setup? Worked first time.</p><p>When Claude was in its lane, building against well-documented, modern Apple frameworks, it was a legitimately good pair programmer. Fast, consistent, and it didn&#8217;t complain when I told it to redo something.</p><h2><strong>Where It Fell Apart</strong></h2><p>Here&#8217;s the part that doesn&#8217;t make it into most of these &#8220;I used AI to build an app&#8221; posts. Because there were real failures, and they&#8217;re worth talking about.</p><h3><strong>The SwiftData / CoreData confusion.</strong> </h3><p>SwiftData is Apple&#8217;s modern ORM framework. CoreData is the older one SwiftData is built on. They&#8217;re related but they are <em>not</em> the same thing, and Claude kept reaching for CoreData patterns when it should have been thinking in SwiftData. Early sessions I was catching these before they caused problems. But it was a consistent friction point that required me to course-correct repeatedly. If I hadn&#8217;t known the difference, if I&#8217;d been a less experienced developer leaning on AI to fill knowledge gaps, this would have quietly poisoned the codebase.</p><h3><strong>The CloudKit disaster.</strong> </h3><p>This one&#8217;s the best example of why you cannot go fully agentic and walk away.</p><p>CloudKit sync through SwiftData is largely automatic. Apple built it that way. You configure the container correctly, and it just works. There&#8217;s no custom sync model to write. Claude did not believe this. It kept trying to build me a sync manager, custom code to handle something the framework already handles natively. I kept redirecting it. It kept reverting.</p><p>Eventually I had to configure the CloudKit container myself, following Apple&#8217;s own documentation. Here&#8217;s the kicker: Claude <em>found</em> that documentation. It surfaced the right Apple dev docs during our session. Then apparently decided the docs were optional and did its own thing anyway. I ended up coding that piece entirely by hand.</p><p>The AI found the correct answer and ignored it. Without my experience to recognize the problem and my willingness to step in, that feature would have shipped broken or over-engineered. And I might not have even known why.</p><h3><strong>The StoreKit abstraction it ignored.</strong> </h3><p>Before building the in-app purchase flow, I had a decision to make: StoreKit directly, or RevenueCat. For the MVP I kept it simple and went with StoreKit, but I wanted the flexibility to swap in RevenueCat later if I add subscriptions down the road. The right move in Swift is to define a protocol that the rest of the app talks to, then inject whichever implementation you&#8217;re using. Clean, future-proof, easy to swap.</p><p>Claude built the protocol correctly. Built the StoreKit class correctly. Then went ahead and injected StoreKit directly throughout the app, completely bypassing the abstraction it had just created. It did the hard part right and then ignored it. I caught it, fixed the injection, and now the app talks to the protocol the way it should. But if I hadn&#8217;t been reviewing in real time, I&#8217;d have a codebase that works today and becomes a pain in the ass the moment I want to make a change.</p><h3><strong>The fastlane screenshot setup.</strong> </h3><p>Minor compared to the others, but Claude had real trouble with seed data for automated App Store screenshot generation. I got it across the line myself, but it took longer than it should have.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>The Honest Take</strong></h2><p>Here&#8217;s where I land after five weekends and one App Store submission: AI is a legitimately powerful tool in the right hands. But <em>&#8220;in the right hands&#8221;</em> is doing a lot of work in that sentence.</p><p>You still need to know what good code looks like. You still need to know when to trust the output and when to throw it in the trash. The slop code problem is real. It might not bite you today, but it will eventually. Technical debt is sneaky like that. You feel fine right up until you don&#8217;t.</p><p>Think of it like a junior dev who&#8217;s brilliant half the time and confidently wrong the other half. You wouldn&#8217;t let that person commit without review. Same rules apply here.</p><p>Use AI as a pair programmer. Own the architecture. Review everything. And maybe don&#8217;t let it anywhere near your CloudKit configuration.</p><p>Svngs+ is <a href="https://apps.apple.com/us/app/svngs/id6759472401">live</a> in the App Store if you want to check it out. I&#8217;m already working on the next app using the same workflow and refining the process as I go.</p><p><em>I&#8217;m curious where you&#8217;re at with AI in your own dev work. Are you using it as a pair programmer, or have you gone full agentic? And if you&#8217;ve been burned by slop code making it to production, I&#8217;d love to hear that story, drop it in the comments.</em></p><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Stop Letting Fear Disguise Itself As The Smart Choice]]></title><description><![CDATA[Before you stay or leave, run your decision through this &#8212; it'll tell you everything]]></description><link>https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Mon, 13 Apr 2026 11:45:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ihUE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ihUE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ihUE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ihUE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1298951,&quot;alt&quot;:&quot;A Roman philosopher split down the center, one half weathered stone, the other half reflected in a glowing monitor screen, dramatic chiaroscuro lighting,&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/193967284?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A Roman philosopher split down the center, one half weathered stone, the other half reflected in a glowing monitor screen, dramatic chiaroscuro lighting," title="A Roman philosopher split down the center, one half weathered stone, the other half reflected in a glowing monitor screen, dramatic chiaroscuro lighting," srcset="https://substackcdn.com/image/fetch/$s_!ihUE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!ihUE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90c56cf-7960-4ac1-9e2f-b1a5efcfdcb3_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Every developer hits it eventually. That moment where you&#8217;re staring at your calendar, your codebase, your offer letter. And you genuinely don&#8217;t know which way to go.</p><p>Stay or leave. Startup or enterprise. Double down or walk away.</p><p>Both options feel right <em>and</em> wrong at the same time.</p><p>Several back, I was at a startup. Scrappy, fast, the kind of place where you&#8217;re wearing five hats and shipping things that actually matter. And an opportunity came along to jump ship. More stability. Bigger company. A cleaner title. On paper, it looked like the smart, grown-up move. The <em>safe</em> move.</p><p>So I took it.</p><p>And the comfort I thought I was walking into? It never showed up. The stability wasn&#8217;t stable. The clarity wasn&#8217;t clear. The discomfort found me anyway. It just came wearing a different outfit. I&#8217;d optimized for the wrong thing, and I paid for it.</p><p>That experience cracked something open for me. Because it forced me to ask: if the &#8220;safe&#8221; choice blows up just as badly, what the hell are you actually supposed to use as a compass?</p><p>Turns out, the Stoics had an answer, and it&#8217;s not a pros and cons list.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Problem With How We Make These Decisions</strong></h2><p>Most of us approach career forks like a debugging session. Gather the data. Weigh the variables. Pick the output with the best expected value.</p><p>Salary delta. Growth trajectory. Tech stack quality. Work-life balance score.</p><p>And look, none of that is useless. But it&#8217;s also not enough. Because you can optimize every variable and still end up feeling hollow in the new role by month three. You can turn down the &#8220;risky&#8221; option and still watch your edge dull into nothing over the next two years.</p><p>The Stoics would tell you the spreadsheet is asking the wrong question. The real question isn&#8217;t <em>which path feels safer.</em> it&#8217;s <em>which path makes you better</em>.</p><p>Not better-paid. Not better-titled. Better as a person doing the work you&#8217;re built to do.</p><p>They had a framework for this. Four cardinal virtues: courage, wisdom, justice, and temperance. Not as abstract philosophy, as practical filters for exactly the kind of decision you&#8217;re standing in front of right now.</p><p>Let&#8217;s run your fork through all four.</p><h2><strong>Courage: Is This Fear or Is This Wisdom?</strong></h2><p>Here&#8217;s the first thing you need to be honest about: are you staying because it&#8217;s genuinely the right call, or because you&#8217;re scared to leave?</p><p>These feel different in your chest if you sit with them long enough. Fear has a tightness to it. It whispers. <em>What if you fail? What if the new stack is a disaster? What if you give up the salary and can&#8217;t get it back?</em> Fear is always trying to protect a version of you that doesn&#8217;t exist anymore.</p><p>Courage isn&#8217;t the absence of that voice; it&#8217;s making the call <em>despite</em> it when the call is the right one.</p><p>Courage also means being honest when you&#8217;re chasing excitement for its own sake. Sometimes the bold move is just recklessness wearing ambition&#8217;s clothes. Jumping to a shiny new startup because you&#8217;re bored isn&#8217;t courage. It&#8217;s avoidance with better optics.</p><p>Ask yourself: does this decision require me to grow, or does it just let me escape? Courage grows you. Recklessness just relocates your problems.</p><h2><strong>Wisdom: What Are You Actually Choosing?</strong></h2><p>This is where I got it wrong with my own fork.</p><p>I thought I was choosing stability. What I was actually choosing was the <em>idea</em> of stability. Because I&#8217;d attached a story to the bigger company that had nothing to do with reality. The Stoics call this the trap of <em>preferred indifferents</em>: things like money, title, and comfort that are nice to have but are completely neutral when it comes to your actual character. They can&#8217;t make you better. They can&#8217;t make you worse. They&#8217;re just... things.</p><p>The problem is we treat them like they&#8217;re guarantees. Bigger company = more security. More money = less stress. Better title = more respect. And when reality doesn&#8217;t honor that deal, we&#8217;re blindsided.</p><p>Wisdom means seeing what you&#8217;re actually choosing, not the story you&#8217;ve wrapped around it.</p><p>So ask yourself: in five years, what does this decision look like? Not the salary. Not the title. The version of you that comes out the other side. Is that person sharper or softer? More capable or more comfortable? More themselves or less?</p><p>If you can honestly answer that staying makes you better, stay. If you can honestly answer that leaving makes you better, leave. But make sure you&#8217;re answering the real question. Not the one that makes you feel better right now.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-disguise-itself/comments"><span>Leave a comment</span></a></p><h2><strong>Justice: Who Else Is In This Equation?</strong></h2><p>This one gets skipped a lot. Probably because it&#8217;s uncomfortable.</p><p>Your decision doesn&#8217;t just affect you. It affects your team, your users, your family, the people depending on what you build or lead. And there&#8217;s a version of every career move that&#8217;s just dressed-up selfishness: optimizing purely for yourself while conveniently ignoring the blast radius.</p><p>That doesn&#8217;t mean you owe your employer your entire career. It doesn&#8217;t mean you have to martyr yourself to a role that&#8217;s killing your growth out of some misplaced loyalty. Justice isn&#8217;t self-sacrifice.</p><p>It means being honest about the full picture. If you&#8217;re the only one who knows how the payment processing system actually works and you&#8217;re thinking about walking out mid-sprint with zero handoff, that&#8217;s not bold, that&#8217;s just shitty. If you&#8217;re staying in a role that&#8217;s making you bitter and checked out because you feel guilty leaving, that&#8217;s not noble, it&#8217;s just slow-motion bad for everyone.</p><p>Justice asks: am I being fair? To my team. To my family. To myself. All three. Not just the one that&#8217;s loudest right now.</p><h2><strong>Temperance: Are You Attached or Aligned?</strong></h2><p>Last filter, and arguably the hardest one to apply honestly.</p><p>Temperance is about examining your grip. How tightly are you holding on to what you have &#8212; and why?</p><p>There&#8217;s a difference between staying in a role because you&#8217;re genuinely aligned with the work and the direction, and staying because you can&#8217;t stomach the idea of losing the salary, the title, the status, the daily routine you&#8217;ve built your identity around. One of those is healthy preference. The other is attachment, and the Stoics were pretty clear that attachment is where your judgment goes to die.</p><p>Try this: imagine you leave. The new thing is harder than expected. The stack is a mess. The team is chaotic. You&#8217;re six months in and wondering what you were thinking. Can you handle that? Will you survive it, learn from it, come out the other side with more than you started with?</p><p>If yes &#8212; that&#8217;s the answer you needed. Fear just lost its veto.</p><p>Now flip it. Imagine you stay. Two years pass. You&#8217;re still in the same chair, same problems, same ceiling. What does that feel like? Is that peace or is that resignation?</p><p>Whatever answer comes up first &#8212; trust it. That&#8217;s not anxiety talking; that&#8217;s clarity.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>The Decision Itself</strong></h2><p>Choose the path, then commit completely to <em>walking it well</em>.</p><p>Not to the outcome. You don&#8217;t control the outcome. The startup might fail. The big company might restructure. Your new stack might be a catastrophe in ways nobody saw coming. None of that is yours to control.</p><p>What&#8217;s yours is the quality of the choice and the integrity of how you execute it. Make the decision like it matters, because it does. Then hold your plans loosely, because the world doesn&#8217;t care about your plans.</p><p>And if you&#8217;re still stuck after running all four filters? Ask yourself this:</p><p><em>Which decision requires the better version of me to pull off?</em></p><p>That&#8217;s your answer.</p><p>The fork is uncomfortable by design. It&#8217;s supposed to be. The discomfort is the test. It&#8217;s not about which option is safer. It&#8217;s about whether you live by your values or react to your fears.</p><p>I chose the comfortable-looking path. The comfort never came. But the lesson did.</p><p>Now I want to hear from you:</p><p><strong>Have you ever made the &#8220;safe&#8221; career move and had it blow up anyway? Or are you standing at a fork right now and can&#8217;t figure out which way to go?</strong></p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>First say to yourself what you would be, and then do what you have to do.&#8221; - Epictetus</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Hustle Culture Lied]]></title><description><![CDATA[You Don't Need to Grind Yourself Into Dust to Be a Great Developer]]></description><link>https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 05 Apr 2026 11:45:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YF1e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YF1e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YF1e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YF1e!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1296910,&quot;alt&quot;:&quot;A Roman philosopher in draped marble-white robes seated calmly at a minimal modern desk,&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/193200150?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A Roman philosopher in draped marble-white robes seated calmly at a minimal modern desk," title="A Roman philosopher in draped marble-white robes seated calmly at a minimal modern desk," srcset="https://substackcdn.com/image/fetch/$s_!YF1e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!YF1e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44079da1-f491-4f94-beac-5a042c1a1cbe_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>It&#8217;s 11:47 PM. You&#8217;re not coding. You&#8217;re on LinkedIn, watching someone from your bootcamp cohort announce their Staff Engineer promotion, and something in your chest tightens.</p><p>You tell yourself you&#8217;re just staying informed. But you&#8217;re not. You&#8217;re measuring. And right now, you&#8217;re coming up short.</p><p>I&#8217;ve been there. Doesn&#8217;t matter how many years you&#8217;ve been shipping, the peer promotion gut-punch feels the same at year two as it does at year twenty. Where shipping a feature nobody noticed felt like wasted effort. Where the question wasn&#8217;t &#8220;did I do good work?&#8221; but &#8220;did anyone <em>see</em> me do good work?&#8221;</p><p>That&#8217;s not ambition. That&#8217;s a trap. And the Stoics figured out how to escape it about 2,000 years before hustle culture made it a personality.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Word You&#8217;ve Been Misreading</strong></h2><p>Apatheia. If your brain jumped straight to <em>apathy</em>, you&#8217;re not alone. But you&#8217;re wrong.</p><p>Apatheia doesn&#8217;t mean you stop giving a damn. It doesn&#8217;t mean you coast, phone it in, or stop caring about your craft. It means freedom from <em>destructive</em> passions &#8212; the kind that have you refreshing your GitHub stars at midnight, spiraling when a PR gets torn apart in review, or quietly resenting a teammate&#8217;s promotion.</p><p>The Stoics weren&#8217;t lazy. Marcus Aurelius ran an empire while fighting wars on two fronts and dealing with a plague that killed millions. Seneca was one of the most prolific writers in Roman history. Epictetus built a philosophy school after being a literal slave. These weren&#8217;t people who checked out. They were ferociously committed to their work.</p><p>But here&#8217;s what separated them from the hustle-culture crowd: they didn&#8217;t let outcomes <em>own</em> them.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/hustle-culture-lied/comments"><span>Leave a comment</span></a></p><h2><strong>The Flaw in the &#8220;10x Developer&#8221; Myth</strong></h2><p>Hustle culture has a core belief: the more you suffer for your work, the more virtuous you are. Grind harder. Sleep less. Ship faster. If you&#8217;re not burning out, you&#8217;re not trying hard enough.</p><p>The Stoics would have called bullshit on this immediately.</p><p>Frantic energy isn&#8217;t a sign of dedication. It&#8217;s usually a sign of poor judgment. When you&#8217;re chasing validation instead of craft, you make worse decisions. You over-engineer to impress. You under-communicate because slowing down feels like weakness. You build things nobody asked for because the <em>building</em> feeds your ego, not the <em>problem it solves</em>.</p><p>Here&#8217;s the thing about the 10x developer mythology that nobody says out loud: skill is morally neutral. You can be an exceptional engineer and a miserable, destructive human being. You can write the cleanest codebase your team has ever touched and still be the person everyone dreads pairing with.</p><p>The Stoics cared about <em>virtue</em>, not talent. And virtue shows up in how you show up for your teammates, not just your commit history.</p><h2><strong>What Indifference Actually Looks Like (It&#8217;s Not What You Think)</strong></h2><p>Here&#8217;s the distinction that matters: Apatheia is being indifferent to <em>outcomes</em> while being fully committed to <em>effort</em>.</p><p>Write excellent code because it&#8217;s the right thing to do. Not because you need the dopamine hit of a compliment in Slack. Refactor the messy module because future-you and your teammates deserve better. Not because you want credit for it. Help the junior dev debug their auth issue because that&#8217;s what a good engineer does. Not so you can mention it in your performance review.</p><p>In my fintech work, I&#8217;ve shipped payment infrastructure that processed millions in transactions without a single public-facing acknowledgment. No blog post, no conference talk, no LinkedIn announcement. The code worked. Users didn&#8217;t lose money. That&#8217;s the whole point.</p><p>When you detach your self-worth from external validation, something weird happens: <em>the work gets better</em>. Because you&#8217;re not optimizing for appearance. You&#8217;re optimizing for quality.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Marcus Aurelius Had the Same Problem You Do</strong></h2><p>Marcus Aurelius, emperor of Rome and one of the most powerful humans who ever lived, had to <em>remind himself daily</em> not to get caught up in what other people thought of him.</p><p>His journal, which we now call <em>Meditations</em>, is basically a guy talking himself down from the ledge over and over again. Stop caring what they think. Focus on your own work. Do the right thing even when nobody&#8217;s watching.</p><p>If the ruler of an empire needed that daily reminder, you&#8217;re allowed to need it too.</p><p>Other developers&#8217; success has zero bearing on your path. Someone else getting promoted doesn&#8217;t mean you&#8217;re falling behind. Someone shipping a viral side project doesn&#8217;t mean your side project (or your decision not to have one) is wrong. The variables driving their career are different from yours. The variables you can actually <em>control</em> are different from theirs.</p><p>The only scoreboard that matters is whether you&#8217;re growing, doing honest work, and treating the people around you well.</p><h2><strong>Getting Off the Cortisol Treadmill</strong></h2><p>You can still want the senior role. You can still launch the side project. You can still care about growing your skills and getting better. Apatheia isn&#8217;t telling you to stop striving.</p><p>It&#8217;s telling you to stop letting the <em>gap between where you are and where you want to be</em> eat you alive in the meantime.</p><p>The burnout cycle is real, and it doesn&#8217;t make you more dedicated. It makes you less effective. I&#8217;ve watched incredibly talented developers flame out because they treated exhaustion like a badge of honor. They ground themselves into dust chasing a finish line that kept moving, and eventually they stopped caring about code entirely.</p><p>That&#8217;s not the outcome anyone was aiming for.</p><p>Write clean code. Help your teammates. Keep learning. Pursue the roles and opportunities that align with the kind of engineer and person you want to be. And when marketing conditions shift, when someone else gets the promotion, when your PR gets rejected for the third time: let that be information, not an identity crisis.</p><p>The Stoics weren&#8217;t building a philosophy for people who didn&#8217;t care; they were building one for people who cared <em>too much about the wrong things</em>.</p><p>Sounds familiar, right?</p><p><strong>So here&#8217;s what I want to know:</strong></p><p>Where are you on this? Are you genuinely pursuing excellence &#8212; or are you on the cortisol treadmill, grinding because stopping feels like losing? And if you&#8217;ve found a way off it, what actually worked?</p><p>Drop it in the comments. Seriously.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p><em>&#8220;It is not the man who has too little, but the man who craves more, that is poor.&#8221;</em>  - Seneca</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Your Reaction Is The Bug]]></title><description><![CDATA[Stop Letting Bad Feedback Turn You Into Someone You're Not]]></description><link>https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 22 Mar 2026 11:45:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DQIm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DQIm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DQIm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DQIm!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1321078,&quot;alt&quot;:&quot;A Roman Stoic philosopher and a modern software developer sitting across from each other at a weathered stone table&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/191705920?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A Roman Stoic philosopher and a modern software developer sitting across from each other at a weathered stone table" title="A Roman Stoic philosopher and a modern software developer sitting across from each other at a weathered stone table" srcset="https://substackcdn.com/image/fetch/$s_!DQIm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!DQIm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8050f7c9-12b8-40fc-8945-c7fc35419b2c_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Between the Slack notification and your angry reply, there is a gap. In that gap lives your entire career trajectory.</p><p>Your PR just got torn apart. Not gently, either. Someone went line by line, questioned your architecture, and did it in a public channel where half the team can see it. Your face goes hot. Your fingers are already moving toward the keyboard. You&#8217;ve got a response locked and loaded, and it starts with &#8220;Well, actually...&#8221;</p><p>Stop. Don&#8217;t send it.</p><p>I&#8217;ve been there. Early in my career, I&#8217;d fire back almost immediately. I was convinced that defending my code was the same thing as defending my competence. Looking back now, I can&#8217;t even remember what half those arguments were about. The thing that felt like a five-alarm crisis on a Tuesday afternoon? Gone from my memory entirely. But the reputation I was building, that part stuck around a lot longer than the debate.</p><p>Here&#8217;s what Epictetus figured out a couple thousand years before Slack existed: events themselves are neutral. It&#8217;s our judgment about them that creates the suffering or the peace. Your PR getting reviewed isn&#8217;t an attack. It&#8217;s a process. The attack is a story your brain invented in about 300 milliseconds flat.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>Your First Reaction Is Almost Always Wrong</strong></h2><p>That defensive surge you feel when someone questions your technical decision in front of the team? That&#8217;s not your professional instincts kicking in. That&#8217;s evolutionary firmware running on code that was written for a very different threat environment. Your nervous system genuinely cannot tell the difference between a critical comment on a pull request and a predator in the bushes. It fires the same way either time.</p><p>The Stoics called this the &#8220;first impression&#8221;, the automatic, unchosen reaction that happens before your brain has had time to actually think. The goal isn&#8217;t to kill that reaction. You can&#8217;t. The goal is to create a gap between the impression and your response, and then actually use that gap.</p><p>Even three seconds is enough to shift from defensive to curious. That sounds insultingly simple, and it is. But simple doesn&#8217;t mean easy. The pause is a trained skill, not a personality trait. And most of us have spent years training the opposite habit.</p><h2><strong>The Story You&#8217;re Telling Yourself</strong></h2><p>When someone pushes back on your technical decision, your brain immediately starts constructing a narrative. It&#8217;s not just processing the feedback; it&#8217;s assigning motive, predicting consequences, and scoring the whole thing against your sense of self-worth. By the time you&#8217;re ready to respond, you&#8217;re not responding to the comment anymore. You&#8217;re responding to the movie your brain made about the comment.</p><p>So before you fire off that reply, ask yourself one question: <em>what else could this mean?</em></p><p>What if they&#8217;re trying to prevent a production bug? What if they caught something you genuinely missed? What if they see the codebase from a different angle? Not a better angle, not a worse one, just different. And that perspective is actually useful to you?</p><p>Maybe you introduced a feature that already exists somewhere else in the codebase and someone&#8217;s pointing it out. That&#8217;s not an insult, that&#8217;s someone doing their job. The difference between receiving that as an attack versus receiving it as information is entirely in your head.</p><p>And entirely in your control.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/your-reaction-is-the-bug/comments"><span>Leave a comment</span></a></p><h2><strong>The Practical Tools</strong></h2><p>The Stoics weren&#8217;t just philosophers. They were incredibly practical. Here are three things that actually work:</p><p><strong>The draft folder rule.</strong> Before you hit send on that &#8220;well actually&#8221; message, save it as a draft and come back in an hour. You&#8217;ll delete 80% of them. The other 20% you&#8217;ll rewrite into something that doesn&#8217;t make you look like an asshole. This works for social media too. Write the response, feel the satisfaction of having written it, then let it sit. Most of the time, it never needs to leave your drafts.</p><p><strong>The three questions.</strong> Before reacting, run the comment through a quick filter: Is my interpretation actually true? Is my response necessary? Is it going to move things forward or just make me feel better for thirty seconds? Most knee-jerk reactions fail at least one of those tests. Usually all three.</p><p><strong>The timeline check.</strong> Will this matter in ten minutes? Ten months? Ten years? I&#8217;ve lost sleep over feedback that I legitimately cannot recall today. That&#8217;s not me being zen about it, that&#8217;s just how it played out. The things that feel like career-ending disasters during a sprint rarely survive contact with next week&#8217;s stand-up.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Emotions Are Data, Not Orders</strong></h2><p>Getting angry about a management decision or a brutal code review tells you something real about your expectations and your values. That&#8217;s useful information. It&#8217;s not a command to act on the anger.</p><p>Stoics feel emotions. They&#8217;re not robots. They just don&#8217;t take orders from them.</p><p>There&#8217;s a time to push back and a time to let it go. Not every technical decision is worth the argument. Sometimes the smarter move is to take the feedback, consider it honestly, and ask whether your approach was actually the right one. Sometimes you&#8217;ll decide it was and you&#8217;ll make that case clearly and calmly. Sometimes you&#8217;ll realize they had a point you missed. Both outcomes are fine. Neither of them requires you to go to war in a Slack thread.</p><h2><strong>The Gap Is the Whole Game</strong></h2><p>Change is the one constant in this field. Priorities shift mid-sprint. Architecture decisions get revisited. Someone&#8217;s going to question your code in a public forum again, probably next week. That&#8217;s not a bug in the system. That&#8217;s the system.</p><p>What separates the developers who grow through that process from the ones who get ground down by it isn&#8217;t talent or experience. It&#8217;s the ability to create that gap. Act between the notification and the reply. Shape your impression into a thoughtful response.</p><p>Your career isn&#8217;t built in the moments when everything goes smoothly. It&#8217;s built in the moments when someone tears your PR apart and you respond like a professional instead of a cornered animal.</p><p>The gap is where that happens.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;It&#8217;s not what happens to you, but how you react to it that matters.&#8221; - Epictetus</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Stop Letting Fear Make Your Career Decisions For You]]></title><description><![CDATA[Navigating Career Choices with Virtue]]></description><link>https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 15 Mar 2026 11:45:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ev2C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ev2C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ev2C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ev2C!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1708247,&quot;alt&quot;:&quot;A Roman philosopher in weathered marble relief emerging from shadow into light&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/190967569?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A Roman philosopher in weathered marble relief emerging from shadow into light" title="A Roman philosopher in weathered marble relief emerging from shadow into light" srcset="https://substackcdn.com/image/fetch/$s_!Ev2C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Ev2C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbef3414c-688c-4838-902f-8343b43a0ba9_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>You own your career. The job is just a rental.</p><p>That distinction sounds simple, but most developers never actually internalize it. Instead, we treat every career decision like it&#8217;s a life sentence: agonizing over spreadsheets, running endless pros-and-cons lists that somehow never resolve, and letting fear and greed drive choices that should be driven by something a hell of a lot more solid.</p><p>The Stoics figured this out a long time ago. The best decisions don&#8217;t come from calculating every possible outcome. They come from asking one question: <em>what does virtue demand of me right now?</em></p><p>I know that sounds abstract. Let me make it concrete.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Moment the Spreadsheet Fails You</strong></h2><p>A few years back, I was still building Flash applications when the writing was on the wall. Adobe was circling the drain, and every developer I knew was either panicking or pretending nothing was happening. I made a bet on .NET and enterprise. Not because the numbers were perfect, but because it felt like the right long-term play. Was it scary? Absolutely. But staying put felt like a different kind of scary. The slow, comfortable kind that eventually swallows you whole.</p><p>That decision wasn&#8217;t made on a spreadsheet. It was made on instinct that had been sharpened by asking the right questions.</p><p>The Stoics had a framework for this. Four virtues (wisdom, courage, justice, and temperance) that they believed could guide any decision, in any situation. And honestly? They hold up remarkably well when a recruiter is blowing up your LinkedIn with a shiny new offer.</p><h2><strong>Wisdom: Fear vs. Prudence</strong></h2><p>Are you staying because you&#8217;re genuinely building something valuable, or because change terrifies you?</p><p>Those are completely different things, and your brain will lie to you about which one is operating. It&#8217;ll dress up fear as loyalty. It&#8217;ll call avoidance &#8220;being strategic.&#8221; Wisdom is what cuts through that noise.</p><p>Ask yourself: if fear weren&#8217;t a factor at all, what would you do? The answer that surfaces is usually the one you already know. Wisdom isn&#8217;t about eliminating uncertainty, it&#8217;s about making the best call with the information you have, and trusting that you&#8217;ve prepared yourself to handle whatever comes next.</p><p>The unprepared developer panics when layoffs hit. The one who&#8217;s been building their skills, their network, and their reputation? They&#8217;re already thinking about the next move before the severance check clears.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/stop-letting-fear-make-your-career/comments"><span>Leave a comment</span></a></p><h2><strong>Courage: Comfortable Isn&#8217;t the Same as Safe</strong></h2><p>Here&#8217;s what courage is <em>not</em>: it&#8217;s not blindly jumping at every shinier opportunity because you&#8217;re bored. Recklessness isn&#8217;t brave. It&#8217;s just <em>impatient</em>.</p><p>Real courage sometimes looks like staying. If you&#8217;re the only senior dev holding a crumbling codebase together and you know the team collapses without you, walking away might be the <em>easy</em> move, not the courageous one. Fixing what&#8217;s broken from the inside, having the hard conversation with leadership, pushing for the changes that actually matter. That can take more guts than handing in your notice.</p><p>But courage also means not letting a stable paycheck become a cage. If money is the <em>only</em> reason you&#8217;re staying, you&#8217;ve already mentally checked out. You&#8217;re just waiting for your body to catch up. External rewards &#8212; salary, title, perks &#8212; can&#8217;t manufacture internal satisfaction. The Stoics were relentless on this point, and they were right.</p><p>Layoffs happen. Pay cuts happen. Companies pivot, get acquired, implode. Nothing is permanent. The courage isn&#8217;t in pretending the floor is solid , it&#8217;s in staying ready to move when it isn&#8217;t.</p><h2><strong>Justice: Don&#8217;t Be a Selfish Jackass on Your Way Out</strong></h2><p>Seneca had a lot to say about using people as stepping stones, and it wasn&#8217;t complimentary.</p><p>If you&#8217;re leaving, how you leave matters. Are you giving your team enough runway to absorb the transition? Are you being honest with the people who trusted you? Burning bridges might feel satisfying for about thirty seconds, but this industry is smaller than you think, and your reputation follows you everywhere.</p><p>Justice in career decisions isn&#8217;t about being a martyr. It&#8217;s not about staying in a toxic situation because you feel guilty leaving. It&#8217;s about making sure that however you move, you move with integrity. Transition with honesty. Don&#8217;t ghost your team. Document what you know. Give your notice with respect, even if the place didn&#8217;t always deserve it.</p><p>What goes around comes around. And I don&#8217;t mean that in some vague karmic sense. I mean it practically: the developer you screw over today might be interviewing you in three years. Act accordingly.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Temperance: Know When Enough Is Enough</strong></h2><p>Not every opportunity that pays more or sounds shinier is actually better. This is the one developers get tripped up by constantly, especially when the market is hot.</p><p>Temperance is the ability to look at a 30% raise and ask: <em>what&#8217;s the actual cost of this?</em> More hours? A worse team? A tech stack you hate? A company culture that&#8217;ll grind you down in six months? Better compensation, a fancier title, a sexier tech stack. Those things are nice to have. They&#8217;re not a decision framework.</p><p>The real questions are: Will you regret working more for making more? Is there an opportunity where you can do something genuinely valuable, even if the money is roughly the same? What changes in your life (your flexibility, your time, your sanity) and is the trade worth it?</p><p>Consider what you actually want your life to look like, not just your bank account. Temperance isn&#8217;t about settling. It&#8217;s about not letting the shiny object override your judgment.</p><h2><strong>Trust the Work You&#8217;ve Already Done</strong></h2><p>The delay isn&#8217;t confusion. It&#8217;s just your emotions catching up to your reasons.</p><p>We all know, deep down, whether something is right. When a decision keeps nagging at you, when something feels off even though the numbers look good. That signal is real. Don&#8217;t ignore it. The Stoics called this the alignment of reason with nature. I call it your gut having done the work your spreadsheet hasn&#8217;t.</p><p>The goal isn&#8217;t to eliminate the uncertainty of career decisions. The goal is to make them from a place of clarity instead of fear. Filter your choices through wisdom, courage, justice, and temperance. This makes the path ahead clearer, rather than letting anxiety and money guide you.</p><p>Your career belongs to you. The job is just where you happen to be standing right now.</p><p>So here&#8217;s what I want to know: when you&#8217;ve faced a major career decision, what actually drove the call? Was it data, or was it something harder to name? Drop it in the comments &#8212; your experience might be exactly what someone else needs to hear right now.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p><em>&#8220;It is not because things are difficult that we do not dare; it is because we do not dare that things are difficult.&#8221;</em> - Seneca</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[You're Protecting Your Comfort Zone]]></title><description><![CDATA[Stop Hiding Behind Code You Memorized and Start Building Something Real]]></description><link>https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 08 Mar 2026 11:45:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xvI2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xvI2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xvI2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xvI2!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1304609,&quot;alt&quot;:&quot;A weathered Roman philosopher sitting at a modern developer's desk&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/190226716?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A weathered Roman philosopher sitting at a modern developer's desk" title="A weathered Roman philosopher sitting at a modern developer's desk" srcset="https://substackcdn.com/image/fetch/$s_!xvI2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!xvI2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb0163d0-8ddb-4cd4-8fde-ac12e4ee468e_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>It&#8217;s 11pm. Xcode is open. You&#8217;re staring at Swift syntax you&#8217;ve never written in your life, and some voice in the back of your head is telling you to close the laptop and come back when you &#8220;know more.&#8221;</p><p>Instead, you type a prompt.</p><p>That&#8217;s vibe coding. And yeah, traditional developers lose their minds over it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>&#8220;That&#8217;s Not Real Programming&#8221;</strong></h2><p>I get it. I&#8217;ve been writing software for 25 years. I understand the instinct to protect the craft. But let&#8217;s be honest about what&#8217;s really happening when experienced developers dismiss AI-assisted development as &#8220;not real programming&#8221;, they&#8217;re not protecting quality. They&#8217;re protecting identity.</p><p>Stoics would recognize this immediately. Marcus Aurelius didn&#8217;t waste energy fighting things outside his control. He focused on what he could actually influence. AI&#8217;s advancement? Not in your control. Market disruption? Not in your control. Your willingness to learn, adapt, and leverage new tools? That&#8217;s yours. All of it.</p><p>The dichotomy of control isn&#8217;t just a philosophical concept, it&#8217;s a survival skill for developers right now. Clinging to the idea that your value lives in syntax you memorized is like a blacksmith in 1910 insisting that anyone who uses a power tool isn&#8217;t a &#8220;real&#8221; craftsman. Meanwhile, the guy with the power tool is building three times as much.</p><p>Vibe coding (describing what you want and iterating with AI until it exists) isn&#8217;t the end of real software development. It&#8217;s a new tool that reveals something uncomfortable: who&#8217;s been coding for the joy of creation, and who&#8217;s been hiding behind gatekeeping complexity.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/youre-protecting-your-comfort-zone/comments"><span>Leave a comment</span></a></p><h2><strong>My Experiment: Building an iOS App in a Language I Barely Know</strong></h2><p>Here&#8217;s where I put my money where my mouth is.</p><p>I&#8217;ve done iOS development before, mostly in Objective-C. Swift? Not my world. But I had a clear idea for a savings rate dashboard app, something genuinely useful, something I wanted to exist. So instead of waiting until I&#8217;d done six months of Swift tutorials, I started building it. With AI as my co-pilot, breaking down the work into pieces I could actually manage.</p><p>This isn&#8217;t theory. This is me, right now, figuring it out as I go.</p><p>And here&#8217;s what I&#8217;ve learned: the AI doesn&#8217;t care that I&#8217;m rusty on Swift. It handles the boilerplate. It handles syntax I&#8217;d otherwise have to look up a dozen times. What it can&#8217;t do is decide <em>what</em> to build, <em>why</em> it matters, or <em>whether</em> the architecture makes sense for the long haul. That part is still on me. That part will always be on me.</p><p>Not knowing Swift became irrelevant when I could prototype, test assumptions, and ship an MVP in days instead of months. Note: I&#8217;m about a week away from submitting version 1 to the app store.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Aimless Prompt Thrashing Is Not a Strategy</strong></h2><p>Let me be clear about something, because I see this mistake everywhere: you cannot just wing it.</p><p>The idea that you can magically build something by dumping vague prompts into an AI is naive, and it leads to a chaotic mess of half-working code you don&#8217;t understand.</p><p>What actually works is treating AI the way you&#8217;d treat a capable junior developer. You wouldn&#8217;t hand a junior a vague task and disappear. You&#8217;d give them a clear objective, a defined scope, and enough context to succeed. Then you&#8217;d review their work and course-correct.</p><p>Before I type a single prompt on this iOS project, I have a build plan. Clear goals. A tech spec. Tasks broken into pieces small enough that the AI can actually shine on them. That preparation is what separates productive AI-assisted development from burning three hours to produce garbage.</p><p>The AI handles the heavy lifting. I handle the vision and the judgment. That&#8217;s the deal.</p><h2><strong>The Anxiety Tells You Everything</strong></h2><p>If reading about AI replacing developers makes your stomach drop, that anxiety isn&#8217;t about AI. It&#8217;s a signal that you&#8217;ve tied your professional identity to syntax memorization instead of problem-solving ability. And that&#8217;s worth sitting with for a minute.</p><p>Think about what you&#8217;re actually afraid of losing. Is it your ability to solve hard problems? To understand systems, architecture, business logic, user needs? Because AI isn&#8217;t touching any of that. Or is it the ability to write a for-loop faster than a junior dev, or recall the exact method signature without checking docs?</p><p>Because one of those things matters. The other one never really did.</p><p>Software engineering has always been about solving problems, understanding what the business needs and delivering something that works. The language was always just the vehicle. Developers who lose sight of that are the ones who&#8217;ll struggle, not because of AI, but because they were already optimizing for the wrong thing.</p><p>Epictetus had a line that applies here: it&#8217;s not things that disturb us, but our judgments about things. AI isn&#8217;t the threat. The judgment that your value is tied to irreplaceable technical obscurity&#8212;that&#8217;s the threat.</p><h2><strong>The Developers Who Will Thrive</strong></h2><p>They&#8217;re not the ones who know the most languages.</p><p>They&#8217;re the ones who solve valuable problems regardless of the tools available. They adapt. They stay curious. When a new tool shows up, they ask &#8220;how can I use this?&#8221; instead of &#8220;why is this bad?&#8221;</p><p>As a solo developer, I&#8217;m juggling marketing, product development, customer support, and feature building all at once. Leveraging AI to handle some of that load while I stay focused on long-term strategy isn&#8217;t laziness, it&#8217;s leverage. It&#8217;s the same reason senior engineers use frameworks instead of writing everything from scratch. You use the tools that let you build more, faster, without compromising on what actually requires your judgment.</p><p>This savings rate app isn&#8217;t just a side project. It&#8217;s proof that your ideas can become real without waiting for perfect knowledge. It&#8217;s proof that &#8220;I don&#8217;t know Swift well enough&#8221; is a story you&#8217;re telling yourself, not a fact about the world.</p><h2><strong>So Where Does That Leave You?</strong></h2><p>Fighting AI&#8217;s role in development is like resenting gravity. It&#8217;s here. It&#8217;s changing things. The only real question is whether you&#8217;ll adapt with curiosity or resist with fear.</p><p>You can&#8217;t control what AI does to the industry. You can control whether you pick up the tool and figure out how to use it well.</p><p>I&#8217;m still figuring it out. The Swift app isn&#8217;t done (although it is really close). Some days the AI output needs serious rework. Some days it nails exactly what I needed in thirty seconds. That&#8217;s the process. And honestly? I&#8217;m having more fun building than I have in a while, because I&#8217;m back to focusing on the part that actually matters: the problem, not the syntax.</p><p>So here&#8217;s what I want to know from you:</p><p>What&#8217;s the AI fear you&#8217;re still holding onto and what would it take to let it go?</p><p>Drop it in the comments. You might be saying exactly what someone else needs to hear.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;The impediment to action advances action. What stands in the way becomes the way.&#8221; - Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Silent Debt ]]></title><description><![CDATA[Your Brain Is Maxed Out and Your Code Is Paying the Price]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-silent-debt</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-silent-debt</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 01 Mar 2026 12:45:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!o1vq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o1vq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o1vq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o1vq!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:1671676,&quot;alt&quot;:&quot;A lone developer slouched at a cluttered desk late at night&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/189498454?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A lone developer slouched at a cluttered desk late at night" title="A lone developer slouched at a cluttered desk late at night" srcset="https://substackcdn.com/image/fetch/$s_!o1vq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!o1vq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f7c79fc-380c-40d6-b608-2b049bede2c4_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>We obsess over technical debt. The messy code, the shortcuts, the &#8220;we&#8217;ll fix it later&#8221; promises that quietly compound into a maintenance nightmare. We track it, we argue about it in sprint planning, we write long Confluence pages about it that nobody reads.</p><p>But there&#8217;s another form of debt accumulating in the background, one that doesn&#8217;t show up in code reviews, static analysis tools, or your backlog. One that&#8217;s a hell of a lot more expensive because it doesn&#8217;t just slow down your codebase.</p><p>It slows <em>you</em> down.</p><p>It&#8217;s called cognitive debt, and there&#8217;s a solid chance it&#8217;s already wrecking your output without you even realizing it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-silent-debt?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/the-silent-debt?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>What Is Cognitive Debt, Exactly?</strong></h2><p>Think of your brain like a bank account. Every context switch, every poorly named variable, every undocumented system you have to reverse-engineer from scratch, every Slack notification you haven&#8217;t dealt with. Those are all withdrawals. And unlike technical debt, you can&#8217;t refactor your way out of this one. You can&#8217;t open a ticket for it. There&#8217;s no sprint dedicated to paying it off.</p><p>Every time you switch between projects, meetings, or mental models, research suggests you pay a swap cost of roughly 15-20 minutes just to get back to full capacity. Let that sink in. Every &#8220;hey, quick question&#8221; Slack message, every context switch between a PR review and the feature you were actually building, that&#8217;s 15-20 minutes of your best thinking, gone.</p><p>And it compounds.</p><h2><strong>The Ways You&#8217;re Racking Up the Bill</strong></h2><p><strong>Bad naming and unclear code</strong> forces you to hold translation layers in your working memory constantly. Instead of just reading the code, you&#8217;re playing mental archaeology.</p><p>&#8220;okay, so x2 is probably the processed transaction amount, and tempFlag is... I think the validation state?&#8221; That overhead adds up across an entire codebase.</p><p><strong>Your notification backlog</strong> is creating background anxiety you&#8217;re probably not even consciously aware of. Those 47 unread GitHub notifications, the Slack threads you&#8217;ve been &#8220;meaning to get to,&#8221; the email you flagged and forgot, they&#8217;re not just sitting there quietly. They&#8217;re fragmenting your attention every time you sit down to do real work.</p><p><strong>Undocumented systems</strong> are the worst offenders. Every system that lives only in someone&#8217;s head, or worse, nobody&#8217;s head, requires you to actively reconstruct it from scratch every single time you touch it. That&#8217;s not a one-time cost. You pay it over and over.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Why It Wrecks Your Estimates</strong></h2><p>Cognitive debt makes you terrible at estimating, and most people have no idea that&#8217;s what&#8217;s happening.</p><p>An example, you&#8217;re deep in a complex feature. You&#8217;ve got the whole system model loaded in your head. The edge cases, the data flow, the three other services it touches. Your manager pops in and asks for an estimate on something completely unrelated.</p><p>What happens?</p><p>You throw out a number just to get back to what you were doing. Of course you do. You can&#8217;t fully context-switch, so you&#8217;re estimating with maybe 40% of your actual capacity applied to the problem. Then two weeks later when you&#8217;re staring that feature in the face, you realize you either sandbagged it or, more painfully, you&#8217;re in over your head on timeline.</p><p>That&#8217;s not a planning failure. That&#8217;s cognitive debt coming due.</p><h2><strong>You Can&#8217;t Code Your Way Out of This One</strong></h2><p>Cognitive debt only clears through genuine rest, reflection, and unstructured time. That&#8217;s it. There&#8217;s no shortcut.</p><p>This is where remote work makes things genuinely harder. When you worked in an office, your commute home was a natural decompression chamber. By the time you walked in your front door, a lot of that mental load had already started to fade. Not fully, but enough.</p><p>Now? The &#8220;office&#8221; is twenty feet from your bedroom. There&#8217;s no physical leaving. The context never fully switches off because the environment never changes. You eat lunch in the same space where you debug production incidents. That&#8217;s a problem.</p><p>One thing that actually helps: treat your workspace like it&#8217;s a different location. Keep work physically contained to a specific room or space. When you close that door, you&#8217;re leaving. Protect that boundary like it&#8217;s a critical system, because it is. It&#8217;s the system that keeps <em>you</em> running.</p><p>Beyond that, it comes down to the basics we all know but consistently underinvest in. Actual breaks. Time that isn&#8217;t secretly &#8220;thinking about work time.&#8221; Sleep. Hobbies that have nothing to do with your job. The stuff that feels indulgent when you&#8217;re behind on a sprint but is actually the only thing that keeps you sustainable long-term.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-silent-debt/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/the-silent-debt/comments"><span>Leave a comment</span></a></p><h2><strong>Paying It Down</strong></h2><p>You can&#8217;t eliminate cognitive debt, but you can stop letting it run unchecked.</p><ul><li><p><strong>Name things properly.</strong> Future you (and everyone else on your team) will thank you.</p></li><li><p><strong>Document the weird stuff.</strong> The undocumented edge case that only you know about? Write it down today.</p></li><li><p><strong>Triage your notifications on your schedule</strong>, not theirs. Batch them. Don&#8217;t let them interrupt flow state.</p></li><li><p><strong>Protect context blocks.</strong> Deep work and shallow work shouldn&#8217;t share the same time slot. When you&#8217;re in the zone, be in the zone.</p></li><li><p><strong>Estimate when you&#8217;re fresh.</strong> If someone asks for an estimate while you&#8217;re heads-down in something else, buy yourself time. &#8220;Let me circle back on that in an hour&#8221; is a complete sentence.</p></li></ul><p>And most importantly, take the rest seriously. Not as a reward for finishing your work. As part of the work.</p><p>Your team can track velocity. They can monitor build times and deployment frequency. But nobody&#8217;s tracking how much mental bandwidth you&#8217;re actually operating with on any given Tuesday afternoon.</p><p>That&#8217;s on you to manage.</p><p>You wouldn&#8217;t let technical debt accumulate indefinitely and expect your codebase to stay healthy. Don&#8217;t do it to your brain either.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;Nowhere can man find a quieter or more untroubled retreat than in his own soul.&#8221; &#8212; Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[You're Not Growing, You're Just Staying Busy]]></title><description><![CDATA[Comfort Is Quietly Killing Your Career And You Don't Even Know It]]></description><link>https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 22 Feb 2026 12:45:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DTS0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DTS0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DTS0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DTS0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1801009,&quot;alt&quot;:&quot;A lone figure in modern clothing stands at the edge of a vast, dimly lit server room that stretches endlessly into darkness, cables and towering racks of blinking machines surrounding them&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/188749193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A lone figure in modern clothing stands at the edge of a vast, dimly lit server room that stretches endlessly into darkness, cables and towering racks of blinking machines surrounding them" title="A lone figure in modern clothing stands at the edge of a vast, dimly lit server room that stretches endlessly into darkness, cables and towering racks of blinking machines surrounding them" srcset="https://substackcdn.com/image/fetch/$s_!DTS0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!DTS0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ae9026-44b8-4275-bd38-9d78def8d7c3_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Comfort is the slowest career killer in software development. It doesn&#8217;t look like failure, that&#8217;s what makes it dangerous. You&#8217;re shipping, you&#8217;re contributing, the work feels manageable. But underneath that feeling of productivity, your actual capabilities are quietly collecting dust. And the gap between what you <em>think</em> you can handle and what you <em>can</em> handle grows a little wider every time you play it safe.</p><p>Most of us spend our careers quietly optimizing for exactly that. We grab the familiar tickets. We stick with the technologies we already know. We find reasons to stay out of the messy legacy system nobody wants to touch. It feels productive. But here&#8217;s what&#8217;s actually happening: you&#8217;re building the <em>illusion</em> of competence while your real capabilities stagnate. And the worst part? You won&#8217;t know it until the moment it matters most.</p><p>Seneca put it plainly: &#8220;It is not that I am brave, but that I know what is not worth fearing.&#8221; Most of the tickets that make us hesitate aren&#8217;t actually dangerous to our careers. They&#8217;re just uncomfortable. There&#8217;s a difference, and learning to tell them apart is where growth actually starts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>Choosing Hard on Purpose</strong></h2><p>The Stoics had a practice called <em>voluntary hardship</em>, deliberately putting yourself in uncomfortable situations not because you enjoy suffering, but because it reveals things about yourself that comfort never will. This isn&#8217;t masochism. It&#8217;s a diagnostic tool.</p><p>Challenging work shows you your real limits, your actual knowledge gaps, and your emotional triggers more accurately than any self-assessment or performance review ever could. You don&#8217;t discover that you&#8217;re weak in UI work by thinking about it. You discover it by taking the UI ticket, grinding through it, struggling, and coming out the other side with a clear picture of where you actually stand.</p><p>That&#8217;s how you figure out what you&#8217;re made of. Not by reading about it. Not by watching conference talks. By doing the work.</p><p>And the flip side is just as true. You take something that scared you, push through it, and realize you&#8217;re actually pretty good at this. That&#8217;s a discovery you never make from the safe end of the ticket queue.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/youre-not-growing-youre-just-staying/comments"><span>Leave a comment</span></a></p><h2><strong>The Problem with Waiting Until It&#8217;s Forced on You</strong></h2><p>There&#8217;s a big difference between <em>choosing</em> difficulty and having it dropped on you without warning.</p><p>When you voluntarily seek out hard problems, you have agency. You have time to prepare. You&#8217;re building the muscle before the game is on the line. But if you spend years avoiding everything uncomfortable and then suddenly the business is on fire, the system is down, and you&#8217;re the one holding the keyboard, you&#8217;re facing a five-alarm situation with zero reps under your belt.</p><p>That&#8217;s a terrible place to be.</p><p>Stress-testing systems is standard practice in software. You push load on the system <em>before</em> the traffic spike because you need to know where it breaks before it breaks in production. We are no different. Until we&#8217;re actually under pressure, we don&#8217;t know what we&#8217;re capable of. And building that pressure tolerance is something you have to do deliberately, over time, not in a crisis.</p><h2><strong>What the Hard Ticket Actually Costs You (Hint: Less Than You Think)</strong></h2><p>I work on a payment processing system. It&#8217;s not exactly the ticket people are lining up to grab. Complex business rules, serious compliance requirements, zero room for &#8220;oops.&#8221; A lot of people on the team have zero interest in it. But I took it on, and I&#8217;ve been building major functionality in it, functionality that actually matters to the business.</p><p>Here&#8217;s what that cost me: some uncomfortable weeks of ramping up. Some moments of genuine uncertainty. A few late nights tracing through code I didn&#8217;t write.</p><p>Here&#8217;s what it gave me: visibility. Credibility. The kind of hands-on understanding that you simply cannot Google your way to. When you&#8217;re the person willing to go where others won&#8217;t, the organization notices. The contribution becomes more valuable precisely because the barrier to entry is high.</p><p>That&#8217;s the visibility paradox. The problems that scare everyone else are the ones that make your contributions stand out.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Good Stress Is a Thing</strong></h2><p>Most of us are wired to avoid stress wherever possible, and that makes sense on the surface. But there are two kinds of stress, and collapsing them together is a mistake.</p><p>Distress, the kind that grinds you down and burns you out, is worth avoiding. But eustress, the productive pressure of a hard deadline or a challenging problem, is actually where some of your best work happens. Deadlines force hyper-focus. Pressure strips away the noise and forces you to solve the actual problem in front of you rather than the abstract version of it. Some of the cleanest, most elegant solutions I&#8217;ve ever written came out of &#8220;we need this working by end of day&#8221; situations where I had no choice but to think clearly and move fast.</p><p>That kind of pressure builds a tolerance. And once you&#8217;ve shipped something real under real stakes, every future high-pressure situation feels a little more manageable.</p><h2><strong>The Confidence Compounds</strong></h2><p>Here&#8217;s something that doesn&#8217;t get talked about enough: the confidence you build from technical challenges doesn&#8217;t stay in the technical domain. It transfers.</p><p>You white-knuckle your way through a gnarly integration that nobody else wanted to touch, and you ship it. A month later, you&#8217;re in a room negotiating scope with a project manager who&#8217;s pushing back hard. Or you&#8217;re giving a presentation to stakeholders who are skeptical. Or you&#8217;re being asked to lead something for the first time. That reservoir of &#8220;I&#8217;ve done hard things before&#8221; is sitting right there, and it&#8217;s real. You can draw on it.</p><p>Every challenge, whether technical or personal, teaches a simple lesson: it&#8217;s just another problem to solve. You&#8217;ve figured out hard things before. You&#8217;ll figure this out too.</p><h2><strong>Stop Waiting for the Safe Moment</strong></h2><p>The comfort zone doesn&#8217;t protect you. It just makes the eventual collision with difficulty more violent because you&#8217;ve been doing nothing to prepare for it.</p><p>Adversity isn&#8217;t optional. It&#8217;s coming regardless. The only choice you have is whether you meet it with some reps behind you or whether you meet it cold. Avoiding challenges doesn&#8217;t make you comfortable, it makes you brittle. It quietly strips away your tolerance for difficulty until the day when avoidance isn&#8217;t possible and you have nothing left to draw on.</p><p>The developers who build the careers worth having aren&#8217;t the ones who avoided the hard stuff. They&#8217;re the ones who kept picking up the scary ticket, kept pushing into unfamiliar territory, kept stressing their own systems before the system got stressed for them.</p><p>Your resume tells people where you&#8217;ve been. How you handle difficulty tells them where you&#8217;re going.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;The impediment to action advances action. What stands in the way becomes the way.&#8221; - Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Everything You're Learning Right Now Will Be Obsolete]]></title><description><![CDATA[Here's Why That Should Fire You Up]]></description><link>https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 15 Feb 2026 12:45:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rJ8w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rJ8w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rJ8w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2130281,&quot;alt&quot;:&quot;A Roman marble bust of a Stoic philosopher slowly dissolving into streams of glowing source code and digital particles&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thestoiccoder.michaelclawrence.com/i/187966964?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A Roman marble bust of a Stoic philosopher slowly dissolving into streams of glowing source code and digital particles" title="A Roman marble bust of a Stoic philosopher slowly dissolving into streams of glowing source code and digital particles" srcset="https://substackcdn.com/image/fetch/$s_!rJ8w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!rJ8w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadabd5a2-164a-4e43-a034-91c20d9be7ac_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>I spent three months building a Flash application back in 2003. I&#8217;m talking late nights, weekends, the whole deal. I was proud of that thing. It was slick, it was responsive, it did exactly what the client needed. I remember showing it off to my team like I&#8217;d just built the Sistine Chapel ceiling out of ActionScript.</p><p>That application doesn&#8217;t exist anymore. Neither does the company that commissioned it. Neither does Flash.</p><p>And you know what? That&#8217;s fine. Better than fine, actually. Because the Stoics figured out something about two thousand years ago that most of us in tech are still struggling to accept: everything ends, and that&#8217;s not a tragedy, it&#8217;s the whole point.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>Memento Mori for Your Codebase</strong></h2><p>The ancient Stoics had this practice called <em>memento mori</em>, &#8220;remember that you will die.&#8221; But it wasn&#8217;t meant to be depressing. Marcus Aurelius used to meditate on his own mortality not to freak himself out, but to sharpen his focus. If your time is limited, you stop wasting it on things that don&#8217;t matter. You show up more fully for the things that do.</p><p>Now apply that to your code.</p><p>Every line you write today will be deleted, rewritten, or abandoned. Every framework you master will eventually fade into irrelevance. Every architectural decision you agonize over will be reversed by someone who thinks they know better. And honestly, they might.</p><p>This isn&#8217;t pessimism. It&#8217;s just the nature of what we do. And once you stop fighting it, something shifts. You stop writing code like you&#8217;re carving it into marble. You start writing it like it&#8217;s meant to solve <em>this</em> problem, for <em>these</em> people, right now. And weirdly enough, that makes you a better developer.</p><p>I can think back across 25 years in this industry, applications I poured myself into, systems I thought were bulletproof. Where are they now? Gone. Rethought. Reimagined. Absorbed into something else entirely. The technology moved on. The business needs changed. And the code I was so precious about? It served its purpose and then it made way for what came next.</p><p>That&#8217;s not failure. That&#8217;s the job.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/everything-youre-learning-right-now/comments"><span>Leave a comment</span></a></p><h2><strong>Stop Building Monuments, Start Solving Problems</strong></h2><p>Here&#8217;s where most of us get tripped up. We get attached. Not just to our code, but to our <em>tools</em>. We wrap our entire identity around being &#8220;a React developer&#8221; or &#8220;a .NET guy&#8221; or whatever framework happens to be hot right now.</p><p>I get it. I&#8217;ve been there. When I made the jump from Flash to .NET development, it felt like starting over from scratch. All that expertise, all those years of learning ActionScript inside and out, suddenly irrelevant. It stung. It felt personal, like the industry was telling me that everything I&#8217;d invested in didn&#8217;t matter.</p><p>But here&#8217;s the thing: it wasn&#8217;t personal. React, Angular, Vue &#8212; they&#8217;ll all get replaced eventually too. Some new hotness will come along and the cycle starts again. If your identity is tied to a specific tool, you&#8217;re setting yourself up to have an existential crisis every few years.</p><p>The Stoics called this <em>apatheia</em>. Not apathy in the way we think of it, but freedom from being jerked around by things outside your control. You don&#8217;t control which frameworks survive. You don&#8217;t control which languages the industry decides to adopt next. What you control is your ability to think clearly, learn quickly, and solve problems regardless of the tools in front of you.</p><p>Data structures. Algorithms. System design. Communication. How to break down a complex problem into manageable pieces. <em>That&#8217;s</em> the stuff that transfers. That&#8217;s what you take with you from job to job, from stack to stack, from one technological era to the next.</p><p>Learning React or .NET or whatever comes next: those are just means to an end. They&#8217;re vehicles, not destinations.</p><h2><strong>The Sh*t That Actually Scares Us</strong></h2><p>The reason impermanence in tech feels so threatening isn&#8217;t because we love our frameworks that much. It&#8217;s because it triggers something deeper, the fear that <em>we</em> might become irrelevant.</p><p>You&#8217;ve felt it. That moment when a junior dev rewrites your &#8220;perfect&#8221; module without even reading your comments. When you&#8217;re in a meeting defending a technology choice and you can see in people&#8217;s eyes that they&#8217;ve already moved on. When you read a job posting and half the required skills didn&#8217;t exist two years ago.</p><p>That anxiety is real. And the knee-jerk reaction is to dig in. To defend the old way. To cling to what you know because at least it&#8217;s familiar. The Stoics had a word for this kind of attachment too. They called it a <em>passion</em>, and not in a good way. It&#8217;s an irrational emotional response that clouds your judgment and keeps you stuck.</p><p>Think about sunk cost for a second. How many times have you watched a team defend an outdated approach not because it was the best solution, but because they&#8217;d already invested so much time in it? &#8220;We can&#8217;t switch now, we&#8217;ve spent six months on this.&#8221; Yeah, and you&#8217;ll spend six more months making it work when the right answer was to let it go three months ago.</p><p>When you accept obsolescence upfront. When you walk into a project knowing that this too shall pass, you don&#8217;t fall into that trap. You make decisions based on what&#8217;s best <em>now</em>, not on what justifies your past choices.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>The AI Elephant in the Room</strong></h2><p>And then there&#8217;s the big one. The thing that&#8217;s accelerating all of this impermanence at a pace none of us were really prepared for.</p><p>AI isn&#8217;t just another tool in the belt. It&#8217;s the impermanence engine. It&#8217;s taking skills that used to be the bread and butter of a developer&#8217;s career and commoditizing them in real time. Boilerplate code? AI handles that. Repetitive tasks? Automated. That thing you spent three years mastering? There&#8217;s a prompt for it now.</p><p>You can either freak out about that or you can see it through the Stoic lens. This is creative destruction happening at scale. The developers who thrive won&#8217;t be the ones who memorize syntax or cling to their ability to write a perfect for-loop. They&#8217;ll be the ones who know how to <em>think</em>. People who grasp the principles behind the code can design solutions. They can also explain complex ideas to others.</p><p>AI doesn&#8217;t replace that. It makes it more valuable.</p><p>So use the tools. Leverage AI for the grunt work. Invest your energy in timeless skills. Focus on critical thinking, problem-solving, system understanding, and the ability to learn new things.</p><h2><strong>The Beginner&#8217;s Advantage</strong></h2><p>When you know that everything becomes obsolete, continuous learning stops feeling like you&#8217;re desperately trying to keep up.</p><p>Instead, it just feels like... being alive.</p><p>Like staying curious. You&#8217;re not behind, you&#8217;re just always at the beginning of something new. And that&#8217;s actually a pretty exciting place to be.</p><p>I&#8217;ve been doing this for 25 years and I&#8217;m still learning. Not because I&#8217;m slow, but because the field demands it. What I knew a decade ago is legacy now. What I&#8217;m learning today will probably be legacy in another five to ten years. And I&#8217;ve made my peace with that.</p><p>You learn early in this career that you&#8217;ll never stop learning. You either embrace that or you burn out fighting it. There&#8217;s no third option.</p><h2><strong>Your Code Dies. Your Growth Doesn&#8217;t.</strong></h2><p>So if nothing lasts, what&#8217;s the point? Why pour yourself into something that&#8217;s just going to be replaced?</p><p>Because it was never about the code lasting forever. It was about what building it <em>did to you</em>. Every problem you solved made you a sharper thinker. Every failed approach taught you something about how systems work. Every late-night debugging session (as much as it sucked in the moment) added something to your toolkit that nobody can take away.</p><p>That Flash application I built in 2003? The code is long gone. But what I learned building it (how to think about user experience, how to optimize performance within constraints, how to communicate with clients who didn&#8217;t speak developer) all of that came with me. It shaped how I approach problems today, twenty years later.</p><p>The Stoics understood that external things are temporary. Your job, your title, your framework of choice: all of it can change tomorrow. But your character, your skills, your ability to adapt and grow. That&#8217;s yours. That&#8217;s what you&#8217;re really building every time you sit down at the keyboard.</p><p>Your code&#8217;s value isn&#8217;t in lasting forever. It&#8217;s in solving today&#8217;s problems and teaching you what you needed to learn to solve tomorrow&#8217;s.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;Loss is nothing else but change, and change is nothing else but Nature&#8217;s delight.&#8221;  - Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[You're Overthinking Every Decision]]></title><description><![CDATA[The Sage Developer Method]]></description><link>https://thestoiccoder.michaelclawrence.com/p/youre-overthinking-every-decision</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/youre-overthinking-every-decision</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 08 Feb 2026 12:45:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wmE0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_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_!wmE0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wmE0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!wmE0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!wmE0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!wmE0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wmE0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ba687ca-d1cd-4d3c-8854-88e85680a41d_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;:1936260,&quot;alt&quot;:&quot;A marble bust of a Roman Stoic philosopher positioned on a modern developer's desk, surrounded by multiple glowing monitors displaying code,&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/187230079?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A marble bust of a Roman Stoic philosopher positioned on a modern developer's desk, surrounded by multiple glowing monitors displaying code," title="A marble bust of a Roman Stoic philosopher positioned on a modern developer's desk, surrounded by multiple glowing monitors displaying code," srcset="https://substackcdn.com/image/fetch/$s_!wmE0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!wmE0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!wmE0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!wmE0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ba687ca-d1cd-4d3c-8854-88e85680a41d_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>You&#8217;re in a meeting. Three different approaches to solve the same problem are on the table. The junior dev is pushing for the shiny new framework they just learned. Your tech lead wants to refactor the entire module first. The product manager is tapping their fingers because the deadline was yesterday.</p><p>Everyone&#8217;s looking at you.</p><p>You&#8217;re supposed to be the senior developer here. The one with the answers. But you&#8217;re sitting there thinking, &#8220;I have no clue which option is right.&#8221; Analysis paralysis sets in. You&#8217;re afraid of picking wrong and looking incompetent. You&#8217;re exhausted from always having to make these calls. And somewhere in the back of your mind, that imposter syndrome voice is asking, &#8220;Who do you think you are to be making this decision?&#8221;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-overthinking-every-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/youre-overthinking-every-decision?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Sage: A Thought Experiment That Actually Helps</strong></h2><p>Here&#8217;s where ancient philosophy gets surprisingly practical. The Stoics had this thought experiment called the sage: a hypothetical person of perfect wisdom, courage, justice, and self-discipline. They knew damn well no one would ever achieve it. That wasn&#8217;t the point.</p><p>The sage exists as a north star. A reference point to orient yourself when you&#8217;re lost in the weeds of technical decisions, team dynamics, and the daily chaos of software development.</p><p>So instead of freezing up in that meeting, you ask yourself: What would a perfectly virtuous developer do with this codebase? How would they handle this toxic team dynamic? What choice would they make about this technical debt?</p><p>The sage isn&#8217;t about judging yourself for falling short. It&#8217;s a decision-making tool. When you&#8217;re stuck between options and your brain is screaming at you, the sage cuts through the noise. The question isn&#8217;t &#8220;Can I be perfect?&#8221; It&#8217;s &#8220;Am I moving in the right direction?&#8221;</p><p>You&#8217;ll never become the sage developer. But every decision that moves you closer to that ideal makes you better. Let&#8217;s break down what that actually looks like.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/youre-overthinking-every-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/youre-overthinking-every-decision/comments"><span>Leave a comment</span></a></p><h2><strong>Perfect Wisdom: Long-Term Over Short-Term (Even When It Hurts)</strong></h2><p>Perfect wisdom means making technical choices based on long-term sustainability, not short-term convenience or padding your resume with buzzwords.</p><p>We all know we should think about projects from a value perspective. What&#8217;s the thing we can do to make this better? Not just slapping on a Band-Aid, but considering the actual solution. But when you&#8217;re under deadline pressure and your manager is breathing down your neck, the Band-Aid is so damn tempting.</p><p>I dealt with this recently trying to handle atomic operations in a codebase that had database calls scattered everywhere like confetti. My first instinct was to reach for something complex&#8212;maybe a saga-like pattern or custom rollback logic. It felt clever. It felt like what a &#8220;real&#8221; engineer would do.</p><p>But after spending more time actually looking at what was there and simplifying instead of adding, it became clear we could consolidate these calls and do a minimal refactor to support a proper transactional approach. Less code. Less complexity. Better solution.</p><p>The sage developer would have seen that immediately. I took the scenic route through my own ego first.</p><p>Here&#8217;s the thing: sometimes wisdom looks boring. It&#8217;s choosing the unsexy solution that works over the impressive one that might. It&#8217;s writing documentation instead of moving to the next feature. It&#8217;s admitting &#8220;I don&#8217;t know&#8221; instead of bullshitting your way through a design review.</p><p>What would the sage do? Probably the thing you know you should do but don&#8217;t want to because it&#8217;s harder right now.</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>Perfect Courage: Saying the Hard Thing Out Loud</strong></h2><p>Courage in development isn&#8217;t about heroic all-nighters or single-handedly saving production. That&#8217;s actually often ego disguised as dedication.</p><p>Real courage is pushing back on unrealistic deadlines. It&#8217;s admitting in standup that you messed up and introduced that bug. It&#8217;s asking the &#8220;dumb&#8221; question in the architecture meeting because you genuinely don&#8217;t understand why we&#8217;re going down this path. It&#8217;s calling out a senior dev&#8217;s bad decision when everyone else is nodding along.</p><p>You know that moment when you&#8217;re in code review and you see a glaring issue, but it&#8217;s from someone more senior than you? Your cursor hovers over the comment box. Your heart rate picks up. You think about just approving it. Not your problem, right?</p><p>The sage developer leaves the comment. They do it respectfully, but they do it.</p><p>Or when management asks for an estimate and you know the real answer will piss them off. You can give them what they want to hear, or you can give them the truth. The sage tells the truth, even when it&#8217;s uncomfortable.</p><p>This is where courage and wisdom intersect. The wise choice requires the courage to actually make it, especially when it&#8217;s going to make you unpopular.</p><h2><strong>Perfect Justice: Fairness When No One&#8217;s Watching</strong></h2><p>Justice is about how you treat other developers, especially when there&#8217;s no external benefit to you.</p><p>It&#8217;s conducting fair code reviews regardless of seniority. That junior dev&#8217;s code gets the same thoughtful feedback as the principal engineer&#8217;s. No rubber-stamping because someone has &#8220;senior&#8221; in their title. No nitpicking because someone&#8217;s new.</p><p>It&#8217;s mentoring generously. Not just when your manager is watching or when it helps your promotion packet. When that confused developer asks you a question at 4:45 PM on Friday and you actually want to leave, you still take the time to help.</p><p>It&#8217;s giving credit where it&#8217;s due. When your junior teammate found the solution to that gnarly bug, you don&#8217;t present it as &#8220;we figured it out.&#8221; You say their name. In the email to stakeholders. In the retrospective. You make sure everyone knows.</p><p>Justice is also about not throwing people under the bus. When production breaks, there&#8217;s always pressure to find the guilty party. The sage developer focuses on fixing the system that allowed the mistake, not punishing the person who made it.</p><p>This one&#8217;s hard because it often costs you something. Your time. Your credit. Your chance to look good by making someone else look bad.</p><p>The sage pays that cost anyway.</p><h2><strong>Perfect Temperance: Knowing When Enough Is Enough</strong></h2><p>Temperance is about maintaining a sustainable pace over hero sprints. It&#8217;s choosing appropriate complexity over over-engineering. It&#8217;s knowing when to stop optimizing.</p><p>You know that project where you spent two weeks building an incredibly flexible, abstracted solution for a problem that had one use case? Yeah. The sage wouldn&#8217;t have done that.</p><p>There&#8217;s this trap we fall into where we build for imaginary future requirements. &#8220;Well, what if someday we need to support seventeen different authentication providers?&#8221; What if you just solve the actual problem in front of you first?</p><p>Temperance means recognizing that simplicity beats cleverness. Sometimes you need to carefully consider edge cases. Sometimes you can&#8217;t predict an edge case until it happens. You build for what you know it needs to do right now, rely on best practices, and deliver the best you can.</p><p>It also means knowing when you&#8217;re done. When the code works, the tests pass, and it&#8217;s readable&#8212;stop. That refactor you&#8217;re thinking about can wait. That micro-optimization that might save 2ms? Probably not worth it. Ship it and move on.</p><p>The sage developer doesn&#8217;t confuse perfectionism with quality. They know the difference between good enough and gold-plating.</p><h2><strong>The Gap Is the Point</strong></h2><p>Here&#8217;s what makes the sage useful: you&#8217;ll never close the gap. You&#8217;ll never be perfectly wise, courageous, just, and temperate. There will always be times when you take the easy path, keep your mouth shut when you should speak up, take credit you shouldn&#8217;t, or over-engineer because it&#8217;s fun.</p><p>And that&#8217;s fine. That&#8217;s actually the whole point.</p><p>The gap between you and the ideal isn&#8217;t cause for shame. It&#8217;s a measurement tool showing where growth is needed. When you catch yourself about to make a decision based on ego instead of value, and you course-correct, that&#8217;s growth. Small movements toward the ideal compound over time.</p><p>I still choose convenience over sustainability sometimes. I still chicken out of hard conversations. I still optimize things that don&#8217;t need optimizing because I&#8217;m avoiding the actual hard problem. But I catch myself doing it more often now. The sage is that voice asking, &#8220;Is this really what you want to do here?&#8221;</p><h2><strong>The Reality Check</strong></h2><p>Look, we operate in the real world. There are trade-offs. We deal with deadlines and pressure from management. We work with teammates who have different priorities. We&#8217;re trying to find the simplest path from point A to point B while also not building garbage.</p><p>Sometimes we get caught up in overdoing things or using patterns just for the sake of using them. Sometimes we cut corners we shouldn&#8217;t cut. Sometimes the &#8220;right&#8221; answer isn&#8217;t clear, and any choice is going to have downsides.</p><p>The sage developer framework doesn&#8217;t make these tensions disappear. It gives you a lens to evaluate them. When you&#8217;re stuck between equally shitty options, asking &#8220;What would the sage do?&#8221; often clarifies which option is less shitty and why.</p><p>It won&#8217;t always give you the answer. But it&#8217;ll usually get you unstuck.</p><div><hr></div><p>The next time you&#8217;re facing a technical decision and you feel that familiar paralysis creeping in, try asking: What would the sage developer do?</p><p>Not to beat yourself up for falling short. To clarify the right direction.</p><p>The gap between you and the ideal isn&#8217;t a judgment. It&#8217;s a compass. Use it.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;It is not because things are difficult that we do not dare; it is because we do not dare that they are difficult.&#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><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[Why Your Best Work Will Never Get Recognized]]></title><description><![CDATA[The Pursuit of Excellence in Coding (When Nobody's Watching)]]></description><link>https://thestoiccoder.michaelclawrence.com/p/why-your-best-work-will-never-get</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/why-your-best-work-will-never-get</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 01 Feb 2026 12:45:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Rk6y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_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_!Rk6y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rk6y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Rk6y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Rk6y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Rk6y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rk6y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbac6e24-3653-4687-97e6-807b503021e3_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;:1531876,&quot;alt&quot;:&quot;A marble Roman statue of a philosopher sitting at a modern minimalist desk with a laptop, warm desk lamp illuminating the 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/186439037?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A marble Roman statue of a philosopher sitting at a modern minimalist desk with a laptop, warm desk lamp illuminating the workspace" title="A marble Roman statue of a philosopher sitting at a modern minimalist desk with a laptop, warm desk lamp illuminating the workspace" srcset="https://substackcdn.com/image/fetch/$s_!Rk6y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Rk6y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Rk6y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Rk6y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbac6e24-3653-4687-97e6-807b503021e3_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>It&#8217;s 8 PM on a Friday. Everyone else logged off hours ago. You&#8217;re staring at a payment processing module that works fine, no bugs, no complaints, no tickets. You could close the laptop right now and start your weekend.</p><p>But you don&#8217;t.</p><p>Instead, you&#8217;re refactoring error handling that&#8217;s been bugging you all week. You&#8217;re cleaning up variable names. You&#8217;re adding defensive checks for edge cases that&#8217;ll probably never happen. And here&#8217;s the kicker: there&#8217;s a pretty good chance no one will ever notice this work. Not your manager. Not your teammates. Hell, this entire module might get replaced in the next architectural pivot.</p><p>So why do we do this to ourselves?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/why-your-best-work-will-never-get?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/why-your-best-work-will-never-get?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Recognition That Never Comes</strong></h2><p>Let&#8217;s be real about how this usually plays out. You spend three days building a comprehensive logging system for transaction reconciliation. You document every edge case. You make the error messages actually helpful for whoever gets paged at 2 AM. You write it like someone&#8217;s going to read it, because someone will, eventually.</p><p>Three months later, that logging catches a payment mismatch that would&#8217;ve taken weeks to track down manually. Your manager mentions it in passing: &#8220;Good job finding that bug quickly.&#8221; Nobody asks how you found it so fast. Nobody notices the logging infrastructure that made it possible. They just see that you solved a problem.</p><p>Meanwhile, the developer who ships fast and messy just got promoted. Their code breaks constantly, but they&#8217;re &#8220;high velocity.&#8221; They&#8217;re &#8220;getting shit done.&#8221; And you&#8217;re sitting there wondering if you&#8217;re the only one who actually gives a damn about code quality.</p><p>This is where most of us hit that wall. That moment where we think, &#8220;Why am I even trying?&#8221;</p><h2><strong>The Trap of External Validation</strong></h2><p>Here&#8217;s the thing that took me way too long to figure out: if you&#8217;re writing good code for recognition, you&#8217;re playing a game you can&#8217;t win.</p><p>External validation&#8212;promotions, praise, those little dopamine hits from code review approvals&#8212;they&#8217;re all outside your control. You can write the most elegant solution possible and still get passed over for a promotion. You can refactor a critical system and have it go completely unnoticed. You can do everything right and still have clients be unhappy, projects go over budget, or your carefully crafted code get deleted in the next rewrite.</p><p>The Stoics figured this shit out two thousand years ago. They called it the dichotomy of control: you don&#8217;t control outcomes, you only control your effort and approach. Marcus Aurelius was literally running the Roman Empire, dealing with wars, plagues, and political backstabbing. If anyone had reasons to expect external validation for good work, it was him. But he kept coming back to this same idea: the value is in doing the work with integrity, not in who notices.</p><p>And I&#8217;m not telling you this as some philosophical thought experiment. I&#8217;m telling you this because it&#8217;s the only thing that&#8217;s kept me from burning out over 25 years in this industry.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/why-your-best-work-will-never-get/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/why-your-best-work-will-never-get/comments"><span>Leave a comment</span></a></p><h2><strong>What You&#8217;re Actually Building</strong></h2><p>When you write clean code that no one&#8217;s watching, when you add those defensive checks, when you document the &#8220;why&#8221; and not just the &#8220;what&#8221;, you&#8217;re not building a feature. You&#8217;re building yourself.</p><p>Every shortcut you take, every &#8220;I&#8217;ll fix it later&#8221; that you don&#8217;t fix, every time you ship code you know is questionable, that&#8217;s not just technical debt. That&#8217;s erosion of your own standards. You&#8217;re training yourself to accept mediocrity. You&#8217;re teaching your brain that quality is optional, that it only matters when someone&#8217;s looking.</p><p>And here&#8217;s what that leads to: developers who can&#8217;t tell the difference anymore. Who genuinely don&#8217;t see the problem with nested try-catches seven levels deep. Who think &#8220;it works&#8221; is the same as &#8220;it&#8217;s done right.&#8221; Not because they&#8217;re bad developers, but because they&#8217;ve spent years optimizing for speed over quality, and their internal compass is screwed up.</p><p>The opposite is also true. Every time you do the work right, especially when no one&#8217;s watching, you&#8217;re strengthening that internal standard. You&#8217;re building the kind of developer who can look at code and just know it&#8217;s wrong, even if it passes all the tests. You&#8217;re developing instincts that become your competitive advantage.</p><h2><strong>The Work That No One Sees</strong></h2><p>Some of my best work has been completely invisible. I once rebuilt the error handling in a legacy .NET payment system that had been held together with duct tape and prayers for years. Spent two weeks on it. Made sure every exception was caught at the right level, every error message actually helped diagnose the problem, every failure mode was logged with enough context to figure out what went wrong.</p><p>You know how many times that error handling prevented catastrophic failures? I have no frickin idea. That&#8217;s the point. Good defensive code prevents problems that never happen. No one writes you a thank-you email for the database deadlock that didn&#8217;t occur because you properly implemented transaction isolation. There&#8217;s no Slack message celebrating the race condition that never materialized because you understood thread safety.</p><p>But I sleep better knowing that code is out there. And when shit does hit the fan, because it always does eventually, I know I&#8217;ve given whoever has to debug it the best chance of actually understanding what went wrong.</p><h2><strong>Building Intrinsic Motivation</strong></h2><p>How do you maintain standards in an environment that often doesn&#8217;t reward them?</p><p>You have to find satisfaction in the craft itself. Not in some precious, artisanal bullshit way, but in the basic human satisfaction of doing something well. The same satisfaction you&#8217;d get from cooking a good meal even if you&#8217;re eating alone, or fixing something around the house that no one else will notice.</p><p>Here&#8217;s how I think about it: Every line of code I write is a choice about what kind of developer I want to be. Not what kind of developer I want others to think I am, what I actually want to be when no one&#8217;s looking.</p><p>When I&#8217;m tempted to ship something I know is questionable, I ask myself: Is this the standard I want to live with? Not &#8220;will anyone notice?&#8221; Not &#8220;will this come back to bite me?&#8221; Just: Is this acceptable to me?</p><p>Most of the time, that&#8217;s enough. Not always&#8212;sometimes the deadline is real and the tradeoff is necessary. But even then, I&#8217;m making a conscious choice, not taking a shortcut out of laziness or because I think quality doesn&#8217;t matter.</p><p>This is what the Stoics meant by virtue ethics. Virtue wasn&#8217;t about being a good person so others would praise you. It was about having internal standards that didn&#8217;t depend on external validation. It was about being able to look yourself in the mirror and know you&#8217;re living according to your own principles.</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 Long Game</strong></h2><p>The beautiful thing about intrinsic motivation is that it makes you sustainable. You can&#8217;t burn out from lack of recognition when recognition was never the point. You can&#8217;t be demoralized by office politics when you&#8217;re not playing the political game. You can&#8217;t have your motivation destroyed by a bad manager when your motivation doesn&#8217;t depend on their approval.</p><p>This doesn&#8217;t mean you become some zen master who doesn&#8217;t care about anything. You still get frustrated. You still wish people noticed your good work. You still want the promotion and the raise. But those things become bonuses, not the foundation of your motivation.</p><p>And here&#8217;s the thing nobody tells you: over the long term, this approach actually tends to work out better career-wise too. Because the developers who consistently do good work, who have strong internal standards, who can be trusted to do the right thing even when no one&#8217;s watching&#8212;those developers become valuable. Maybe not immediately, maybe not as flashy as the person who ships fast and breaks things, but over years? That reputation matters.</p><p>But even if it doesn&#8217;t work out that way, even if you end up at a company that truly doesn&#8217;t value quality, you&#8217;ve still built something they can&#8217;t take away from you. You&#8217;ve built your own skills, your own standards, your own sense of what good work looks like. That&#8217;s portable. That stays with you.</p><h2><strong>Conclusion</strong></h2><p>This is hard. It&#8217;s hard to care about code quality when you&#8217;re the only one who seems to give a shit. It&#8217;s hard to maintain standards when the team is cutting corners and shipping faster. It&#8217;s hard to write good code when the entire codebase is a dumpster fire and your contribution feels like pissing on a forest fire.</p><p>The code you write shapes who you become as a developer. Every decision, every shortcut, every moment of &#8220;good enough&#8221;, it all adds up. You&#8217;re either building the kind of developer who can take pride in their work, or you&#8217;re building the kind who&#8217;s just collecting paychecks until retirement.</p><p>Your internal standards are the one thing in this entire industry that you actually control. The recognition, the promotions, the perfect codebase, the appreciative users, it&#8217;s all outside your control. But how you approach the work? That&#8217;s yours.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;Make the best use of what is in your power, and take the rest as it happens.&#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[Care Deeply, Expect Nothing: A Developer's Survival Guide]]></title><description><![CDATA[Embrace the Process, Release the Outcome]]></description><link>https://thestoiccoder.michaelclawrence.com/p/care-deeply-expect-nothing-a-developers</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/care-deeply-expect-nothing-a-developers</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 25 Jan 2026 12:45:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kp7c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_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_!kp7c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kp7c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!kp7c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!kp7c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!kp7c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kp7c!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_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;:1450053,&quot;alt&quot;:&quot; cinematic photograph of a developer's hands typing elegant code on a glowing terminal screen, the code transforming into flowing water or ethereal smoke &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/185666126?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt=" cinematic photograph of a developer's hands typing elegant code on a glowing terminal screen, the code transforming into flowing water or ethereal smoke " title=" cinematic photograph of a developer's hands typing elegant code on a glowing terminal screen, the code transforming into flowing water or ethereal smoke " srcset="https://substackcdn.com/image/fetch/$s_!kp7c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!kp7c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!kp7c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!kp7c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d60ce1-0ec4-47ae-a754-02d8b4c79f3a_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>You just spent three weeks building the perfect abstraction. Clean interfaces, thoughtful error handling, documentation that doesn&#8217;t suck. You&#8217;re proud of this one. Your tech lead reads it for thirty seconds and says, &#8220;Let&#8217;s just add another if statement to the existing function.&#8221;</p><p>Or maybe it&#8217;s the junior developer you spent six months mentoring, the one you stayed late helping debug their first production issue, the one you vouched for in their performance review. They just accepted an offer at another company.</p><p>Or it&#8217;s Friday afternoon, and leadership just killed the project you&#8217;ve been pouring your soul into for the past year. &#8220;Shifting priorities,&#8221; they say. Your code will never see production.</p><p>This hurts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/care-deeply-expect-nothing-a-developers?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/care-deeply-expect-nothing-a-developers?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Problem with Caring</strong></h2><p>Here&#8217;s the thing about being good at what you do: you care. You care about writing clean code. You care about doing things right. You care about the craft.</p><p>And that caring makes you vulnerable.</p><p>Because in software development, effort and outcome have this frustrating habit of not lining up. You can write brilliant code that gets rejected. You can build something beautiful that gets shut down for business reasons. You can invest in people who leave. You can do everything right and still watch it all fall apart.</p><p>So what do you do?</p><p>The obvious answer is to protect yourself. Stop caring so much. Phone it in. Write the shitty code they&#8217;re asking for and collect your paycheck. Become the cynical developer who responds to every suggestion with &#8220;whatever, it&#8217;s all getting rewritten anyway.&#8221;</p><p>And you know what? I get it. I&#8217;ve been there. There are days when cynicism feels like the only rational response to the chaos.</p><h2><strong>Why Cynicism Doesn&#8217;t Actually Work</strong></h2><p>But here&#8217;s what happens when you go down that road: you lose the thing that made you good in the first place.</p><p>The cynical developer stops learning because &#8220;what&#8217;s the point?&#8221; They stop mentoring because &#8220;people just leave anyway.&#8221; They stop suggesting improvements because &#8220;no one listens.&#8221; They write code that works today and becomes tomorrow&#8217;s technical debt.</p><p>And worst of all? They&#8217;re miserable. Because humans aren&#8217;t wired to spend forty-plus hours a week doing something they don&#8217;t give a shit about. The armor you built to protect yourself becomes a prison.</p><p>The Stoics saw a different way through this. And it&#8217;s not about caring less, it&#8217;s about caring differently.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/care-deeply-expect-nothing-a-developers/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/care-deeply-expect-nothing-a-developers/comments"><span>Leave a comment</span></a></p><h2><strong>The Dichotomy of Control (or: Stop Fighting Battles You Can&#8217;t Win)</strong></h2><p>Marcus Aurelius spent a lot of time thinking about what was in his control versus what wasn&#8217;t. As emperor of Rome, you&#8217;d think everything would be under his control, right? But even emperors can&#8217;t control whether their policies succeed, whether their generals stay loyal, or whether the barbarians decide to invade.</p><p>What he <em>could</em> control was his own thoughts, actions, and effort.</p><p>Same deal in software development.</p><p>You control:</p><ul><li><p>The quality of code you write</p></li><li><p>The thoroughness of your reviews</p></li><li><p>The clarity of your documentation</p></li><li><p>The patience you show when mentoring</p></li><li><p>The integrity you bring to technical decisions</p></li><li><p>Whether you refactor that mess or add to it</p></li></ul><p>You don&#8217;t control:</p><ul><li><p>Whether your PR gets approved</p></li><li><p>Whether your project gets greenlit</p></li><li><p>Whether your carefully considered architecture gets adopted</p></li><li><p>Whether the people you mentor stick around</p></li><li><p>Whether your code survives the next reorg</p></li><li><p>Whether anyone appreciates the extra effort you put in</p></li></ul><p>Your sphere of control ends at the PR button. After you hit submit, you&#8217;ve done your part. Everything after that? Not yours.</p><h2><strong>What the Reserve Clause Actually Means</strong></h2><p>The Stoics had this concept called the &#8220;reserve clause&#8221;, basically adding &#8220;fate permitting&#8221; to your intentions. Not as a cop-out, but as a mental tool.</p><p>So instead of &#8220;I&#8217;m going to get this architecture approved,&#8221; you think &#8220;I&#8217;ll propose this architecture, fate permitting it gets adopted.&#8221;</p><p>This isn&#8217;t lowering your standards or half-assing your proposal. You still do the research, write the compelling RFC, make the case. You give it your best shot. But you&#8217;ve mentally prepared yourself for any outcome.</p><p>Here&#8217;s what this looks like in practice:</p><p><strong>Without the reserve clause:</strong> You spend a week on an RFC for microservices migration. You&#8217;re convinced it&#8217;s the right move. The architecture review meeting rolls around. They reject it. You&#8217;re furious. You take it personally. You spend the next month bitter and checked out.</p><p><strong>With the reserve clause:</strong> Same RFC, same effort, same conviction. But you go in thinking &#8220;I&#8217;ll make the best case I can, and whatever happens happens.&#8221; They reject it. You&#8217;re disappointed, sure. But you move on. Because you did your part. The decision is out of your hands.</p><p>The difference isn&#8217;t in the outcome, it&#8217;s in how much of your peace of mind you&#8217;ve tied to things you can&#8217;t control.</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>Impermanence as Freedom</strong></h2><p>Everything we build in tech is temporary. That codebase you&#8217;re maintaining? It&#8217;ll be replaced or rewritten. The framework you just learned? It&#8217;ll be legacy in five years. The project you&#8217;re grinding on? Might get cancelled next quarter.</p><p>This used to depress the hell out of me. Why bust my ass if it&#8217;s all going to be thrown away?</p><p>But here&#8217;s the reframe: impermanence is freedom.</p><p>When you know your code is temporary, you can stop clinging to it desperately. You can stop getting defensive in code reviews because someone dared criticize your precious abstraction. You can actually listen to feedback because your identity isn&#8217;t wrapped up in whether this specific implementation survives.</p><p>You&#8217;re a steward, not an owner. The company can cancel your project like the library can recall a book. That&#8217;s not a tragedy, that&#8217;s just how it works.</p><p>What matters is that you do your best work <em>right now</em>, with what you know <em>right now</em>, for the situation you&#8217;re in <em>right now</em>. Not because it&#8217;s going to last forever, but because that&#8217;s what being good at your craft means.</p><h2><strong>Measuring Yourself by Internal Standards</strong></h2><p>When you tie your self-worth to external outcomes, you&#8217;re fucked. Because outcomes in software development are chaotic. Market conditions change. Leadership changes. Priorities change. Budgets change.</p><p>But you can always measure yourself by internal standards:</p><p>Did I think clearly about this problem? Did I act with integrity in that meeting? Did I give honest feedback in the code review? Did I help that struggling teammate instead of just being annoyed? Did I do my best with what I knew at the time?</p><p>These things are always in your control. And they&#8217;re what actually matter.</p><p>I&#8217;ve written code that got deleted six months later, and I&#8217;m still proud of it because I know it was good work. I&#8217;ve mentored people who left, and I don&#8217;t regret a minute of it because I know I showed up for them. I&#8217;ve had projects cancelled, and I can still look back at the craftsmanship I brought.</p><p>The work has value independent of the outcome. The virtue is its own reward.</p><h2><strong>What This Actually Looks Like</strong></h2><p><strong>The rejected PR:</strong> You spent hours refactoring that god-awful service. Made it testable, removed the global state, cleaned up the error handling. Senior dev rejects it: &#8220;Too risky right now, let&#8217;s just fix the bug.&#8221;</p><p>Old you: Seethes with resentment. Stops suggesting improvements. Becomes the &#8220;I told you so&#8221; person when technical debt inevitably bites the team.</p><p>Stoic you: Disappointed, but you know you did good work. You learned from the refactoring. Maybe you salvage parts of it for future PRs. You continue caring about code quality because that&#8217;s who you are, not because you need approval.</p><p><strong>The cancelled project:</strong> Six months of work. Dead. Leadership pivot.</p><p>Old you: Bitter spiral. &#8220;They never finish anything around here.&#8221; Updates resume, checks out mentally.</p><p>Stoic you: Process the disappointment, then ask: &#8220;What did I learn? How did I grow? Was I a good teammate?&#8221; The skills you built aren&#8217;t wasted. The relationships you strengthened remain. The work had value while you were doing it.</p><p><strong>The junior who leaves:</strong> You invested time, energy, patience. They got better. Now they&#8217;re gone.</p><p>Old you: &#8220;Never again. Not worth it.&#8221;</p><p>Stoic you: You helped someone grow. That&#8217;s good in itself. The fact that they left doesn&#8217;t negate the value of the mentorship. Maybe you stay in touch. Maybe they come back someday. Maybe you never hear from them again. You still did the right thing.</p><h2><strong>The Long Game</strong></h2><p>Software development isn&#8217;t about necessarily completing projects. It&#8217;s about doing your best with what you have at the time. Understanding that what you&#8217;re building today will probably be replaced in five years. Hell, maybe next year.</p><p>But at this moment, at this time, you make it as good as you can make it.</p><p>Not because you&#8217;re guaranteed a return on that investment. Not because management will definitely appreciate it. Not because it&#8217;s going to last forever.</p><p>Because excellence in your craft is how you show up in the world. Because integrity matters more than outcomes. Because you can&#8217;t control what happens to your work, but you can control the work itself.</p><p>Love the work, not the outcome. When your identity is in the craftsmanship rather than the results, you become resilient to the inevitable disappointments of software development.</p><p>You&#8217;ll still care deeply. You&#8217;ll still fight for what you believe is right. You&#8217;ll still feel disappointed when things don&#8217;t work out.</p><p>But you won&#8217;t be destroyed by it.</p><p>Because you&#8217;ve learned to put your effort and excellence into the things you control, and hold everything else with an open hand.</p><p>That&#8217;s not resignation. That&#8217;s freedom.</p><h2><strong>Your Turn</strong></h2><p>I&#8217;m curious about your experience with this:</p><p>What&#8217;s a time you did great work that didn&#8217;t get the outcome you hoped for? How did you handle it?</p><p>Do you struggle more with caring too much or protecting yourself by caring too little?</p><p>What helps you stay committed to quality when the external rewards aren&#8217;t there?</p><p>Drop your thoughts in the comments. Because chances are, your experience is exactly what someone else needs to hear right now.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;Make the best use of what is in your power, and take the rest as it happens.&#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[The Uncomfortable Truth]]></title><description><![CDATA[Your Code Reviewer Is Right More Often Than You Think]]></description><link>https://thestoiccoder.michaelclawrence.com/p/the-uncomfortable-truth-26a</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/the-uncomfortable-truth-26a</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 18 Jan 2026 12:45:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uc_3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_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_!uc_3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uc_3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!uc_3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!uc_3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!uc_3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uc_3!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16cf5ea7-1d3b-4370-9459-bd1210067202_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;:1826131,&quot;alt&quot;:&quot;A weathered marble bust of Marcus Aurelius positioned on a modern developer's desk, surrounded by glowing monitors displaying code review comments&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/184899488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A weathered marble bust of Marcus Aurelius positioned on a modern developer's desk, surrounded by glowing monitors displaying code review comments" title="A weathered marble bust of Marcus Aurelius positioned on a modern developer's desk, surrounded by glowing monitors displaying code review comments" srcset="https://substackcdn.com/image/fetch/$s_!uc_3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!uc_3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!uc_3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!uc_3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16cf5ea7-1d3b-4370-9459-bd1210067202_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>You just got feedback on a PR and your chest tightens. Your heart rate kicks up a notch. The reviewer&#8217;s tone feels harsh, their suggestions seem to completely miss the point of what you were trying to accomplish, and there&#8217;s this part of you (maybe a big part) that wants to defend every single line you wrote. You want to type out a paragraph-long comment explaining why they&#8217;re wrong, why your approach is actually brilliant, and why they clearly don&#8217;t understand the problem you were solving.</p><p>Been there? Yeah, me too. More times than I&#8217;d like to admit.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-uncomfortable-truth-26a?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-uncomfortable-truth-26a?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Real Source of the Pain</strong></h2><p>Here&#8217;s the thing the Stoics figured out a couple thousand years ago, and it still holds true when some senior dev is tearing apart your pull request: that discomfort you&#8217;re feeling right now? It&#8217;s not actually coming from the criticism itself. It&#8217;s coming from your judgment that you&#8217;ve been wronged. That your competence is being questioned. That this must mean something about your worth as a developer.</p><p>And that&#8217;s where we screw ourselves over.</p><p>Because the truth is, most code review feedback, even the harshly delivered stuff, contains something useful. But we can&#8217;t see it because we&#8217;re too busy nursing our wounded pride and mentally drafting our defensive response.</p><h2><strong>Mining for Gold in a Pile of Shit</strong></h2><p>What if you could extract every ounce of value from harsh feedback while discarding the emotional poison that comes with it? That&#8217;s the skill we need to develop.</p><p>First thing: you have to learn to separate the messenger from the message. A rude delivery, or even what you <em>perceive</em> as rude delivery, doesn&#8217;t automatically invalidate true insights. I&#8217;ve gotten feedback from people who had the communication skills of a brick, but their technical points were solid. Your job is mining for gold, not judging the miner&#8217;s manners.</p><p>Ask yourself this: is any part of this criticism true? Even 10% true? Because here&#8217;s the thing, even 10% accuracy in criticism is a gift. It&#8217;s information you didn&#8217;t have before. It&#8217;s a chance to improve your code before it hits production. Dismiss nothing until you&#8217;ve honestly examined it against reality.</p><p>I know how easy it is to get caught up in the emotions. To feel like your code&#8217;s being attacked. Like your self-worth is being questioned. I&#8217;ve been there, sitting at my desk, feeling that heat rise in my face, already mentally preparing my rebuttal. But that&#8217;s when you need to pause and ask: is there something here I can actually learn from? Is there a point buried in this feedback that, if I&#8217;m being honest with myself, is actually valid?</p><p>Maybe this person has a point. Maybe there <em>is</em> a better way to structure this. Maybe my first instinct wasn&#8217;t actually the best approach.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/the-uncomfortable-truth-26a/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-uncomfortable-truth-26a/comments"><span>Leave a comment</span></a></p><h2><strong>Your Critics Are Your Trainers</strong></h2><p>Here&#8217;s a reframe that&#8217;s helped me: view your critics as personal trainers for your code. They&#8217;re adding resistance that makes you stronger, even when it&#8217;s uncomfortable as hell. You don&#8217;t go to the gym expecting the trainer to tell you you&#8217;re perfect, you go expecting them to push you harder than you&#8217;d push yourself.</p><p>Same thing with code reviews.</p><p>I&#8217;ve learned to practice what I call &#8220;the grateful opposite.&#8221; Instead of getting defensive, I try to thank people for catching bugs, architectural flaws, or blind spots before they become production problems. Because at the end of the day, that&#8217;s what matters, producing the best quality code possible. It&#8217;s not about satisfying our own egos or proving we&#8217;re the smartest person in the room.</p><p>It&#8217;s very easy to get caught up in that. Trust me, I&#8217;ve dealt with ego battles over a long career. But over time you start to understand: I&#8217;m here to do a job. I&#8217;m here to do it well. My job is to produce the best quality product I can deliver, and if anyone can help me do that, even if they&#8217;re kind of an asshole about it, I&#8217;m going to take full advantage of that opportunity.</p><h2><strong>Not All Feedback Is Created Equal</strong></h2><p>Now, let&#8217;s be real for a second. You do need to distinguish between preference and principle. Some feedback is subjective style preferences; tabs versus spaces, this naming convention versus that one. And some reveals actual defects in your reasoning or approach.</p><p>I&#8217;ve had plenty of situations where feedback was just nitpicky bullshit. Someone commenting on variable naming when the real issue is whether the algorithm is efficient. In those cases, I don&#8217;t focus on it too much. But even in those nitpicky comments, I look for whether there&#8217;s something being pointed out that I could do a little better. Is there a better way to execute this, even if the specific suggestion isn&#8217;t quite right?</p><p>Epictetus said it best: if someone criticizes you unjustly, that&#8217;s their problem. But if it&#8217;s justified, thank them for the free education.</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>When We Get Too Close to Our Code</strong></h2><p>Here&#8217;s what happens to me all the damn time: I get blinded by my own work. You get into that tunnel vision of coding where you&#8217;re locked in, cranking out line after line, building this thing in your head. And then somebody comes along and points out that maybe you&#8217;re overthinking it. Maybe you&#8217;re writing too much code. Maybe there are things you could better reuse or ways to eliminate code versus actually creating more of it.</p><p>And they&#8217;re right. But it stings because you were so deep in your own solution that you couldn&#8217;t see the simpler path.</p><p>Use criticism as a mirror. When you have a defensive reaction, that reaction reveals where your ego is attached. That&#8217;s big data about yourself that&#8217;s worth examining. Anytime something triggers you, and I mean really triggers you, makes you want to write that defensive comment, you should evaluate why.</p><p>Is it really because this person has it out for you? Or is it because you&#8217;re too emotionally attached to the code you wrote?</p><p>Nine times out of ten, it&#8217;s the latter.</p><h2><strong>The &#8220;Try It First&#8221; Approach</strong></h2><p>Here&#8217;s something I&#8217;ve started doing that&#8217;s been genuinely helpful: implement the suggested approach first, even if you disagree with it. Just try it. Because sometimes your resistance isn&#8217;t actually technical judgment, it&#8217;s pride masquerading as technical judgment.</p><p>I&#8217;ve had situations recently where I look at a suggestion and think, &#8220;I don&#8217;t necessarily 100% agree with this approach.&#8221; But at the same time, it&#8217;s not really worth fighting over either. It&#8217;s very easy to get caught up in this subjective battle, this ego-driven mindset of &#8220;my way is the best way and this person doesn&#8217;t know anything because I&#8217;ve been doing this for 15 years and they&#8217;ve only been doing this for 3 years.&#8221;</p><p>Who the hell cares?</p><p>If their approach makes sense when you really think about it, when you set your ego aside and evaluate it objectively, just make the change. There&#8217;s no sense fighting that battle. There are so many things we should be focused on trying to be better at. There are some things you just need to learn to let go of.</p><h2><strong>The Culture That Feeds Our Defensiveness</strong></h2><p>Let&#8217;s zoom out for a second and talk about why this is so hard for us as developers. We&#8217;re operating in a culture that constantly reinforces ego-driven behavior.</p><p>Tech Twitter is full of hot takes about the &#8220;right&#8221; way to do things. There&#8217;s this mythology around &#8220;10x developers&#8221; who supposedly produce perfect code and never need feedback. We see conference talks from people making everything look effortless. GitHub stars and follower counts become weird proxies for technical competence.</p><p>All of this feeds into an environment where admitting you might be wrong, where accepting that your first approach wasn&#8217;t perfect, feels like weakness. Like you&#8217;re not one of the smart ones.</p><p>But that&#8217;s BS. The smartest developers I know are the ones who actively seek out criticism. Who treat every code review like an opportunity to level up. Who check their ego at the door because they understand that the goal is shipping great software, not proving they&#8217;re right.</p><h2><strong>What This Actually Looks Like in Practice</strong></h2><p>So what does this look like day-to-day? For me, it&#8217;s a constant practice. I still have that initial defensive reaction, I don&#8217;t think that ever fully goes away. But I&#8217;ve learned to recognize it and pause.</p><p>When I get feedback that makes my stomach clench, I take a breath. I read it again, this time looking specifically for what might be valid. I ask myself: &#8220;If my best friend gave me this exact same feedback over coffee, how would I receive it differently?&#8221;</p><p>Sometimes I&#8217;ll even sleep on it. Let the emotional reaction fade a bit before I respond. Because responding while you&#8217;re still in that defensive headspace? That&#8217;s how you write comments you&#8217;ll regret, or dig in on positions that aren&#8217;t actually defensible.</p><p>And when I do find myself getting into a back-and-forth debate in PR comments, I try to remember: this isn&#8217;t a courtroom. Nobody&#8217;s keeping score. The goal isn&#8217;t to win the argument; it&#8217;s to end up with better code than what I started with.</p><h2><strong>The Payoff</strong></h2><p>The more you practice receiving feedback without ego, the better feedback you get. People are more willing to give you honest, detailed reviews when they know you won&#8217;t get defensive. They&#8217;ll point out subtle issues they might have otherwise let slide because they didn&#8217;t want to deal with pushback.</p><p>And that makes you better. Faster. Your code improves more quickly because you&#8217;re not wasting energy on defending your choices. You&#8217;re using that energy to actually evaluate and implement better approaches.</p><p>Plus, and this is huge: it makes code review way less stressful. When you&#8217;re not treating every piece of feedback as an attack on your competence, when you&#8217;re genuinely curious about what you might learn, the whole process becomes less painful. Sometimes even enjoyable.</p><h2><strong>Your Turn</strong></h2><p>I want to hear from you because I know I&#8217;m not alone in struggling with this:</p><p>What&#8217;s your biggest challenge when receiving code review feedback? Is it certain types of criticism, or feedback from specific people, or just the general feeling of being judged?</p><p>Have you ever had feedback that initially pissed you off but later realized was actually spot-on? What made you come around?</p><p>What strategies have helped you separate your ego from your code? Any mental tricks or reframes that work for you?</p><p>Share your thoughts in the comments. Because honestly, we all need to get better at this. The developer who can receive feedback without getting defensive is going to grow faster, ship better code, and probably enjoy their job a hell of a lot more than the one constantly defending their territory.</p><p>At the end of the day, the person most likely to hold you back isn&#8217;t your code reviewer&#8212;it&#8217;s you.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;If anyone can refute me&#8212;show me I&#8217;m making a mistake or looking at things from the wrong perspective&#8212;I&#8217;ll gladly change. It&#8217;s the truth I&#8217;m after, and the truth never harmed anyone.&#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[Stop Lying to Yourself]]></title><description><![CDATA[Your Brain Is Gaslighting You Into Bad Decisions]]></description><link>https://thestoiccoder.michaelclawrence.com/p/stop-lying-to-yourself</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/stop-lying-to-yourself</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 11 Jan 2026 12:45:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3tiJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_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_!3tiJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3tiJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!3tiJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!3tiJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!3tiJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3tiJ!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_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;:2262779,&quot;alt&quot;:&quot;A Roman emperor in classical toga and laurel crown sitting at a modern developer's desk with glowing dual monitors displaying code&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/183476454?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="A Roman emperor in classical toga and laurel crown sitting at a modern developer's desk with glowing dual monitors displaying code" title="A Roman emperor in classical toga and laurel crown sitting at a modern developer's desk with glowing dual monitors displaying code" srcset="https://substackcdn.com/image/fetch/$s_!3tiJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!3tiJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!3tiJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!3tiJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eccd56f-bc93-43c1-b232-08ad2dcd8f3f_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>Remember that time you convinced yourself the new JavaScript framework was the right choice? You wrote up the whole technical justification. You presented it to the team. You spent two weeks setting it up. And then, about three months in, you&#8217;re staring at the documentation at 2 AM, debugging some weird edge case, and you realize the truth: you picked this thing because it looked good on your resume, not because it was right for the project.</p><p>Yeah. We&#8217;ve all been there.</p><p>Here&#8217;s the thing though: deep down, you probably <em>knew</em> it was the wrong choice from the beginning. But you talked yourself into it anyway. You rationalized it. You built a case for it. You convinced yourself and everyone else that this was the smart technical decision.</p><p>But it wasn&#8217;t. It was the decision you <em>wanted</em> to make, dressed up in logic.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-lying-to-yourself?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-lying-to-yourself?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Problem With Making Decisions in Our Heads</strong></h2><p>As developers, we make decisions all day long. Which library to use. How to structure this module. Whether to refactor now or ship first. When to push back on a deadline. Whether to take that new job offer. Some of these decisions take five seconds. Others keep us up at night.</p><p>Most of them happen entirely in our heads, influenced by whatever we read on Reddit last night, that one bad experience we had three years ago, or just the general anxiety of &#8220;what if I&#8217;m wrong about this?&#8221;</p><p>The problem is that our brains are really good at lying to us. They&#8217;re excellent at taking what we <em>want</em> to do and reverse-engineering logic that makes it seem like the <em>right</em> thing to do. We&#8217;re basically running compiler optimizations on our decision-making process, and sometimes those optimizations introduce bugs.</p><p>You know what I&#8217;m talking about. You&#8217;ve felt it. That moment where you&#8217;re justifying something to yourself and there&#8217;s this little voice in the back of your head going, &#8220;Really? <em>Really?</em> Is that why you&#8217;re doing this?&#8221; And you just... ignore it. You rationalize a little harder. You find one more reason. You keep moving forward.</p><p>And then months later, you&#8217;re dealing with the consequences of a decision you knew was questionable from the start.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-lying-to-yourself/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-lying-to-yourself/comments"><span>Leave a comment</span></a></p><h2><strong>What Marcus Aurelius Knew That We Keep Forgetting</strong></h2><p>Marcus Aurelius was arguably the most powerful person on Earth. Emperor of Rome. Controlled the biggest military force in the known world. And every night, he sat down and wrote to himself.</p><p>Not proclamations. Not decrees. Not things that would be read by historians. Just... thoughts. Questions. Reflections on his day, his decisions, his fears, his motivations.</p><p>Why would someone with that much power spend time writing in a journal that nobody else would read?</p><p>Because thinking on paper made him wiser.</p><p>That&#8217;s it. That&#8217;s the whole secret. When you write down your thinking, you can actually <em>see</em> it. You can examine it. Test it. Question it. You can&#8217;t do that when it&#8217;s just rattling around in your head, mixing with anxiety and ego and whatever you ate for lunch.</p><p>Writing is like running your thoughts through a debugger. It makes them visible. And once they&#8217;re visible, you can spot the bugs.</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>How to Actually Do This (Without It Feeling Like Therapy Homework)</strong></h2><p>Look, I get it. &#8220;Philosophical journaling&#8221; sounds like something a life coach would try to sell you in a webinar. It sounds touchy-feely and vaguely pointless.</p><p>But here&#8217;s what it actually is: it&#8217;s debugging your decision-making process before you commit the code.</p><p>When you&#8217;ve got a decision to make, especially a big one, here&#8217;s what you do:</p><p><strong>Write down your gut reaction first.</strong> Before you start rationalizing, before you start researching, just capture that initial instinct. Often your gut knows something your conscious mind hasn&#8217;t articulated yet. I can&#8217;t tell you how many times I&#8217;ve written down that first thought, spent a week talking myself into the opposite, and then ended up right back where I started. Save yourself the detour.</p><p><strong>List what&#8217;s actually in your control versus what isn&#8217;t.</strong> This is straight from the Stoics, and it&#8217;s stupidly powerful. You&#8217;re agonizing over whether the tech lead will approve your approach? That&#8217;s not in your control. What <em>is</em> in your control is how well you document your reasoning and present the alternatives. Focus on the actions you can actually take. Everything else is just mental masturbation.</p><p><strong>Examine your real motivations.</strong> This is the uncomfortable part. Are you choosing that new framework because it&#8217;s genuinely the best fit? Or because you&#8217;re bored with the current stack? Or because you want to pad your resume? Or because you read a blog post that made you feel like you&#8217;re falling behind?</p><p>There&#8217;s no judgment here. I&#8217;ve picked technologies for all of those reasons. But you need to be honest with yourself about <em>why</em> you&#8217;re leaning a certain direction, because that changes everything about how you should evaluate the decision.</p><p><strong>Play devil&#8217;s advocate against yourself.</strong> Force yourself to write the strongest possible case for the opposite choice. Not the strawman version. The <em>actual</em> best argument. This is where you catch your blind spots. This is where you realize, &#8220;Oh shit, I&#8217;m ignoring this pretty significant downside because I don&#8217;t want to deal with it.&#8221;</p><p><strong>Set a review date.</strong> For big decisions, write down when you&#8217;re going to revisit this and see if your reasoning held up. &#8220;I&#8217;ll check this in three months and see if I still think this was the right call.&#8221; This creates accountability to your past self. It&#8217;s like leaving comments in your code, except for your life choices.</p><h2><strong>What You&#8217;ll Actually Discover</strong></h2><p>Here&#8217;s what happens when you start doing this regularly: you begin to see your patterns.</p><p>You&#8217;ll notice you&#8217;re consistently over-optimistic in your time estimates. Or that you avoid having difficult conversations until they become crises. Or that you have a serious case of technology FOMO that makes you want to rewrite everything every six months.</p><p>These patterns are always there. But when they&#8217;re just in your head, they&#8217;re invisible. When you write them down over and over, they become undeniable.</p><p>I started noticing that every time I was excited about a new tool or framework, I had this whole internal narrative about &#8220;learning opportunities&#8221; and &#8220;staying current&#8221; and &#8220;becoming a better developer.&#8221; And you know what? Sometimes that was true. But a lot of times, I just wanted the dopamine hit of something new. I was bored. I wanted to feel smart again.</p><p>Once I saw that pattern written out in black and white, I couldn&#8217;t unsee it. And now when I feel that pull toward the shiny new thing, I know to ask myself, &#8220;Is this actually the right choice, or am I just bored?&#8221;</p><p>That&#8217;s the power of making your thinking visible.</p><h2><strong>The Journal Becomes Your Personal Database</strong></h2><p>After a few months of this, something cool happens: you&#8217;ve got a record of your decision-making process. You can look back and see what you were thinking when you made similar choices in the past.</p><p>Deciding whether to take a new job? Go read what you wrote the last time you switched roles. What were you hoping for? Did you get it? What did you undervalue? What surprised you?</p><p>Choosing between technical approaches? Look at what happened the last three times you made similar calls. What did you miss? What held up? What would you do differently?</p><p>You&#8217;re building a personal decision-making database. And unlike Stack Overflow, it&#8217;s specifically tailored to your biases, your context, your career.</p><p>We spend so much time trying to learn from other people&#8217;s experiences. Blog posts. Conference talks. Twitter threads. And that&#8217;s valuable. But your own experiences? Your own patterns? That&#8217;s data you can actually trust, because you know all the context that&#8217;s missing from the polished retrospective.</p><h2><strong>A Few Prompts to Get You Unstuck</strong></h2><p>Sometimes you sit down to write and you just... don&#8217;t know what to say. Your brain goes blank. Here are some prompts that help me get moving:</p><ul><li><p>What am I actually afraid will happen?</p></li><li><p>What would I tell a friend to do in this situation?</p></li><li><p>What would this look like if it were easy?</p></li><li><p>What am I pretending not to know?</p></li><li><p>If I had to decide right now, what would I choose? (Then ask: why?)</p></li></ul><p>That last one is particularly brutal. Because usually, you <em>do</em> know what you want to do. You&#8217;re just scared of committing to it. Or you&#8217;re hoping someone else will make the decision for you. Or you&#8217;re avoiding the hard conversation that comes after.</p><p>Writing it down makes that avoidance visible.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-lying-to-yourself?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-lying-to-yourself?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Part Where I Sound Like a Self-Help Book (But Bear With Me)</strong></h2><p>Look, I know this whole thing sounds kind of... earnest. Like something you&#8217;d find in the &#8220;personal development&#8221; section at Barnes &amp; Noble. And I get the resistance to that.</p><p>But here&#8217;s the reality: we&#8217;re making decisions all the time that affect our careers, our sanity, our lives. And most of us are doing it with about as much rigor as we&#8217;d give to choosing what to have for lunch.</p><p>We&#8217;ll spend three hours researching which laptop to buy, but we&#8217;ll take a new job based on a gut feeling and a good interview. We&#8217;ll meticulously review pull requests, but we won&#8217;t examine our own thinking when making decisions that will impact the next six months of our lives.</p><p>That&#8217;s backwards.</p><p>Marcus Aurelius knew this. He was making life-and-death decisions for an empire, and he still took the time to think on paper because he understood something fundamental: your decision-making process is your most important tool. If it&#8217;s buggy, everything else suffers.</p><p>You don&#8217;t have to call it &#8220;philosophical journaling&#8221; if that makes you uncomfortable. Call it debugging your brain. Call it decision docs. Call it whatever you want.</p><p>Just write down your thinking before you commit to the choice. Make it visible. Question it. Test it.</p><p>Your future self will thank you for it.</p><p>Because here&#8217;s what I&#8217;ve learned: the decisions I regret aren&#8217;t usually the ones where I made the wrong choice. They&#8217;re the ones where I made a choice I <em>knew</em> was wrong, but I talked myself into it anyway.</p><p>And the only way to stop doing that is to catch yourself in the act of the rationalization. To see it happening in real-time. To call bullshit on your own internal narrative before it becomes your external reality.</p><p>That&#8217;s what this practice does.</p><p>It won&#8217;t make you perfect. You&#8217;ll still make mistakes. But at least they&#8217;ll be <em>honest</em> mistakes, based on your actual values and actual reasoning, not just whatever story you told yourself to avoid discomfort.</p><p>And that&#8217;s worth thirty minutes with a journal.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;Everything we hear is an opinion, not a fact. Everything we see is a perspective, not the truth.&#8221; &#8212; Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Your Broken Promises Aren't Failures, They're Just Reality]]></title><description><![CDATA[The Mental Shift That Frees You From Deadline Guilt]]></description><link>https://thestoiccoder.michaelclawrence.com/p/your-broken-promises-arent-failures</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/your-broken-promises-arent-failures</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 04 Jan 2026 12:45:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Tv0P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_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_!Tv0P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Tv0P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Tv0P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Tv0P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Tv0P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Tv0P!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png" width="1200" height="672.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c682c4f2-fcc3-4149-8f29-6899f453570d_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;:1878140,&quot;alt&quot;:&quot; developer sitting at a minimalist desk with dual monitors displaying code, one hand on keyboard, the other hand open and relaxed in a gesture of acceptance, behind them a massive classical Roman statue of Marcus Aurelius partially dissolved&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/183384946?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt=" developer sitting at a minimalist desk with dual monitors displaying code, one hand on keyboard, the other hand open and relaxed in a gesture of acceptance, behind them a massive classical Roman statue of Marcus Aurelius partially dissolved" title=" developer sitting at a minimalist desk with dual monitors displaying code, one hand on keyboard, the other hand open and relaxed in a gesture of acceptance, behind them a massive classical Roman statue of Marcus Aurelius partially dissolved" srcset="https://substackcdn.com/image/fetch/$s_!Tv0P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!Tv0P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!Tv0P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!Tv0P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc682c4f2-fcc3-4149-8f29-6899f453570d_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>You estimated two days for that feature. Your team lead approved it. You felt pretty good about yourself. You&#8217;ve built this kind of thing before, you know what you&#8217;re doing.</p><p>Then production explodes.</p><p>Suddenly you&#8217;re pulled into firefighting mode. Three hours of debugging turns into three days. The QA environment goes down. The designer decides &#8211; oh, by the way &#8211; the whole flow needs to change. And that &#8220;simple&#8221; API integration? Yeah, the documentation was lying. The endpoints don&#8217;t work how they say they do.</p><p>Now you&#8217;re three sprints behind on something you promised would be done by Friday. And you feel like shit about it.</p><p>Not because you didn&#8217;t try. Not because you slacked off. But because in your head, you made a commitment, and you failed. You&#8217;re a professional who can&#8217;t even estimate their own work properly. What kind of developer are you?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/your-broken-promises-arent-failures?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/your-broken-promises-arent-failures?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Weight of Broken Promises</strong></h2><p>Here&#8217;s the thing that eats at you: it wasn&#8217;t even your fault. The production incident wasn&#8217;t something you could have predicted. The designer changing requirements wasn&#8217;t in your control. The API being broken? That&#8217;s on someone else&#8217;s poor documentation.</p><p>But you still feel guilty. Because somewhere along the way, you internalized this idea that a &#8220;good developer&#8221; should be able to predict the future. That giving an estimate means you&#8217;re making an iron-clad promise. That if you can&#8217;t deliver exactly what you said, exactly when you said it, you&#8217;re somehow letting everyone down.</p><p>We put this pressure on ourselves. Management puts it on us too. There&#8217;s this whole mythology around the 10x developer who can see around corners, who never misses a deadline, who can account for every possible dependency and blocker.</p><p>It&#8217;s bullshit. And it&#8217;s making us miserable.</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>What the Stoics Knew About Uncertainty</strong></h2><p>The ancient Stoics had a practice that would&#8217;ve saved us a lot of Sunday night anxiety. When they made any commitment, they silently added a reserve clause: &#8220;fate permitting.&#8221;</p><p>&#8220;I&#8217;ll finish this by Friday... fate permitting.&#8221; &#8220;This feature will take two days... fate permitting.&#8221; &#8220;We&#8217;ll ship this sprint&#8217;s work... fate permitting.&#8221;</p><p>This isn&#8217;t about being pessimistic or making excuses. It&#8217;s about maintaining your sanity in a job where uncertainty is the only constant.</p><p>The reserve clause is mental freedom from the guilt that comes when reality refuses to cooperate with your plans. Because here&#8217;s what every developer knows but somehow forgets when giving estimates: you&#8217;re making a prediction about a future you don&#8217;t control.</p><h2><strong>The Things You Can&#8217;t Control</strong></h2><p>Think about everything that can derail your estimate:</p><p>The production database that decides to corrupt itself at 2 AM on Thursday. The teammate who gets sick right when you need their code review. The VP who swoops in with <em>&#8220;just one small change&#8221;</em> that rewrites half your architecture. The vendor API that goes down. The deployment pipeline that breaks. The security vulnerability that gets discovered and suddenly becomes everyone&#8217;s top priority.</p><p>That &#8220;two day estimate&#8221; you gave? It was based on a world where none of those things happen. And that world doesn&#8217;t exist.</p><p>The Stoics, particularly Marcus Aurelius and Epictetus, were obsessed with this distinction between what you control and what you don&#8217;t.</p><p>You control your effort. You control your focus. You control how thoroughly you communicate blockers.</p><p>You don&#8217;t control dependencies failing. You don&#8217;t control requirements changing mid-sprint. You don&#8217;t control emergencies that pull you away from your work.</p><p>The reserve clause isn&#8217;t an excuse for poor planning. It&#8217;s not permission to sandbag your estimates or half-ass your work. It&#8217;s a realistic acknowledgment that between &#8220;I&#8217;ll start this task&#8221; and &#8220;I&#8217;ll finish this task&#8221; lies a vast ocean of uncertainty.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/your-broken-promises-arent-failures/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/p/your-broken-promises-arent-failures/comments"><span>Leave a comment</span></a></p><h2><strong>How This Actually Works</strong></h2><p>Let me give you a real example. You&#8217;re planning sprint work, and someone asks how long it&#8217;ll take to build the new payment processing flow.</p><p><strong>Without the reserve clause:</strong> &#8220;Two weeks.&#8221; (Internal pressure: &#8220;I said two weeks, so it HAS to be two weeks, no matter what happens.&#8221;)</p><p><strong>With the reserve clause:</strong> &#8220;Two weeks, assuming nothing prevents it.&#8221; (Internal reality: &#8220;I&#8217;m committing to two weeks of focused effort, but I&#8217;m not a fortune teller.&#8221;)</p><p>See the difference? The second one doesn&#8217;t change your external commitment, you&#8217;re still saying two weeks. But internally, you&#8217;re not setting yourself up for irrational guilt when the QA environment is down for three days, or when the product manager realizes halfway through that they forgot about a critical edge case.</p><p>When those interruptions happen &#8211; and they will &#8211; the reserve clause lets you pivot without the internal narrative of &#8220;I&#8217;m a failure who can&#8217;t keep promises.&#8221; Instead, it&#8217;s just: &#8220;Well, circumstances changed. Let&#8217;s adjust.&#8221;</p><h2><strong>The Paradox of Letting Go</strong></h2><p>Here&#8217;s what&#8217;s weird: releasing that rigid attachment to guaranteed outcomes often improves your results.</p><p>When you&#8217;re not defending an estimate like it&#8217;s your personal honor at stake, you become more flexible. You communicate blockers earlier because you&#8217;re not trying to hide them. You ask for help sooner because you&#8217;re not treating the estimate as a referendum on your competence. You&#8217;re more honest with stakeholders about risks because you&#8217;re not over-promising from ego.</p><p>You stop playing this exhausting game of pretending you have more control than you actually do.</p><p>And stakeholders? They trust you more. Because instead of the developer who says &#8220;two days&#8221; and then goes radio silent when it&#8217;s taking longer, you&#8217;re the developer who says &#8220;two days, barring any surprises&#8221; and then keeps everyone updated when surprises happen.</p><p>You can commit fully to the work while releasing attachment to guaranteed results. The only thing you can actually guarantee is that you will do the work necessary to try to achieve the goal as much as possible. Everything else &#8211; the timeline, the exact outcome, the smooth sailing, that&#8217;s outside your control.</p><h2><strong>Baking in Reality</strong></h2><p>Over time, this mental habit trains you to think differently during planning. You start identifying what&#8217;s actually in your control:</p><p>Your effort. Your focus. Your communication. The quality of your code. The thoroughness of your testing.</p><p>And what&#8217;s not in your control:</p><p>Dependencies on other teams. Third-party services staying up. Requirements staying stable. Emergencies not happening. The exact amount of time something will take once you account for all the unknowns.</p><p>Does this mean you stop giving estimates? No. Does it mean you pad everything to ridiculous levels? Also no.</p><p>It means you give honest estimates based on what you know, while acknowledging, to yourself if not out loud, that there&#8217;s always some outside thing that can happen that is unforeseen. The QA environment going down. The API changing without notice. The production incident that pulls you away.</p><p>That&#8217;s not pessimism. That&#8217;s reality. And acknowledging reality is the first step to not letting it destroy your mental health.</p><h2><strong>The Only Constant</strong></h2><p>As developers, we deal with constant change. We get used to it, eventually. The framework that was hot last year is old news this year. The architecture that made sense six months ago needs refactoring. The requirements that were set in stone last sprint are somehow different now.</p><p>But we still try to plan everything like we&#8217;re building a bridge, where all the variables are known and the materials behave predictably. Software development isn&#8217;t bridge building. It&#8217;s more like trying to build a bridge while the river is flooding, people are changing the blueprint mid-construction, and someone keeps yelling about how the other bank moved.</p><p>The reserve clause &#8211; &#8220;fate permitting&#8221; &#8211; is how you stay sane in that chaos. It&#8217;s how you commit to doing great work without committing to controlling things you can&#8217;t control.</p><div><hr></div><p>Quote of the Day:</p><blockquote><p>&#8220;Do every act of your life as though it were the last act of your life.&#8221; &#8212; Marcus Aurelius</p></blockquote><div><hr></div><p>&#128073; If you enjoy reading this post, feel free to share it with friends!</p><p>Or feel free to click the &#10084;&#65039; button on this post so more people can discover it on Substack &#128591;</p><p>You can find me on <a href="https://x.com/michael_c_law">X</a> and <a href="https://www.instagram.com/michael_c_law/">Instagram</a>.</p><p>Also, I just launched a new YouTube channel - <a href="https://www.youtube.com/@CodeAndComposure">Code &amp; Composure</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Stoic Coder is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Stop Apologizing for Doing Your Actual Job]]></title><description><![CDATA[Why Protecting Your Attention Matters]]></description><link>https://thestoiccoder.michaelclawrence.com/p/stop-apologizing-for-doing-your-actual</link><guid isPermaLink="false">https://thestoiccoder.michaelclawrence.com/p/stop-apologizing-for-doing-your-actual</guid><dc:creator><![CDATA[Michael Lawrence]]></dc:creator><pubDate>Sun, 28 Dec 2025 12:45:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lfKH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_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_!lfKH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lfKH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!lfKH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!lfKH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!lfKH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lfKH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8eadc8b2-7b03-4251-8e5e-2702cc181d2f_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;:1572922,&quot;alt&quot;:&quot;modern interpretation of ancient Greek agora as a tech 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/182718360?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="modern interpretation of ancient Greek agora as a tech workspace," title="modern interpretation of ancient Greek agora as a tech workspace," srcset="https://substackcdn.com/image/fetch/$s_!lfKH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!lfKH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!lfKH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!lfKH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eadc8b2-7b03-4251-8e5e-2702cc181d2f_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Generated by Midjourney</figcaption></figure></div><p>It&#8217;s 10 AM. You&#8217;ve been &#8220;working&#8221; for two hours, but your most significant accomplishment is answering twelve Slack messages and attending a standup that could&#8217;ve been an email. The feature you were supposed to ship this week? Still zero commits.</p><p>You know you need to focus. You know context switching is killing your productivity. But there&#8217;s this nagging guilt every time you see those notification badges piling up. What if someone needs you? What if you&#8217;re being a bad team player? What if ignoring that ping makes you look like you don&#8217;t care?</p><p>That guilt is misplaced urgency, and it&#8217;s destroying your ability to do meaningful work.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-apologizing-for-doing-your-actual?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-apologizing-for-doing-your-actual?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2><strong>The Real Cost of Scattered Attention</strong></h2><p>Seneca observed that people who are everywhere are really nowhere, constantly busy at accomplishing nothing meaningful. That Slack message mid-deep work, the email that derails your debugging session, the meeting that fragments your afternoon into useless 20-minute chunks&#8212;this isn&#8217;t just productivity loss. It&#8217;s a form of self-violence, scattering your mind until you can&#8217;t recognize your own thoughts.</p><p>Each context switch costs about 15-20 minutes of recovery time. Not the seconds it takes to check Slack, but the cognitive reload required to rebuild your mental model. Think about that. Every ping, every &#8220;quick question,&#8221; every notification you respond to immediately, you&#8217;re not losing seconds, you&#8217;re hemorrhaging 15-20 minutes of focused work.</p><p>You can be busy for 40 years and accomplish less than somebody with focused months. The Stoics understood this: attention is the only currency that matters, and modern work culture has us throwing it away like it&#8217;s unlimited.</p><p>Your brain literally cannot process two complex tasks simultaneously. What we call multitasking is just rapid context switching, and you&#8217;re doing it poorly. What&#8217;s the point of starting two or three different things at the same time if you can&#8217;t finish them? Or worse, if you just do them half-assed?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Stoic Coder&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://thestoiccoder.michaelclawrence.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Stoic Coder</span></a></p><h2><strong>Why We Keep Doing This to Ourselves</strong></h2><p>The guilt is real. Someone pings you, and you feel that immediate pressure to respond. Not because it&#8217;s actually urgent, but because we&#8217;ve been trained to treat every notification like a fire alarm.</p><p>But here&#8217;s what that really is: other people&#8217;s poor planning becoming your emergency.</p><p>Those interruptions? They&#8217;re rarely as urgent as they feel. Most of the time, they can wait an hour. Or three hours. Or until tomorrow. But we&#8217;ve convinced ourselves that being responsive means being reactive, that being available means being always-on.</p><p>I remember a time before we had the internet, before cell phones, before instant notifications. You could get lost in your work, lost in whatever you were doing, and there was really no way for anybody to get a hold of you. And you know what? The world didn&#8217;t end. People figured it out. They waited.</p><h2><strong>The Stoic Solution: Own Your Time</strong></h2><p>The Stoic practice of protecting your attention starts with recognizing it&#8217;s finite and non-renewable&#8212;more precious than time itself. When it&#8217;s time to work, that&#8217;s the thing you need to focus on.</p><p>That means shutting off Slack notifications. Closing your email client. Setting your status to &#8220;Do Not Disturb&#8221; without apologizing for it.</p><p>These are things I actually do. I&#8217;ll shut off notifications, close distractions, and just focus on whatever the task is. Getting it done. If you really need me, there are ways to get a hold of me, but is it really that necessary? Probably not.</p><p><strong>Set boundaries around deep work:</strong></p><ul><li><p>Do not disturb mode isn&#8217;t rude, it&#8217;s professional</p></li><li><p>Block your calendar for focus time</p></li><li><p>Make communication async-first by default</p></li></ul><p><strong>Batch your communication:</strong></p><ul><li><p>Check Slack three times daily instead of 300 times</p></li><li><p>You can be responsive without being reactive</p></li><li><p>Processing messages in batches is more efficient anyway</p></li></ul><p><strong>Preserve your flow state:</strong></p><ul><li><p>Quality attention on one problem for two hours outperforms fragmented attention on five problems for eight</p></li><li><p>Stoicism values depth over breadth</p></li><li><p>That deep work session where you actually solve the problem? That&#8217;s what you&#8217;re here for</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thestoiccoder.michaelclawrence.com/p/stop-apologizing-for-doing-your-actual/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-apologizing-for-doing-your-actual/comments"><span>Leave a comment</span></a></p><h2><strong>What This Looks Like in Practice</strong></h2><p>When I go out in the morning for a run, I leave my phone in my vehicle. It&#8217;s just me out there. First thing in the morning, nobody&#8217;s going to bother you at 6:30 AM anyway, but I keep my phone away so I&#8217;m not distracted by emails or LinkedIn notifications or whatever. I can just focus on the run.</p><p>Same thing with deep work sessions. I&#8217;ll focus on getting tasks done for solid blocks, then spend 15-20 minutes checking and getting caught up on things before going back. Rinse and repeat.</p><p>Just because we&#8217;re always connected doesn&#8217;t mean we always have to stay connected. We can choose to disconnect. There&#8217;s nothing wrong with disconnecting, I actually recommend it.</p><h2><strong>Stop Feeling Guilty</strong></h2><p>Here&#8217;s what you need to internalize: there&#8217;s no sense feeling guilty about protecting your attention. To do your best work, you have to focus. Without focus, you&#8217;re just scattered, and what are you really accomplishing? You&#8217;re being busy for the sake of being busy but not actually accomplishing anything.</p><p>The work you&#8217;re doing is important. Your time matters. If other people need you, they can wait. That&#8217;s not being selfish or a bad teammate, that&#8217;s understanding what your job actually is.</p><p>You weren&#8217;t hired to respond to Slack messages instantly. You were hired to solve problems, write code, ship features. Everything else is just noise trying to convince you it&#8217;s signal.</p><p>So own your time. Set those boundaries. Turn off those notifications. And when that guilt creeps in, remind yourself: the person who suffers most from your scattered attention is you, and the work you&#8217;re supposed to be doing deserves better than your fragmented leftovers.</p><div><hr></div><p><strong>Quote of the Day:</strong></p><blockquote><p>&#8220;People are frugal in guarding their personal property; but as soon as it comes to squandering time, they are most wasteful of the one thing in which it is right to be stingy.&#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><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>