<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Doug Slater</title>
    <subtitle>Software Engineering Leader and Mentor. Jesus follower</subtitle>
    <link rel="self" type="application/atom+xml" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;atom.xml"/>
    <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-02-23T00:00:00+00:00</updated>
    <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;atom.xml</id>
    <entry xml:lang="en">
        <title>Relieve your context anxiety with modular thinking</title>
        <published>2026-02-23T00:00:00+00:00</published>
        <updated>2026-02-23T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2026&#x2F;02&#x2F;relieve-your-context-anxiety-with-modular-thinking&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2026&#x2F;02&#x2F;relieve-your-context-anxiety-with-modular-thinking&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;Like electric vehicle range anxiety, context anxiety is that dread you feel when your LLM is almost out of context memory. Modules are your best tool for conserving LLM context.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;puzzle.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
  &lt;img class=&quot;mx-auto&quot; src=&quot;puzzle.jpg&quot; alt=&quot;A photo of a puzzle piece fitting into its place&quot;&gt;
&lt;&#x2F;picture&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A photo of a puzzle piece fitting into its place. Source&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;In my post &lt;a href=&quot;&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;&quot;&gt;AI: Accelerated Incompetence&lt;&#x2F;a&gt;, my last sentence was:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;continue to invest in the same fundamental engineering skills that were deemed valuable in 2019&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Modular thinking is one of those timeless engineering skills.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-do-modules-matter&quot;&gt;Why do modules matter?&lt;&#x2F;h2&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;claude_near_compaction.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
  &lt;img class=&quot;mx-auto&quot; src=&quot;claude_near_compaction.png&quot; alt=&quot;A screenshot of Claude Code&#x27;s warning &#x27;Context left until auto-compact: 12%&#x27;&quot;&gt;
&lt;&#x2F;picture&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    I feel anxious when I see this message from Claude Code.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;At the heart of OOP, FP, SOLID, DDD, SOA, CQRS, N-tier, bounded contexts, ports-and-adapters, onion, clean, event-driven, and all the other browbeaten software architecture jargon you&#x27;re tired of hearing about, is the hope to decompose software into pieces which the human mind can comprehend.&lt;&#x2F;p&gt;
&lt;p&gt;Smart humans can remember about 7 things at a time&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. (For me, it&#x27;s closer to 3.) Meanwhile, computer programs can be staggeringly complex. The only way for humans to work on big programs is to think about small pieces of them at a time. If the human mind had infinite working memory and attention span, we would not need any structure in our programs. Our children would write 1,000,000 line monolithic god-functions, and we would smile at their cute simplistic work.&lt;&#x2F;p&gt;
&lt;p&gt;Machines, like humans, have finite capacity.&lt;&#x2F;p&gt;
&lt;p&gt;Today, 1M tokens is considered a cavernous context window, and most people settle for 200k, which is the default for Claude Code. Yet 1M tokens will only fit a small codebase, up to about 75k lines of code. For perspective, that accomodates about half of SQLite and 0.2% of the Linux kernel.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Project&lt;&#x2F;th&gt;&lt;th&gt;Lines of Code&lt;&#x2F;th&gt;&lt;th&gt;Tokens&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;SQLite&lt;&#x2F;td&gt;&lt;td&gt;~150K&lt;&#x2F;td&gt;&lt;td&gt;~2M&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Linux kernel&lt;&#x2F;td&gt;&lt;td&gt;~40M&lt;&#x2F;td&gt;&lt;td&gt;~500M&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;In this sense, what&#x27;s good for humans is good for LLMs. If you&#x27;re human and want to work on a large codebase, you have to be choosy about what to bring into your working memory. If you want to use an LLM to work on a large codebase, you have to be choosy what to bring into its context.&lt;&#x2F;p&gt;
&lt;p&gt;So that&#x27;s why modules matter. But what is a module, exactly?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-is-a-module&quot;&gt;What is a module?&lt;&#x2F;h2&gt;
&lt;p&gt;In programming, modules take many physical forms: a function, class, shared library, program, or a group of programs, an HTTP endpoint, or yet other forms.&lt;&#x2F;p&gt;
&lt;p&gt;What makes any of these a module is:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It exposes an &lt;em&gt;interface&lt;&#x2F;em&gt; that conceals the secrets of its &lt;em&gt;implementation&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;It operates without using the secrets of other modules.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;what-makes-a-good-module&quot;&gt;What makes a good module?&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;A good module is &lt;em&gt;deep&lt;&#x2F;em&gt;. Its interface is smaller than its implementation&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Reading its interface is a much lower cognitive burden than reading its implementation.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;em&gt;preconditions&lt;&#x2F;em&gt; of a good module are well-defined. It is clear what the module assumes to be true about the world in order to run.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;em&gt;postconditions&lt;&#x2F;em&gt; of a good module are well-defined. It is clear what the module guarantees about its output and effects on the world.&lt;&#x2F;li&gt;
&lt;li&gt;A good module relies only the guarantees of other modules. Code that relies on facts that other code does not guarantee may work today but can break in the future.&lt;&#x2F;li&gt;
&lt;li&gt;The above facts make a module &lt;em&gt;composable&lt;&#x2F;em&gt;. Module A depends on Module B, and Module B depends on Module C. Programs can be understood as fractal structures: even simple programs have a &lt;a href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;2347&#x2F;&quot;&gt;deep dependency tree&lt;&#x2F;a&gt;. My single page web app depends on my chosen web framework, which depends on the browser&#x27;s JavaScript runtime and rendering engine, which depend on the operating system&#x27;s system call APIs, which depend on device drivers, which depend on device firmware. Thankfully, my app doesn&#x27;t have to know about TCP packet retry. All it knows is to call &lt;code&gt;fetch()&lt;&#x2F;code&gt; so I can watch &lt;a href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;676&#x2F;&quot;&gt;cat videos&lt;&#x2F;a&gt; in peace.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For modules with enough users, it&#x27;s inevitable&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; that someone will eventually break modularity by depending on what happens to work right now (observable behavior) instead of what is guaranteed to work (contractual behavior). Don&#x27;t do that.&lt;&#x2F;p&gt;
&lt;p&gt;See these references&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; for more detail and examples on what a module is.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-do-modules-have-to-do-with-llms&quot;&gt;What do modules have to do with LLMs?&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;program-correctness&quot;&gt;Program Correctness&lt;&#x2F;h2&gt;
&lt;p&gt;Modules let you and and LLMs reason about program correctness without thinking about the entire program. You or your LLM can change a part of the program, and as long as you don&#x27;t break that module&#x27;s public contract, the rest of the program will remain correct &lt;em&gt;if it only depends on that contract&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You can be confident that your changes don&#x27;t break some other part of the program. This is a powerful capability. The payoff for strictness about contracts, preconditions, and postconditions is &lt;em&gt;confidence to make changes&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;llm-performance&quot;&gt;LLM Performance&lt;&#x2F;h2&gt;
&lt;p&gt;The chart below shows the well-known fact that LLMs as a rule perform worse as they ingest more data. If future LLMs perform better, the problem doesn&#x27;t go away. The horizontal axis just gets longer.&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;model_performance.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
  &lt;img class=&quot;mx-auto&quot; src=&quot;model_performance.png&quot; alt=&quot;LLM Performance vs Context Length&quot;&gt;
&lt;&#x2F;picture&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    LLM Performance vs Context Length
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Conversely, an LLM will perform better if you constrain how much information it ingests. The type signature of a function is usually smaller than the function&#x27;s implementation. If your LLM has to look at the implementation of a function to determine how to use it, that will use more context.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;subagents&quot;&gt;Subagents&lt;&#x2F;h2&gt;
&lt;p&gt;Right now, subagents and agent orchestration are hot topics. Your main LLM agent, the orchestrator, hands off work to  &quot;subagents&quot;, each with an independent context. This conserves the context of the main agent, which improves task adhesion and alignment to your intentions.&lt;&#x2F;p&gt;
&lt;p&gt;You need something to hand off to the subagents. If your code is not modular, each subagent has to read more code to do its task. LLMs can do a pretty good job of making tool calls to e.g. &lt;code&gt;grep&lt;&#x2F;code&gt; a codebase and pick out the relevant bits, but your design choices can make it easier or harder for them. Without modular code, tasks will take longer, incur greater token usage, and fill up contexts more quickly.&lt;&#x2F;p&gt;
&lt;p&gt;Moreover, you want each subagent to work independently. Without modularity, parallel agents can make conflicting changes to the same files.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chats&quot;&gt;Chats&lt;&#x2F;h2&gt;
&lt;p&gt;If you&#x27;re copy-pasting code into an LLM chat window, a modular codebase will still help. In this case, you&#x27;re playing the role of main agent. You have to curate what information the chat bot receives, so you&#x27;re managing both your working memory and the LLM context.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;It&#x27;s easy to make software that works right today. It&#x27;s very hard to make software that &lt;a href=&quot;&#x2F;2026&#x2F;01&#x2F;dont-believe-software-never-fails&#x2F;&quot;&gt;keeps working in a changing environment&lt;&#x2F;a&gt;. You can do that by depending only on what your code&#x27;s environment guarantees. That&#x27;s modular thinking.&lt;&#x2F;p&gt;
&lt;p&gt;Look for words like interface, specification, contract, assumption, guarantee, precondition, postcondition, and invariant. Those are signals you&#x27;re dealing with a module.&lt;&#x2F;p&gt;
&lt;p&gt;Modules are humanity&#x27;s best hope to manage complex software.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pixnio.com&#x2F;objects&#x2F;toys&#x2F;last-puzzle-piece-puzzle-game-white-puzzle&quot;&gt;CC0 Pixnio&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.oreilly.com&#x2F;library&#x2F;view&#x2F;code-that-fits&#x2F;9780137464302&#x2F;&quot;&gt;Code that Fits in Your Head&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.manning.com&#x2F;books&#x2F;the-programmers-brain&quot;&gt;The Programmer&#x27;s Brain&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;web.stanford.edu&#x2F;~ouster&#x2F;cgi-bin&#x2F;aposd.php&quot;&gt;A Philosophy of Software Design (book)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wiktionary.org&#x2F;wiki&#x2F;Hyrum%27s_law&quot;&gt;Hyrum&#x27;s Law&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2023&#x2F;03&#x2F;modules-matter-most-for-masses.html&quot;&gt;Modules Matter Most for the Masses&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2026&#x2F;02&#x2F;relieve-your-context-anxiety-with-modular-thinking&#x2F;">&lt;p&gt;&lt;em&gt;Like electric vehicle range anxiety, context anxiety is that dread you feel when your LLM is almost out of context memory. Modules are your best tool for conserving LLM context.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;puzzle.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
  &lt;img class=&quot;mx-auto&quot; src=&quot;puzzle.jpg&quot; alt=&quot;A photo of a puzzle piece fitting into its place&quot;&gt;
&lt;&#x2F;picture&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A photo of a puzzle piece fitting into its place. Source&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;In my post &lt;a href=&quot;&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;&quot;&gt;AI: Accelerated Incompetence&lt;&#x2F;a&gt;, my last sentence was:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;continue to invest in the same fundamental engineering skills that were deemed valuable in 2019&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Modular thinking is one of those timeless engineering skills.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-do-modules-matter&quot;&gt;Why do modules matter?&lt;&#x2F;h2&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;claude_near_compaction.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
  &lt;img class=&quot;mx-auto&quot; src=&quot;claude_near_compaction.png&quot; alt=&quot;A screenshot of Claude Code&#x27;s warning &#x27;Context left until auto-compact: 12%&#x27;&quot;&gt;
&lt;&#x2F;picture&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    I feel anxious when I see this message from Claude Code.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;At the heart of OOP, FP, SOLID, DDD, SOA, CQRS, N-tier, bounded contexts, ports-and-adapters, onion, clean, event-driven, and all the other browbeaten software architecture jargon you&#x27;re tired of hearing about, is the hope to decompose software into pieces which the human mind can comprehend.&lt;&#x2F;p&gt;
&lt;p&gt;Smart humans can remember about 7 things at a time&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. (For me, it&#x27;s closer to 3.) Meanwhile, computer programs can be staggeringly complex. The only way for humans to work on big programs is to think about small pieces of them at a time. If the human mind had infinite working memory and attention span, we would not need any structure in our programs. Our children would write 1,000,000 line monolithic god-functions, and we would smile at their cute simplistic work.&lt;&#x2F;p&gt;
&lt;p&gt;Machines, like humans, have finite capacity.&lt;&#x2F;p&gt;
&lt;p&gt;Today, 1M tokens is considered a cavernous context window, and most people settle for 200k, which is the default for Claude Code. Yet 1M tokens will only fit a small codebase, up to about 75k lines of code. For perspective, that accomodates about half of SQLite and 0.2% of the Linux kernel.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Project&lt;&#x2F;th&gt;&lt;th&gt;Lines of Code&lt;&#x2F;th&gt;&lt;th&gt;Tokens&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;SQLite&lt;&#x2F;td&gt;&lt;td&gt;~150K&lt;&#x2F;td&gt;&lt;td&gt;~2M&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Linux kernel&lt;&#x2F;td&gt;&lt;td&gt;~40M&lt;&#x2F;td&gt;&lt;td&gt;~500M&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;In this sense, what&#x27;s good for humans is good for LLMs. If you&#x27;re human and want to work on a large codebase, you have to be choosy about what to bring into your working memory. If you want to use an LLM to work on a large codebase, you have to be choosy what to bring into its context.&lt;&#x2F;p&gt;
&lt;p&gt;So that&#x27;s why modules matter. But what is a module, exactly?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-is-a-module&quot;&gt;What is a module?&lt;&#x2F;h2&gt;
&lt;p&gt;In programming, modules take many physical forms: a function, class, shared library, program, or a group of programs, an HTTP endpoint, or yet other forms.&lt;&#x2F;p&gt;
&lt;p&gt;What makes any of these a module is:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It exposes an &lt;em&gt;interface&lt;&#x2F;em&gt; that conceals the secrets of its &lt;em&gt;implementation&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;It operates without using the secrets of other modules.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;what-makes-a-good-module&quot;&gt;What makes a good module?&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;A good module is &lt;em&gt;deep&lt;&#x2F;em&gt;. Its interface is smaller than its implementation&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Reading its interface is a much lower cognitive burden than reading its implementation.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;em&gt;preconditions&lt;&#x2F;em&gt; of a good module are well-defined. It is clear what the module assumes to be true about the world in order to run.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;em&gt;postconditions&lt;&#x2F;em&gt; of a good module are well-defined. It is clear what the module guarantees about its output and effects on the world.&lt;&#x2F;li&gt;
&lt;li&gt;A good module relies only the guarantees of other modules. Code that relies on facts that other code does not guarantee may work today but can break in the future.&lt;&#x2F;li&gt;
&lt;li&gt;The above facts make a module &lt;em&gt;composable&lt;&#x2F;em&gt;. Module A depends on Module B, and Module B depends on Module C. Programs can be understood as fractal structures: even simple programs have a &lt;a href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;2347&#x2F;&quot;&gt;deep dependency tree&lt;&#x2F;a&gt;. My single page web app depends on my chosen web framework, which depends on the browser&#x27;s JavaScript runtime and rendering engine, which depend on the operating system&#x27;s system call APIs, which depend on device drivers, which depend on device firmware. Thankfully, my app doesn&#x27;t have to know about TCP packet retry. All it knows is to call &lt;code&gt;fetch()&lt;&#x2F;code&gt; so I can watch &lt;a href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;676&#x2F;&quot;&gt;cat videos&lt;&#x2F;a&gt; in peace.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For modules with enough users, it&#x27;s inevitable&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; that someone will eventually break modularity by depending on what happens to work right now (observable behavior) instead of what is guaranteed to work (contractual behavior). Don&#x27;t do that.&lt;&#x2F;p&gt;
&lt;p&gt;See these references&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; for more detail and examples on what a module is.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-do-modules-have-to-do-with-llms&quot;&gt;What do modules have to do with LLMs?&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;program-correctness&quot;&gt;Program Correctness&lt;&#x2F;h2&gt;
&lt;p&gt;Modules let you and and LLMs reason about program correctness without thinking about the entire program. You or your LLM can change a part of the program, and as long as you don&#x27;t break that module&#x27;s public contract, the rest of the program will remain correct &lt;em&gt;if it only depends on that contract&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You can be confident that your changes don&#x27;t break some other part of the program. This is a powerful capability. The payoff for strictness about contracts, preconditions, and postconditions is &lt;em&gt;confidence to make changes&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;llm-performance&quot;&gt;LLM Performance&lt;&#x2F;h2&gt;
&lt;p&gt;The chart below shows the well-known fact that LLMs as a rule perform worse as they ingest more data. If future LLMs perform better, the problem doesn&#x27;t go away. The horizontal axis just gets longer.&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;model_performance.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
  &lt;img class=&quot;mx-auto&quot; src=&quot;model_performance.png&quot; alt=&quot;LLM Performance vs Context Length&quot;&gt;
&lt;&#x2F;picture&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    LLM Performance vs Context Length
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Conversely, an LLM will perform better if you constrain how much information it ingests. The type signature of a function is usually smaller than the function&#x27;s implementation. If your LLM has to look at the implementation of a function to determine how to use it, that will use more context.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;subagents&quot;&gt;Subagents&lt;&#x2F;h2&gt;
&lt;p&gt;Right now, subagents and agent orchestration are hot topics. Your main LLM agent, the orchestrator, hands off work to  &quot;subagents&quot;, each with an independent context. This conserves the context of the main agent, which improves task adhesion and alignment to your intentions.&lt;&#x2F;p&gt;
&lt;p&gt;You need something to hand off to the subagents. If your code is not modular, each subagent has to read more code to do its task. LLMs can do a pretty good job of making tool calls to e.g. &lt;code&gt;grep&lt;&#x2F;code&gt; a codebase and pick out the relevant bits, but your design choices can make it easier or harder for them. Without modular code, tasks will take longer, incur greater token usage, and fill up contexts more quickly.&lt;&#x2F;p&gt;
&lt;p&gt;Moreover, you want each subagent to work independently. Without modularity, parallel agents can make conflicting changes to the same files.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chats&quot;&gt;Chats&lt;&#x2F;h2&gt;
&lt;p&gt;If you&#x27;re copy-pasting code into an LLM chat window, a modular codebase will still help. In this case, you&#x27;re playing the role of main agent. You have to curate what information the chat bot receives, so you&#x27;re managing both your working memory and the LLM context.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;It&#x27;s easy to make software that works right today. It&#x27;s very hard to make software that &lt;a href=&quot;&#x2F;2026&#x2F;01&#x2F;dont-believe-software-never-fails&#x2F;&quot;&gt;keeps working in a changing environment&lt;&#x2F;a&gt;. You can do that by depending only on what your code&#x27;s environment guarantees. That&#x27;s modular thinking.&lt;&#x2F;p&gt;
&lt;p&gt;Look for words like interface, specification, contract, assumption, guarantee, precondition, postcondition, and invariant. Those are signals you&#x27;re dealing with a module.&lt;&#x2F;p&gt;
&lt;p&gt;Modules are humanity&#x27;s best hope to manage complex software.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pixnio.com&#x2F;objects&#x2F;toys&#x2F;last-puzzle-piece-puzzle-game-white-puzzle&quot;&gt;CC0 Pixnio&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.oreilly.com&#x2F;library&#x2F;view&#x2F;code-that-fits&#x2F;9780137464302&#x2F;&quot;&gt;Code that Fits in Your Head&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.manning.com&#x2F;books&#x2F;the-programmers-brain&quot;&gt;The Programmer&#x27;s Brain&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;web.stanford.edu&#x2F;~ouster&#x2F;cgi-bin&#x2F;aposd.php&quot;&gt;A Philosophy of Software Design (book)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wiktionary.org&#x2F;wiki&#x2F;Hyrum%27s_law&quot;&gt;Hyrum&#x27;s Law&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2023&#x2F;03&#x2F;modules-matter-most-for-masses.html&quot;&gt;Modules Matter Most for the Masses&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Don&#x27;t believe &quot;software never fails&quot;</title>
        <published>2026-01-02T00:00:00+00:00</published>
        <updated>2026-01-02T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2026&#x2F;01&#x2F;dont-believe-software-never-fails&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2026&#x2F;01&#x2F;dont-believe-software-never-fails&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;The claim &quot;software never fails&quot; is cavalier and dangerous. It creates a mindset that itself leads to software failures.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On March 26, 2024, a container ship collided with one of the piers of the Francis Scott Key Bridge in Maryland. Within 30 seconds, the entire bridge had collapsed into the Patapsco River, killing six people&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;key_bridge_collapse.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
  &lt;img class=&quot;mx-auto&quot; src=&quot;key_bridge_collapse.png&quot; alt=&quot;The collapsed Francis Scott Key Bridge&quot;&gt;
&lt;&#x2F;picture&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    The collapsed Francis Scott Key Bridge
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I&#x27;m going to make a bold claim: &lt;em&gt;the bridge didn&#x27;t fail&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s right. Six people dead. $15M economic loss per day. &lt;em&gt;The bridge didn&#x27;t fail&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;After all, it did exactly what it was designed to do. The bridge was doomed the moment its blueprints were approved, before a single truss was machined, before a single pier was erected. From the moment of impact, its collapse was mechanically inevitable. A computer simulation could have easily predicted it.&lt;&#x2F;p&gt;
&lt;p&gt;How does my claim make you feel? How do you think the families of the dead would feel? They&#x27;d be ready to throw me off that bridge! Of course the bridge &lt;em&gt;failed&lt;&#x2F;em&gt;. Look at it!&lt;&#x2F;p&gt;
&lt;p&gt;Savor your righteous indignation, because that is exactly what I felt when I read the post &lt;em&gt;Software Never Fails&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It claims that:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The brief reason we can say software never fails is that software always does precisely what we told it to do. The outcome may be undesirable, and it may be unexpected, but the software itself &lt;em&gt;never deviates from the instructions it was compiled into&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The post offers a definition of failure:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;A &lt;em&gt;failure&lt;&#x2F;em&gt; is the event that occurs when a component first does what we designed it to, then something happens, and then the component no longer does what it was designed to do.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;If we are to consistently apply this claim and definition, then the Francis Scott Key Bridge didn&#x27;t fail. It did precisely what it was designed to do.&lt;&#x2F;p&gt;
&lt;p&gt;Software developers: Now imagine this kind of thinking applied to your codebase or to the medical device that keeps your grandmother alive. What could go wrong?&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-failure-of-software-never-fails&quot;&gt;The failure of &quot;software never fails&quot;&lt;&#x2F;h1&gt;
&lt;p&gt;The syllogism presented in &lt;em&gt;Software Never Fails&lt;&#x2F;em&gt; goes:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Premise 1&lt;&#x2F;strong&gt;: Failure means some component changed from working to non-working.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Premise 2&lt;&#x2F;strong&gt;: A program&#x27;s compiled instructions never changes.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Conclusion&lt;&#x2F;strong&gt;: &quot;Software is design-stuff. It doesn&#x27;t fail ever.&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Both premises are false, and so is the conclusion.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-faulty-definition&quot;&gt;A faulty definition&lt;&#x2F;h2&gt;
&lt;p&gt;Premise 1 is false by its definition of failure.&lt;&#x2F;p&gt;
&lt;p&gt;The article cherry-picks a definition from hardware reliability engineering which says that &lt;em&gt;failure is a state transition from working to non-working.&lt;&#x2F;em&gt; A capacitor dries out, and a bearing wears down. While this definition is suitable for hardware, it doesn&#x27;t apply to programs. If a program &quot;never deviates from the instructions it was compiled into&quot;, how can it transition? Software is definitionally excluded.&lt;&#x2F;p&gt;
&lt;p&gt;In &lt;a href=&quot;https:&#x2F;&#x2F;slater.dev&#x2F;2025&#x2F;12&#x2F;when-the-machine-metaphor-breaks-down&#x2F;&quot;&gt;When the Machine Metaphor Breaks Down&lt;&#x2F;a&gt;, I compared and contrasted software failures to hardware failures. I provided precise definitions of failure that apply to both:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Sins of commission&lt;&#x2F;em&gt;: The thing did something it was required not to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Sins of omission&lt;&#x2F;em&gt;: The thing didn&#x27;t do something it was required to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Latent faults&lt;&#x2F;em&gt;: Bugs that are present but not causing observable failures.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Unmet expectations&lt;&#x2F;em&gt;: The user was surprised the thing did or didn&#x27;t do something.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Compromised safety&lt;&#x2F;em&gt;: A hazard or loss occurred and the thing was involved, &lt;em&gt;even if&lt;&#x2F;em&gt; it performed as required and expected.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I also showed that hardware and software fail for different &lt;em&gt;causes&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Hardware&lt;&#x2F;em&gt; fails as its internal physical condition deteriorates.&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;em&gt;program&lt;&#x2F;em&gt; fails as it environment changes, invalidating its assumptions and preconditions.&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;em&gt;codebase&lt;&#x2F;em&gt; fails as its design integrity dissolves and defect count rises.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;software-is-surprising&quot;&gt;Software is surprising&lt;&#x2F;h2&gt;
&lt;p&gt;Premise 2 is also false.&lt;&#x2F;p&gt;
&lt;p&gt;The claim &quot;software never changes&quot; wants us to to believe that programs are &lt;em&gt;deterministic&lt;&#x2F;em&gt;, and if deterministic, then predictable, and therefore incapable of surprising us with failure.&lt;&#x2F;p&gt;
 &lt;!----&gt;


&lt;div
  class=&quot;my-4 flex flex-col rounded-lg bg-[var(--admonition-bg)]&quot;
  style=&quot;--admonition-bg: rgba(68, 138, 255, 0.1)&quot;
&gt;
  &lt;div class=&quot;flex items-center rounded-t-lg bg-[var(--admonition-bg)] p-1&quot;&gt;
    &lt;div
      class=&quot;mx-2 h-4 w-4 text-[0] [background:var(--url)_center_center_no-repeat] dark:invert&quot;
      style=&quot;--url: url(.&#x2F;icons&#x2F;note.svg)&quot;
    &gt;
      note
    &lt;&#x2F;div&gt;
    &lt;span&gt;&lt;strong&gt;note&lt;&#x2F;strong&gt;&lt;&#x2F;span&gt;
  &lt;&#x2F;div&gt;
  &lt;div class=&quot;pl-4&quot;&gt;&lt;p&gt;&lt;em&gt;Deterministic&lt;&#x2F;em&gt; means the same inputs produce the same outputs.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;But programs are effectively nondeterministic. Yes, it&#x27;s narrowly correct that compiled bytecode doesn&#x27;t spontaneously mutate, but the argument conflates &lt;em&gt;instructions&lt;&#x2F;em&gt; with &lt;em&gt;execution&lt;&#x2F;em&gt;. A program&#x27;s behavior depends not only on its bytecode but on its &lt;em&gt;entire input space&lt;&#x2F;em&gt;. Proving a program correct requires proving it correct &lt;em&gt;for all possible inputs and states&lt;&#x2F;em&gt;. As Dijkstra wrote, tests can show the presence of bugs, but never show their absence.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-dangers-of-believing-software-never-fails&quot;&gt;The dangers of believing &quot;software never fails&quot;&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;danger-design-and-implementation-conflated&quot;&gt;Danger: Design and implementation conflated&lt;&#x2F;h2&gt;
&lt;p&gt;In building architecture, the distinction between design and construction is clear. Design is clay models and blueprints. Construction is pouring concrete and milling steel. Many structural failures happened because the construction did not follow the design&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Software also has distinct design and implementation activities. Sometime this is easy to see: it&#x27;s common industry practice for a software architect to hand over a completed design specification to another implementation team, perhaps even an offshore one. The distinction is harder to observe if the same person does the designing and the implementing.&lt;&#x2F;p&gt;
&lt;p&gt;When the Therac-25 radiation therapy machine killed patients in the 1980s, investigators found that the software &lt;em&gt;implementation&lt;&#x2F;em&gt; failed to properly sequence safety interlocks that the &lt;em&gt;design&lt;&#x2F;em&gt; had specified. The design was sound, but the implementation was not. If we say &quot;software is pure design,&quot; we have no vocabulary to disambiguate these failure modes, and we have no framework for preventing them.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fix-remember-verification-and-validation&quot;&gt;Fix: Remember Verification and Validation&lt;&#x2F;h3&gt;
&lt;p&gt;Implementation errors are mitigated with &lt;em&gt;verification&lt;&#x2F;em&gt;, i.e. asking the question, &quot;did we build the thing correctly?&quot; Design errors are mitigated with &lt;em&gt;validation&lt;&#x2F;em&gt;, i.e. asking &quot;are we building the correct thing?&quot;&lt;&#x2F;p&gt;
&lt;p&gt;In &lt;a href=&quot;&#x2F;2024&#x2F;01&#x2F;a-design-is-a-mold-for-code&#x2F;&quot;&gt;A Design is a Mold for Code&lt;&#x2F;a&gt;, I show with examples the distinction between design and code.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;danger-presbyopic-causal-chains&quot;&gt;Danger: Presbyopic causal chains&lt;&#x2F;h2&gt;
&lt;p&gt;The benevolent intent of the phrase &quot;software never fails&quot; is to encourage us to look beyond proximal causes of failure and seek distal causes, but it goes too far. A high-quality report on a commercial airliner crash will include both: the plane had a problem, &lt;em&gt;and&lt;&#x2F;em&gt; a long causal chain of lax training, spotty maintenance, regulatory capture, and eroded safety culture from the very top allowed the problem to cascade into a catastrophe.&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Presbyopia&lt;&#x2F;em&gt; is the inability of the eye to focus clearly on close objects&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and I&#x27;m concerned that people who believe &quot;software never fails&quot; will look for distant causes of failure while allowing the immediate ones to blur into invisibility.&lt;&#x2F;p&gt;
&lt;p&gt;What is a causal chain? Many of us have had or heard a conversation with a young child that went something like this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Child: &quot;Why can&#x27;t I play on the grass?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;You: &quot;Because it&#x27;s wet, sweetie&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because I turned the valve on.&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because the grass is turning brown&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because we live in New Mexico&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because your great-grandfather moved here in the &#x27;40s&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because the Wright Brothers invented the airplane. This made the Japanese attack on Pearl Harbor possible, which brought the USA into World War 2, which resulted in the founding of Los Alamos in 1943.&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As you can see, the more removed a cause is from its effect, the less plausible its association and the &lt;strong&gt;less actionable any mitigation or prevention&lt;&#x2F;strong&gt;. A proximal cause to my grass being wet is &lt;em&gt;I turned the valve on&lt;&#x2F;em&gt;. A distal cause is &lt;em&gt;the Wright Brothers invented the airplane&lt;&#x2F;em&gt;. Removing the middle links from the chain of causality reveals the absurdity: &quot;You can&#x27;t play outside because airplanes exist.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;If we believe a claim like &quot;software never fails&quot;, we sever the proximal links in the causal chain. We&#x27;ll cast a wide net looking for monsters in other castles but not the ones under our beds.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fix-the-4-part-filter-for-relevant-causes&quot;&gt;Fix: The 4-part filter for relevant causes&lt;&#x2F;h3&gt;
&lt;p&gt;Use this framework to discover relevant distal causes of failure without ignoring proximal causes. When engineers analyze why a failure happened or could happen, they privilege causes that:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;are proximal&lt;&#x2F;strong&gt;, physically or temporally. My hand turned the valve, and a few seconds later the grass got wet. The Pearl Harbor attack and invention of the airplane happened long ago and far away.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;exhibit agency&lt;&#x2F;strong&gt;. I &lt;em&gt;chose&lt;&#x2F;em&gt; to turn the valve. I didn&#x27;t choose where to found Los Alamos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;are controllable&lt;&#x2F;strong&gt;. Turning a valve is an event I can control (separately from choosing to). There&#x27;s no action I can take about historical wars.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;are normal and expected&lt;&#x2F;strong&gt;. Turning a valve is a common event. Wars aren&#x27;t.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;danger-latent-defects-ignored&quot;&gt;Danger: Latent defects ignored&lt;&#x2F;h2&gt;
&lt;p&gt;Bad metaphors breed bad decisions. What might actually happens if a software team internalizes the idea that &quot;software never fails&quot;?&lt;&#x2F;p&gt;
&lt;p&gt;If a team thinks software never fails, they might not allow themselves to believe their software could contain latent defects. They might think, &quot;It works today, so it will always work.&quot; In their false confidence, they might skip testing, breeze through code review, dismiss bug reports, or skip error handling. This may let them ship quickly at first only to get bogged down fixing bugs later. In the meantime, hopefully those bugs don&#x27;t cause harm to anyone.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fix-use-better-metaphors&quot;&gt;Fix: Use better metaphors&lt;&#x2F;h3&gt;
&lt;p&gt;In &lt;a href=&quot;&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;It&#x27;s Not Tech Debt. It&#x27;s Tech Risk&lt;&#x2F;a&gt;, I show that the metaphors we use shape how seriously we take software problems.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;danger-eroded-alignment-with-nonexperts&quot;&gt;Danger: Eroded alignment with nonexperts&lt;&#x2F;h2&gt;
&lt;p&gt;The phrase &quot;software never fails&quot; communicates the wrong thing to non-practitioners. When a politician or mid-level manager hears &quot;X never fails&quot;, they hear, &quot;We never have to think about that.&quot; They don&#x27;t share your nuanced understanding. This mindset could lead to poor business decisions, for example when leadership says &quot;ship it&quot; or downsizes the QA team. It could also lead to public harm when an elected or appointed official makes an misguided public policy decision.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fix-use-different-words&quot;&gt;Fix: Use different words&lt;&#x2F;h3&gt;
&lt;p&gt;A professional structural engineer would never say &quot;bridges never fail&quot;. Instead of propagating incorrect absolute statements like &quot;software never fails&quot;, let your word choices build, not erode, alignment between you and decision makers. For guidance on translating technical risks into terms leadership will prioritize, see my post &lt;a href=&quot;&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;&quot;&gt;Tech Risk is Business Risk&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-to-do-instead&quot;&gt;What to do instead&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;change-your-mindset&quot;&gt;Change your Mindset&lt;&#x2F;h2&gt;
&lt;p&gt;When analyzing software failures:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Use precise definitions of failure and definitions appropriate for software.&lt;&#x2F;li&gt;
&lt;li&gt;Distinguish between design and implementation. Remember validation and verification.&lt;&#x2F;li&gt;
&lt;li&gt;Use my 4-part filter for relevant causes.&lt;&#x2F;li&gt;
&lt;li&gt;Use metaphors that discourage hubris and language that communicates the right things to leaders.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;concrete-actions&quot;&gt;Concrete actions&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Pretend your next commit message or PR description will be printed &lt;strong&gt;on the front page of the &lt;em&gt;New York Times&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;. How will your word choices come across to your manager, CEO, elected government officials, or to the public?&lt;&#x2F;li&gt;
&lt;li&gt;In your next code review this week, &lt;strong&gt;identify one assumption&lt;&#x2F;strong&gt; about the environment that could become invalid. Are there places where the code assumes &quot;this will always work&quot;?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Bookmark this page.&lt;&#x2F;strong&gt; The next time a postmortem gets off track, share it.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Start a discussion&lt;&#x2F;strong&gt;. In e.g. Slack, Teams, or another collaboration tool, ask &quot;how do we distinguish design errors from implementation errors?&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;Saying a program can&#x27;t fail because its deployed bytecode doesn&#x27;t change is like saying the Francis Scott Key Bridge didn&#x27;t fail because its steel molecules obeyed the laws of physics. One might object, &quot;Yo dawg, the bridge was destroyed by an external force, not internal failure&quot;, and this is exactly my point about software. Programs eventually experience external forces  that their designers didn&#x27;t anticipate. If we excuse the bridge because it wasn&#x27;t designed to withstand a collision with a modern container ship, then we must equally excuse software that fails when its environment changes. The question is how &lt;em&gt;designs can anticipate and accommodate these stresses&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Francis_Scott_Key_Bridge_collapse&quot;&gt;Francis Scott Key Bridge Collapse&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;entropicthoughts.com&#x2F;software-never-fails&quot;&gt;Software Never Fails&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Hyatt_Regency_walkway_collapse&quot;&gt;Hyatt Regency walkway collapse&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;admiralcloudberg.medium.com&#x2F;trial-by-fire-the-crash-of-aeroflot-flight-1492-ee61cebcf6ec&quot;&gt;Trial by Fire: The crash of Aeroflot flight 1492&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Presbyopia&quot;&gt;Presbyopia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;related-reading&quot;&gt;Related reading&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2025&#x2F;12&#x2F;when-the-machine-metaphor-breaks-down&#x2F;&quot;&gt;When the Machine Metaphor Breaks Down&lt;&#x2F;a&gt;. How software failures differ from hardware failures&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2024&#x2F;01&#x2F;a-design-is-a-mold-for-code&#x2F;&quot;&gt;A Design is a Mold for Code&lt;&#x2F;a&gt;. Why design precedes and shapes code, not the reverse&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;It&#x27;s Not Tech Debt. It&#x27;s Tech Risk.&lt;&#x2F;a&gt;. How the metaphors we use shape how seriously we take software problems&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;&quot;&gt;Tech Risk is Business Risk&lt;&#x2F;a&gt;. Translating technical risks into terms leadership will prioritize&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;&quot;&gt;It&#x27;s Time to License Software Engineering&lt;&#x2F;a&gt;. Why society should train and recognize professional software engineers&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2026&#x2F;01&#x2F;dont-believe-software-never-fails&#x2F;">&lt;p&gt;&lt;em&gt;The claim &quot;software never fails&quot; is cavalier and dangerous. It creates a mindset that itself leads to software failures.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On March 26, 2024, a container ship collided with one of the piers of the Francis Scott Key Bridge in Maryland. Within 30 seconds, the entire bridge had collapsed into the Patapsco River, killing six people&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;picture&gt;
  &lt;source srcset=&quot;key_bridge_collapse.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
  &lt;img class=&quot;mx-auto&quot; src=&quot;key_bridge_collapse.png&quot; alt=&quot;The collapsed Francis Scott Key Bridge&quot;&gt;
&lt;&#x2F;picture&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    The collapsed Francis Scott Key Bridge
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I&#x27;m going to make a bold claim: &lt;em&gt;the bridge didn&#x27;t fail&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s right. Six people dead. $15M economic loss per day. &lt;em&gt;The bridge didn&#x27;t fail&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;After all, it did exactly what it was designed to do. The bridge was doomed the moment its blueprints were approved, before a single truss was machined, before a single pier was erected. From the moment of impact, its collapse was mechanically inevitable. A computer simulation could have easily predicted it.&lt;&#x2F;p&gt;
&lt;p&gt;How does my claim make you feel? How do you think the families of the dead would feel? They&#x27;d be ready to throw me off that bridge! Of course the bridge &lt;em&gt;failed&lt;&#x2F;em&gt;. Look at it!&lt;&#x2F;p&gt;
&lt;p&gt;Savor your righteous indignation, because that is exactly what I felt when I read the post &lt;em&gt;Software Never Fails&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It claims that:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The brief reason we can say software never fails is that software always does precisely what we told it to do. The outcome may be undesirable, and it may be unexpected, but the software itself &lt;em&gt;never deviates from the instructions it was compiled into&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The post offers a definition of failure:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;A &lt;em&gt;failure&lt;&#x2F;em&gt; is the event that occurs when a component first does what we designed it to, then something happens, and then the component no longer does what it was designed to do.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;If we are to consistently apply this claim and definition, then the Francis Scott Key Bridge didn&#x27;t fail. It did precisely what it was designed to do.&lt;&#x2F;p&gt;
&lt;p&gt;Software developers: Now imagine this kind of thinking applied to your codebase or to the medical device that keeps your grandmother alive. What could go wrong?&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-failure-of-software-never-fails&quot;&gt;The failure of &quot;software never fails&quot;&lt;&#x2F;h1&gt;
&lt;p&gt;The syllogism presented in &lt;em&gt;Software Never Fails&lt;&#x2F;em&gt; goes:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Premise 1&lt;&#x2F;strong&gt;: Failure means some component changed from working to non-working.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Premise 2&lt;&#x2F;strong&gt;: A program&#x27;s compiled instructions never changes.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Conclusion&lt;&#x2F;strong&gt;: &quot;Software is design-stuff. It doesn&#x27;t fail ever.&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Both premises are false, and so is the conclusion.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-faulty-definition&quot;&gt;A faulty definition&lt;&#x2F;h2&gt;
&lt;p&gt;Premise 1 is false by its definition of failure.&lt;&#x2F;p&gt;
&lt;p&gt;The article cherry-picks a definition from hardware reliability engineering which says that &lt;em&gt;failure is a state transition from working to non-working.&lt;&#x2F;em&gt; A capacitor dries out, and a bearing wears down. While this definition is suitable for hardware, it doesn&#x27;t apply to programs. If a program &quot;never deviates from the instructions it was compiled into&quot;, how can it transition? Software is definitionally excluded.&lt;&#x2F;p&gt;
&lt;p&gt;In &lt;a href=&quot;https:&#x2F;&#x2F;slater.dev&#x2F;2025&#x2F;12&#x2F;when-the-machine-metaphor-breaks-down&#x2F;&quot;&gt;When the Machine Metaphor Breaks Down&lt;&#x2F;a&gt;, I compared and contrasted software failures to hardware failures. I provided precise definitions of failure that apply to both:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Sins of commission&lt;&#x2F;em&gt;: The thing did something it was required not to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Sins of omission&lt;&#x2F;em&gt;: The thing didn&#x27;t do something it was required to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Latent faults&lt;&#x2F;em&gt;: Bugs that are present but not causing observable failures.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Unmet expectations&lt;&#x2F;em&gt;: The user was surprised the thing did or didn&#x27;t do something.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Compromised safety&lt;&#x2F;em&gt;: A hazard or loss occurred and the thing was involved, &lt;em&gt;even if&lt;&#x2F;em&gt; it performed as required and expected.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I also showed that hardware and software fail for different &lt;em&gt;causes&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Hardware&lt;&#x2F;em&gt; fails as its internal physical condition deteriorates.&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;em&gt;program&lt;&#x2F;em&gt; fails as it environment changes, invalidating its assumptions and preconditions.&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;em&gt;codebase&lt;&#x2F;em&gt; fails as its design integrity dissolves and defect count rises.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;software-is-surprising&quot;&gt;Software is surprising&lt;&#x2F;h2&gt;
&lt;p&gt;Premise 2 is also false.&lt;&#x2F;p&gt;
&lt;p&gt;The claim &quot;software never changes&quot; wants us to to believe that programs are &lt;em&gt;deterministic&lt;&#x2F;em&gt;, and if deterministic, then predictable, and therefore incapable of surprising us with failure.&lt;&#x2F;p&gt;
 &lt;!----&gt;


&lt;div
  class=&quot;my-4 flex flex-col rounded-lg bg-[var(--admonition-bg)]&quot;
  style=&quot;--admonition-bg: rgba(68, 138, 255, 0.1)&quot;
&gt;
  &lt;div class=&quot;flex items-center rounded-t-lg bg-[var(--admonition-bg)] p-1&quot;&gt;
    &lt;div
      class=&quot;mx-2 h-4 w-4 text-[0] [background:var(--url)_center_center_no-repeat] dark:invert&quot;
      style=&quot;--url: url(.&#x2F;icons&#x2F;note.svg)&quot;
    &gt;
      note
    &lt;&#x2F;div&gt;
    &lt;span&gt;&lt;strong&gt;note&lt;&#x2F;strong&gt;&lt;&#x2F;span&gt;
  &lt;&#x2F;div&gt;
  &lt;div class=&quot;pl-4&quot;&gt;&lt;p&gt;&lt;em&gt;Deterministic&lt;&#x2F;em&gt; means the same inputs produce the same outputs.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;But programs are effectively nondeterministic. Yes, it&#x27;s narrowly correct that compiled bytecode doesn&#x27;t spontaneously mutate, but the argument conflates &lt;em&gt;instructions&lt;&#x2F;em&gt; with &lt;em&gt;execution&lt;&#x2F;em&gt;. A program&#x27;s behavior depends not only on its bytecode but on its &lt;em&gt;entire input space&lt;&#x2F;em&gt;. Proving a program correct requires proving it correct &lt;em&gt;for all possible inputs and states&lt;&#x2F;em&gt;. As Dijkstra wrote, tests can show the presence of bugs, but never show their absence.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-dangers-of-believing-software-never-fails&quot;&gt;The dangers of believing &quot;software never fails&quot;&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;danger-design-and-implementation-conflated&quot;&gt;Danger: Design and implementation conflated&lt;&#x2F;h2&gt;
&lt;p&gt;In building architecture, the distinction between design and construction is clear. Design is clay models and blueprints. Construction is pouring concrete and milling steel. Many structural failures happened because the construction did not follow the design&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Software also has distinct design and implementation activities. Sometime this is easy to see: it&#x27;s common industry practice for a software architect to hand over a completed design specification to another implementation team, perhaps even an offshore one. The distinction is harder to observe if the same person does the designing and the implementing.&lt;&#x2F;p&gt;
&lt;p&gt;When the Therac-25 radiation therapy machine killed patients in the 1980s, investigators found that the software &lt;em&gt;implementation&lt;&#x2F;em&gt; failed to properly sequence safety interlocks that the &lt;em&gt;design&lt;&#x2F;em&gt; had specified. The design was sound, but the implementation was not. If we say &quot;software is pure design,&quot; we have no vocabulary to disambiguate these failure modes, and we have no framework for preventing them.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fix-remember-verification-and-validation&quot;&gt;Fix: Remember Verification and Validation&lt;&#x2F;h3&gt;
&lt;p&gt;Implementation errors are mitigated with &lt;em&gt;verification&lt;&#x2F;em&gt;, i.e. asking the question, &quot;did we build the thing correctly?&quot; Design errors are mitigated with &lt;em&gt;validation&lt;&#x2F;em&gt;, i.e. asking &quot;are we building the correct thing?&quot;&lt;&#x2F;p&gt;
&lt;p&gt;In &lt;a href=&quot;&#x2F;2024&#x2F;01&#x2F;a-design-is-a-mold-for-code&#x2F;&quot;&gt;A Design is a Mold for Code&lt;&#x2F;a&gt;, I show with examples the distinction between design and code.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;danger-presbyopic-causal-chains&quot;&gt;Danger: Presbyopic causal chains&lt;&#x2F;h2&gt;
&lt;p&gt;The benevolent intent of the phrase &quot;software never fails&quot; is to encourage us to look beyond proximal causes of failure and seek distal causes, but it goes too far. A high-quality report on a commercial airliner crash will include both: the plane had a problem, &lt;em&gt;and&lt;&#x2F;em&gt; a long causal chain of lax training, spotty maintenance, regulatory capture, and eroded safety culture from the very top allowed the problem to cascade into a catastrophe.&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Presbyopia&lt;&#x2F;em&gt; is the inability of the eye to focus clearly on close objects&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and I&#x27;m concerned that people who believe &quot;software never fails&quot; will look for distant causes of failure while allowing the immediate ones to blur into invisibility.&lt;&#x2F;p&gt;
&lt;p&gt;What is a causal chain? Many of us have had or heard a conversation with a young child that went something like this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Child: &quot;Why can&#x27;t I play on the grass?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;You: &quot;Because it&#x27;s wet, sweetie&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because I turned the valve on.&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because the grass is turning brown&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because we live in New Mexico&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because your great-grandfather moved here in the &#x27;40s&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why?&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Because the Wright Brothers invented the airplane. This made the Japanese attack on Pearl Harbor possible, which brought the USA into World War 2, which resulted in the founding of Los Alamos in 1943.&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As you can see, the more removed a cause is from its effect, the less plausible its association and the &lt;strong&gt;less actionable any mitigation or prevention&lt;&#x2F;strong&gt;. A proximal cause to my grass being wet is &lt;em&gt;I turned the valve on&lt;&#x2F;em&gt;. A distal cause is &lt;em&gt;the Wright Brothers invented the airplane&lt;&#x2F;em&gt;. Removing the middle links from the chain of causality reveals the absurdity: &quot;You can&#x27;t play outside because airplanes exist.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;If we believe a claim like &quot;software never fails&quot;, we sever the proximal links in the causal chain. We&#x27;ll cast a wide net looking for monsters in other castles but not the ones under our beds.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fix-the-4-part-filter-for-relevant-causes&quot;&gt;Fix: The 4-part filter for relevant causes&lt;&#x2F;h3&gt;
&lt;p&gt;Use this framework to discover relevant distal causes of failure without ignoring proximal causes. When engineers analyze why a failure happened or could happen, they privilege causes that:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;are proximal&lt;&#x2F;strong&gt;, physically or temporally. My hand turned the valve, and a few seconds later the grass got wet. The Pearl Harbor attack and invention of the airplane happened long ago and far away.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;exhibit agency&lt;&#x2F;strong&gt;. I &lt;em&gt;chose&lt;&#x2F;em&gt; to turn the valve. I didn&#x27;t choose where to found Los Alamos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;are controllable&lt;&#x2F;strong&gt;. Turning a valve is an event I can control (separately from choosing to). There&#x27;s no action I can take about historical wars.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;are normal and expected&lt;&#x2F;strong&gt;. Turning a valve is a common event. Wars aren&#x27;t.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;danger-latent-defects-ignored&quot;&gt;Danger: Latent defects ignored&lt;&#x2F;h2&gt;
&lt;p&gt;Bad metaphors breed bad decisions. What might actually happens if a software team internalizes the idea that &quot;software never fails&quot;?&lt;&#x2F;p&gt;
&lt;p&gt;If a team thinks software never fails, they might not allow themselves to believe their software could contain latent defects. They might think, &quot;It works today, so it will always work.&quot; In their false confidence, they might skip testing, breeze through code review, dismiss bug reports, or skip error handling. This may let them ship quickly at first only to get bogged down fixing bugs later. In the meantime, hopefully those bugs don&#x27;t cause harm to anyone.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fix-use-better-metaphors&quot;&gt;Fix: Use better metaphors&lt;&#x2F;h3&gt;
&lt;p&gt;In &lt;a href=&quot;&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;It&#x27;s Not Tech Debt. It&#x27;s Tech Risk&lt;&#x2F;a&gt;, I show that the metaphors we use shape how seriously we take software problems.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;danger-eroded-alignment-with-nonexperts&quot;&gt;Danger: Eroded alignment with nonexperts&lt;&#x2F;h2&gt;
&lt;p&gt;The phrase &quot;software never fails&quot; communicates the wrong thing to non-practitioners. When a politician or mid-level manager hears &quot;X never fails&quot;, they hear, &quot;We never have to think about that.&quot; They don&#x27;t share your nuanced understanding. This mindset could lead to poor business decisions, for example when leadership says &quot;ship it&quot; or downsizes the QA team. It could also lead to public harm when an elected or appointed official makes an misguided public policy decision.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fix-use-different-words&quot;&gt;Fix: Use different words&lt;&#x2F;h3&gt;
&lt;p&gt;A professional structural engineer would never say &quot;bridges never fail&quot;. Instead of propagating incorrect absolute statements like &quot;software never fails&quot;, let your word choices build, not erode, alignment between you and decision makers. For guidance on translating technical risks into terms leadership will prioritize, see my post &lt;a href=&quot;&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;&quot;&gt;Tech Risk is Business Risk&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-to-do-instead&quot;&gt;What to do instead&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;change-your-mindset&quot;&gt;Change your Mindset&lt;&#x2F;h2&gt;
&lt;p&gt;When analyzing software failures:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Use precise definitions of failure and definitions appropriate for software.&lt;&#x2F;li&gt;
&lt;li&gt;Distinguish between design and implementation. Remember validation and verification.&lt;&#x2F;li&gt;
&lt;li&gt;Use my 4-part filter for relevant causes.&lt;&#x2F;li&gt;
&lt;li&gt;Use metaphors that discourage hubris and language that communicates the right things to leaders.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;concrete-actions&quot;&gt;Concrete actions&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Pretend your next commit message or PR description will be printed &lt;strong&gt;on the front page of the &lt;em&gt;New York Times&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;. How will your word choices come across to your manager, CEO, elected government officials, or to the public?&lt;&#x2F;li&gt;
&lt;li&gt;In your next code review this week, &lt;strong&gt;identify one assumption&lt;&#x2F;strong&gt; about the environment that could become invalid. Are there places where the code assumes &quot;this will always work&quot;?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Bookmark this page.&lt;&#x2F;strong&gt; The next time a postmortem gets off track, share it.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Start a discussion&lt;&#x2F;strong&gt;. In e.g. Slack, Teams, or another collaboration tool, ask &quot;how do we distinguish design errors from implementation errors?&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;Saying a program can&#x27;t fail because its deployed bytecode doesn&#x27;t change is like saying the Francis Scott Key Bridge didn&#x27;t fail because its steel molecules obeyed the laws of physics. One might object, &quot;Yo dawg, the bridge was destroyed by an external force, not internal failure&quot;, and this is exactly my point about software. Programs eventually experience external forces  that their designers didn&#x27;t anticipate. If we excuse the bridge because it wasn&#x27;t designed to withstand a collision with a modern container ship, then we must equally excuse software that fails when its environment changes. The question is how &lt;em&gt;designs can anticipate and accommodate these stresses&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Francis_Scott_Key_Bridge_collapse&quot;&gt;Francis Scott Key Bridge Collapse&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;entropicthoughts.com&#x2F;software-never-fails&quot;&gt;Software Never Fails&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Hyatt_Regency_walkway_collapse&quot;&gt;Hyatt Regency walkway collapse&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;admiralcloudberg.medium.com&#x2F;trial-by-fire-the-crash-of-aeroflot-flight-1492-ee61cebcf6ec&quot;&gt;Trial by Fire: The crash of Aeroflot flight 1492&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Presbyopia&quot;&gt;Presbyopia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;related-reading&quot;&gt;Related reading&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2025&#x2F;12&#x2F;when-the-machine-metaphor-breaks-down&#x2F;&quot;&gt;When the Machine Metaphor Breaks Down&lt;&#x2F;a&gt;. How software failures differ from hardware failures&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2024&#x2F;01&#x2F;a-design-is-a-mold-for-code&#x2F;&quot;&gt;A Design is a Mold for Code&lt;&#x2F;a&gt;. Why design precedes and shapes code, not the reverse&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;It&#x27;s Not Tech Debt. It&#x27;s Tech Risk.&lt;&#x2F;a&gt;. How the metaphors we use shape how seriously we take software problems&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;&quot;&gt;Tech Risk is Business Risk&lt;&#x2F;a&gt;. Translating technical risks into terms leadership will prioritize&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;&quot;&gt;It&#x27;s Time to License Software Engineering&lt;&#x2F;a&gt;. Why society should train and recognize professional software engineers&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>When the Machine Metaphor Breaks Down</title>
        <published>2025-12-11T00:00:00+00:00</published>
        <updated>2025-12-11T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;12&#x2F;when-the-machine-metaphor-breaks-down&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;12&#x2F;when-the-machine-metaphor-breaks-down&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;While it&#x27;s rare to see a sixty-year old car still running, COBOL is 65 years old and processes 95% of today&#x27;s ATM transactions&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The world is full of critical infrastructure running on ancient software, so it&#x27;s important to understand how software can fail.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Computer people have an old tradition of calling computers machines:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The ACM is the &lt;em&gt;Association for Computing Machinery&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Alan Turing&#x27;s paper &quot;Computing Machinery and Intelligence&quot; introduced the Turing test&lt;&#x2F;li&gt;
&lt;li&gt;We all recognize phrases like &quot;machine code&quot;, &quot;machine learning&quot;, and &quot;virtual machine&quot;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Edsger Dijkstra was an influential computer scientist and highly active in the ACM, but he took issue with this organization&#x27;s name. In 1988 he wrote&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; that computers represent a &quot;radical novelty&quot; and &quot;sharp discontinuity&quot; compared to anything before. Computers are not better typewriters.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s human to try and understand new things in terms of things we &lt;a href=&quot;&#x2F;2024&#x2F;01&#x2F;grounded-programming-pedagogy&#x2F;&quot;&gt;already understand&lt;&#x2F;a&gt;, but programs are very different than machines. When we try to apply models of hardware failure to software, we risk not addressing software&#x27;s unique failure modes.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;how-software-and-hardware-fail-differently&quot;&gt;How software and hardware fail differently&lt;&#x2F;h1&gt;
&lt;p&gt;Entropy spares nothing. A ball bearing wears out over time, and though a program never deteriorates, it can become obsolete in a changing world: just think of Adobe Flash or Java applets. Software developers are often asked keep old programs working, but even skillful and careful maintenance can make code messy and hard to understand.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;failure_rates_over_time.webp&quot; alt=&quot;A chart showing failure rates over time for hardware and software&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Failure rates over time for hardware and software. Software looks very different than hardware.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;a-model-of-hardware-failure&quot;&gt;A model of hardware failure&lt;&#x2F;h2&gt;
&lt;p&gt;The blue line in the chart above looks like a bathtub, which is why it&#x27;s called a bathtub curve&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. It shows the lifespan of a typical machine. In the early days, a lot of devices experience &quot;infant mortality&quot;. Perhaps a batch has a manufacturing defect or is damaged in transit. For those that survive, there is a long steady period of useful life. Then, the devices fail more frequently as their physical condition deteriorates.&lt;&#x2F;p&gt;
&lt;p&gt;For example, consider hard disks. Not solid state drives, but the old kind with spinning platters:&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;hdd.jpg&quot; alt=&quot;A hard disk drive&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A hard disk drive. The top platter and actuator arm are visible.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;A hard disk drive has software running on it called &quot;firmware&quot;, a term of art for software that interacts with hardware and will rarely be updated in the field. Hard disks also have lots of physical parts that can break: motors, bearings, actuator heads, and platters. If any of these fail, the disk has has failed and you can&#x27;t read or write data. Most disk manufacturers publish a number called MTBF&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; which predicts about how long you can expect the disk to work. It&#x27;s reasonable to expect a hard disk to survive continuous service for about three years. If you keep using it after that, you&#x27;re on borrowed time: you&#x27;re on the right side of the bathtub curve.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-model-of-software-failure&quot;&gt;A model of software failure&lt;&#x2F;h2&gt;
&lt;p&gt;Looking back at the chart, the red line tells a story of software failure rates over time.&lt;&#x2F;p&gt;
 &lt;!----&gt;


&lt;div
  class=&quot;my-4 flex flex-col rounded-lg bg-[var(--admonition-bg)]&quot;
  style=&quot;--admonition-bg: rgba(68, 138, 255, 0.1)&quot;
&gt;
  &lt;div class=&quot;flex items-center rounded-t-lg bg-[var(--admonition-bg)] p-1&quot;&gt;
    &lt;div
      class=&quot;mx-2 h-4 w-4 text-[0] [background:var(--url)_center_center_no-repeat] dark:invert&quot;
      style=&quot;--url: url(.&#x2F;icons&#x2F;note.svg)&quot;
    &gt;
      note
    &lt;&#x2F;div&gt;
    &lt;span&gt;&lt;strong&gt;note&lt;&#x2F;strong&gt;&lt;&#x2F;span&gt;
  &lt;&#x2F;div&gt;
  &lt;div class=&quot;pl-4&quot;&gt;&lt;p&gt;The term &quot;software&quot; is ambiguous. It can refer to a program or its source code. A program doesn&#x27;t wear out or deteriorate, but its code can. Here, we&#x27;re looking at an evolution of a program deployed over time from a changing codebase.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;stabilizing-phase&quot;&gt;Stabilizing Phase&lt;&#x2F;h3&gt;
&lt;p&gt;Like hardware, there is an &quot;infant mortality&quot; phase. New programs tend to be buggy. The customers complain and the team scrambles to fix the bugs. Once the bugs are fixed, the program enters a stable phase with relatively few failures.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;maintenance-phase&quot;&gt;Maintenance Phase&lt;&#x2F;h3&gt;
&lt;p&gt;It continues that way until the boss walks in and says, &quot;We need to add Feature X by Monday&quot;. The software team rushes to ship feature X by Monday. They succeed, but in their rush they add some new bugs. (This is why I avoid revision-zero software, e.g. I skipped macOS 15.7.0 and waited 14 days for 15.7.1). Customers complain, the team scrambles and fixes the bugs, and the waters calm down.&lt;&#x2F;p&gt;
&lt;p&gt;A while later, NIST announces a critical security vulnerability in one of the code&#x27;s dependencies. The team scrambles to update or replace the dependency. In doing so, they create new bugs. Customers complain, the team scrambles to fix them, and the waters settle down again.&lt;&#x2F;p&gt;
&lt;p&gt;This happens many more times, and all the while something ominous is happening: the &quot;floor&quot; of defects is rising. The team can never get them down to how it was in the beginning before all of the new features and security patches. The code also doesn&#x27;t feel as clean. It&#x27;s messy and hard to understand. Its internal quality is deteriorating. A pile of quick fixes has obfuscated the elegance of the original design. Engineers leave, and new ones arrive who haven&#x27;t internalized the design. Some people call all of this &quot;tech debt&quot;, but &lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;tech risk&lt;&#x2F;a&gt;  is a better metaphor.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;end-of-life-phase&quot;&gt;End-of-life Phase&lt;&#x2F;h3&gt;
&lt;p&gt;Eventually maintenance becomes too expensive, and the program doesn&#x27;t receive any more updates. It is announced deprecated or out-of-support and eventually removed from service.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;entropy-affects-software-differently-than-hardware&quot;&gt;Entropy affects software differently than hardware&lt;&#x2F;h2&gt;
&lt;p&gt;Notice that while hardware fails due to changes in its internal state, a program succumbs to entropy even if it doesn&#x27;t change. Its shifting environment does the job. Maintaining software to accommodate its shifting environment postpones its demise but does not prevent it. As one of the greats in computing wrote:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Program maintenance is an entropy-increasing process, and even its most skillful execution only delays the subsidence of the system into unfixable obsolescence.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;-- Fred Brooks, The Mythical Man-Month, 1975&lt;&#x2F;p&gt;
&lt;h1 id=&quot;how-software-and-hardware-fail-alike&quot;&gt;How software and hardware fail alike&lt;&#x2F;h1&gt;
&lt;p&gt;Software and hardware share some common notions of failure.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;failure_trees.jpg&quot; alt=&quot;The tree swing cartoon&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    We&#x27;ve all seen this cartoon before. It takes outstanding communication to keep the spec, implementation, and user expectations in sync. This is exacerbated in situations where the user is not the customer or the designer is not the implementer.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;failure-to-meet-requirements&quot;&gt;Failure to meet requirements&lt;&#x2F;h2&gt;
&lt;p&gt;A requirements-centric of failure view says that &lt;em&gt;a system fails when it deviates from specified requirements&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The IEEE defines failure as &quot;the inability of a system or component to perform its required functions within specified performance requirements.&quot;&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;  It distinguishes between a &lt;em&gt;fault&lt;&#x2F;em&gt; (what most of us would call a &lt;em&gt;bug&lt;&#x2F;em&gt; or &lt;em&gt;defect&lt;&#x2F;em&gt;) and a &lt;em&gt;failure&lt;&#x2F;em&gt;, which is the externally observable consequence.&lt;&#x2F;li&gt;
&lt;li&gt;If your mind has trouble distinguishing between fault and failure, consider &lt;em&gt;latent faults&lt;&#x2F;em&gt;, which are bugs that are present in the software but not causing any observable failures.
&lt;ul&gt;
&lt;li&gt;Latent faults often exist from the beginning but inspection (code review for software) and testing don&#x27;t reveal them.&lt;&#x2F;li&gt;
&lt;li&gt;Examples for hardware:
&lt;ul&gt;
&lt;li&gt;The O-rings of the Challenger solid rocket boosters had a &lt;em&gt;latent fault&lt;&#x2F;em&gt; that caused them to deviate from their &lt;em&gt;required&lt;&#x2F;em&gt; elasticity at low temperatures, resulting in the &lt;em&gt;failure&lt;&#x2F;em&gt; of the seal to contain hot combustion gases.&lt;&#x2F;li&gt;
&lt;li&gt;The rivets on the Titanic had a &lt;em&gt;latent fault&lt;&#x2F;em&gt;: they exceeded the &lt;em&gt;required&lt;&#x2F;em&gt; maximum level of slag impurity. This made them brittle in the freezing North Atlantic waters. When ice contacted the hull plates, the rivets sheared rather than deformed, a &lt;em&gt;failure&lt;&#x2F;em&gt; which caused ingress of seawater.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;failure-to-meet-expectations&quot;&gt;Failure to meet expectations&lt;&#x2F;h2&gt;
&lt;p&gt;A user-centric view of failure says that &lt;em&gt;a system fails if it does does not meet user expectations&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;This broader view pits the end-user&#x27;s expectations against the design and implementation.&lt;&#x2F;li&gt;
&lt;li&gt;This kind of failure is mitigated with early and iterative validation, by asking users to try it and give feedback.&lt;&#x2F;li&gt;
&lt;li&gt;For software:
&lt;ul&gt;
&lt;li&gt;The design may have said &quot;make the button green&quot;, and the button background may factually be &lt;code class=&quot;not-prose&quot; style=&quot;background-color: #00FF00; color: #000000;&quot;&gt;#00FF00&lt;&#x2F;code&gt;, but if the user was expecting blue, the software has failed.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;For hardware:
&lt;ul&gt;
&lt;li&gt;The original Segway was a well-functioning self-balancing vehicle. People &lt;em&gt;expected&lt;&#x2F;em&gt; it to improve their urban transit. Instead, they got expensive scooters that attract ridicule. The device &lt;em&gt;failed&lt;&#x2F;em&gt; to meet customer expectations. The Segway brand now emphasizes traditional scooters and e-bikes.&lt;&#x2F;li&gt;
&lt;li&gt;The Concorde jet met its spec: it achieved supersonic commercial flight. Passengers &lt;em&gt;expected&lt;&#x2F;em&gt; fast, worldwide travel. Instead they got limited routes and extremely expensive fares. The jet &lt;em&gt;failed&lt;&#x2F;em&gt; to find product-market fit. The last one was made in 1979.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The processes for identifying these two kinds of failures are often called &lt;strong&gt;verification&lt;&#x2F;strong&gt; (&quot;Did we built the thing right?&quot;) and &lt;strong&gt;validation&lt;&#x2F;strong&gt; (&quot;Did we build the right thing?&quot;).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;failure-to-avoid-hazard-or-loss&quot;&gt;Failure to avoid hazard or loss&lt;&#x2F;h2&gt;
&lt;p&gt;There is a third, safety-centric view which says that &lt;em&gt;a system fails if it contributes to a hazard or loss&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;This perspective is more common in safety-critical systems and public infrastructure.&lt;&#x2F;li&gt;
&lt;li&gt;For software:
&lt;ul&gt;
&lt;li&gt;The Boeing 737 MAX MCAS software functioned as designed when the single angle of attack sensor failed: it thought the plane was in a nose-up attitude, so it commanded the nose to go down. While a requirement-centric view would say the software functioned as designed in this situation, nobody expects a plane to take an uncommanded nose dive. The failures are the two ground collisions which killed 346 people.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;For hardware:
&lt;ul&gt;
&lt;li&gt;We say a bridge failed if it collapses, even if it&#x27;s because a container ship collided into it, a load it was never required or expected to withstand.&lt;&#x2F;li&gt;
&lt;li&gt;The towers of the World Trade Center collapsed after airliners flew into them and the inferno weakened its metal structure. The doomed occupants may have hoped the buildings would stay up, but nobody &lt;em&gt;expected&lt;&#x2F;em&gt; it, and no building code &lt;em&gt;required&lt;&#x2F;em&gt; it. Still, nobody challenges a statement like, &quot;the structure failed.&quot;&lt;&#x2F;li&gt;
&lt;li&gt;For space shuttle Challenger, the failure from this perspective is not the seal but the loss of crew and vehicle.&lt;&#x2F;li&gt;
&lt;li&gt;For Titanic, the failure from this perspective is not the rivets or hull plating but the hazard of the ship flooding with seawater and the resulting tragic loss of life.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;Over time, software and hardware fail for different reasons:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Hardware&lt;&#x2F;em&gt; fails as its internal physical condition deteriorates.&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;em&gt;program&lt;&#x2F;em&gt; fails as it environment changes, invalidating its assumptions and preconditions.&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;em&gt;codebase&lt;&#x2F;em&gt; fails as its design integrity dissolves and defect count rises.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In an instant of time, software and hardware fail for the same reasons:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Sins of commission&lt;&#x2F;em&gt;: The system did something it was required not to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Sins of omission&lt;&#x2F;em&gt;: The system didn&#x27;t do something it was required to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Unmet expectations&lt;&#x2F;em&gt;: The user was surprised the system did or didn&#x27;t do something.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Compromised safety&lt;&#x2F;em&gt;: A hazard or loss occurred and the system was involved, &lt;em&gt;even if&lt;&#x2F;em&gt; it performed as required and expected.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I plan to write more about software failures. See you soon.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;archive.md&#x2F;aZwgc&quot;&gt;IBM: What is COBOL?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.cs.utexas.edu&#x2F;~EWD&#x2F;transcriptions&#x2F;EWD10xx&#x2F;EWD1036.html&quot;&gt;Dijkstra: On the cruelty of really teaching computing science&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bathtub_curve&quot;&gt;Wikipedia: Bathtub curve&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mean_time_between_failures&quot;&gt;Wikipedia: Mean Time Between Failures&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.informatik.htw-dresden.de&#x2F;~hauptman&#x2F;SEI&#x2F;IEEE_Standard_Glossary_of_Software_Engineering_Terminology%20.pdf&quot;&gt;IEEE 610.12 Standard Glossary of Software Engineering Terminology&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;12&#x2F;when-the-machine-metaphor-breaks-down&#x2F;">&lt;p&gt;&lt;em&gt;While it&#x27;s rare to see a sixty-year old car still running, COBOL is 65 years old and processes 95% of today&#x27;s ATM transactions&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The world is full of critical infrastructure running on ancient software, so it&#x27;s important to understand how software can fail.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Computer people have an old tradition of calling computers machines:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The ACM is the &lt;em&gt;Association for Computing Machinery&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Alan Turing&#x27;s paper &quot;Computing Machinery and Intelligence&quot; introduced the Turing test&lt;&#x2F;li&gt;
&lt;li&gt;We all recognize phrases like &quot;machine code&quot;, &quot;machine learning&quot;, and &quot;virtual machine&quot;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Edsger Dijkstra was an influential computer scientist and highly active in the ACM, but he took issue with this organization&#x27;s name. In 1988 he wrote&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; that computers represent a &quot;radical novelty&quot; and &quot;sharp discontinuity&quot; compared to anything before. Computers are not better typewriters.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s human to try and understand new things in terms of things we &lt;a href=&quot;&#x2F;2024&#x2F;01&#x2F;grounded-programming-pedagogy&#x2F;&quot;&gt;already understand&lt;&#x2F;a&gt;, but programs are very different than machines. When we try to apply models of hardware failure to software, we risk not addressing software&#x27;s unique failure modes.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;how-software-and-hardware-fail-differently&quot;&gt;How software and hardware fail differently&lt;&#x2F;h1&gt;
&lt;p&gt;Entropy spares nothing. A ball bearing wears out over time, and though a program never deteriorates, it can become obsolete in a changing world: just think of Adobe Flash or Java applets. Software developers are often asked keep old programs working, but even skillful and careful maintenance can make code messy and hard to understand.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;failure_rates_over_time.webp&quot; alt=&quot;A chart showing failure rates over time for hardware and software&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Failure rates over time for hardware and software. Software looks very different than hardware.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;a-model-of-hardware-failure&quot;&gt;A model of hardware failure&lt;&#x2F;h2&gt;
&lt;p&gt;The blue line in the chart above looks like a bathtub, which is why it&#x27;s called a bathtub curve&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. It shows the lifespan of a typical machine. In the early days, a lot of devices experience &quot;infant mortality&quot;. Perhaps a batch has a manufacturing defect or is damaged in transit. For those that survive, there is a long steady period of useful life. Then, the devices fail more frequently as their physical condition deteriorates.&lt;&#x2F;p&gt;
&lt;p&gt;For example, consider hard disks. Not solid state drives, but the old kind with spinning platters:&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;hdd.jpg&quot; alt=&quot;A hard disk drive&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A hard disk drive. The top platter and actuator arm are visible.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;A hard disk drive has software running on it called &quot;firmware&quot;, a term of art for software that interacts with hardware and will rarely be updated in the field. Hard disks also have lots of physical parts that can break: motors, bearings, actuator heads, and platters. If any of these fail, the disk has has failed and you can&#x27;t read or write data. Most disk manufacturers publish a number called MTBF&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; which predicts about how long you can expect the disk to work. It&#x27;s reasonable to expect a hard disk to survive continuous service for about three years. If you keep using it after that, you&#x27;re on borrowed time: you&#x27;re on the right side of the bathtub curve.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-model-of-software-failure&quot;&gt;A model of software failure&lt;&#x2F;h2&gt;
&lt;p&gt;Looking back at the chart, the red line tells a story of software failure rates over time.&lt;&#x2F;p&gt;
 &lt;!----&gt;


&lt;div
  class=&quot;my-4 flex flex-col rounded-lg bg-[var(--admonition-bg)]&quot;
  style=&quot;--admonition-bg: rgba(68, 138, 255, 0.1)&quot;
&gt;
  &lt;div class=&quot;flex items-center rounded-t-lg bg-[var(--admonition-bg)] p-1&quot;&gt;
    &lt;div
      class=&quot;mx-2 h-4 w-4 text-[0] [background:var(--url)_center_center_no-repeat] dark:invert&quot;
      style=&quot;--url: url(.&#x2F;icons&#x2F;note.svg)&quot;
    &gt;
      note
    &lt;&#x2F;div&gt;
    &lt;span&gt;&lt;strong&gt;note&lt;&#x2F;strong&gt;&lt;&#x2F;span&gt;
  &lt;&#x2F;div&gt;
  &lt;div class=&quot;pl-4&quot;&gt;&lt;p&gt;The term &quot;software&quot; is ambiguous. It can refer to a program or its source code. A program doesn&#x27;t wear out or deteriorate, but its code can. Here, we&#x27;re looking at an evolution of a program deployed over time from a changing codebase.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;stabilizing-phase&quot;&gt;Stabilizing Phase&lt;&#x2F;h3&gt;
&lt;p&gt;Like hardware, there is an &quot;infant mortality&quot; phase. New programs tend to be buggy. The customers complain and the team scrambles to fix the bugs. Once the bugs are fixed, the program enters a stable phase with relatively few failures.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;maintenance-phase&quot;&gt;Maintenance Phase&lt;&#x2F;h3&gt;
&lt;p&gt;It continues that way until the boss walks in and says, &quot;We need to add Feature X by Monday&quot;. The software team rushes to ship feature X by Monday. They succeed, but in their rush they add some new bugs. (This is why I avoid revision-zero software, e.g. I skipped macOS 15.7.0 and waited 14 days for 15.7.1). Customers complain, the team scrambles and fixes the bugs, and the waters calm down.&lt;&#x2F;p&gt;
&lt;p&gt;A while later, NIST announces a critical security vulnerability in one of the code&#x27;s dependencies. The team scrambles to update or replace the dependency. In doing so, they create new bugs. Customers complain, the team scrambles to fix them, and the waters settle down again.&lt;&#x2F;p&gt;
&lt;p&gt;This happens many more times, and all the while something ominous is happening: the &quot;floor&quot; of defects is rising. The team can never get them down to how it was in the beginning before all of the new features and security patches. The code also doesn&#x27;t feel as clean. It&#x27;s messy and hard to understand. Its internal quality is deteriorating. A pile of quick fixes has obfuscated the elegance of the original design. Engineers leave, and new ones arrive who haven&#x27;t internalized the design. Some people call all of this &quot;tech debt&quot;, but &lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;tech risk&lt;&#x2F;a&gt;  is a better metaphor.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;end-of-life-phase&quot;&gt;End-of-life Phase&lt;&#x2F;h3&gt;
&lt;p&gt;Eventually maintenance becomes too expensive, and the program doesn&#x27;t receive any more updates. It is announced deprecated or out-of-support and eventually removed from service.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;entropy-affects-software-differently-than-hardware&quot;&gt;Entropy affects software differently than hardware&lt;&#x2F;h2&gt;
&lt;p&gt;Notice that while hardware fails due to changes in its internal state, a program succumbs to entropy even if it doesn&#x27;t change. Its shifting environment does the job. Maintaining software to accommodate its shifting environment postpones its demise but does not prevent it. As one of the greats in computing wrote:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Program maintenance is an entropy-increasing process, and even its most skillful execution only delays the subsidence of the system into unfixable obsolescence.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;-- Fred Brooks, The Mythical Man-Month, 1975&lt;&#x2F;p&gt;
&lt;h1 id=&quot;how-software-and-hardware-fail-alike&quot;&gt;How software and hardware fail alike&lt;&#x2F;h1&gt;
&lt;p&gt;Software and hardware share some common notions of failure.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;failure_trees.jpg&quot; alt=&quot;The tree swing cartoon&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    We&#x27;ve all seen this cartoon before. It takes outstanding communication to keep the spec, implementation, and user expectations in sync. This is exacerbated in situations where the user is not the customer or the designer is not the implementer.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;failure-to-meet-requirements&quot;&gt;Failure to meet requirements&lt;&#x2F;h2&gt;
&lt;p&gt;A requirements-centric of failure view says that &lt;em&gt;a system fails when it deviates from specified requirements&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The IEEE defines failure as &quot;the inability of a system or component to perform its required functions within specified performance requirements.&quot;&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;  It distinguishes between a &lt;em&gt;fault&lt;&#x2F;em&gt; (what most of us would call a &lt;em&gt;bug&lt;&#x2F;em&gt; or &lt;em&gt;defect&lt;&#x2F;em&gt;) and a &lt;em&gt;failure&lt;&#x2F;em&gt;, which is the externally observable consequence.&lt;&#x2F;li&gt;
&lt;li&gt;If your mind has trouble distinguishing between fault and failure, consider &lt;em&gt;latent faults&lt;&#x2F;em&gt;, which are bugs that are present in the software but not causing any observable failures.
&lt;ul&gt;
&lt;li&gt;Latent faults often exist from the beginning but inspection (code review for software) and testing don&#x27;t reveal them.&lt;&#x2F;li&gt;
&lt;li&gt;Examples for hardware:
&lt;ul&gt;
&lt;li&gt;The O-rings of the Challenger solid rocket boosters had a &lt;em&gt;latent fault&lt;&#x2F;em&gt; that caused them to deviate from their &lt;em&gt;required&lt;&#x2F;em&gt; elasticity at low temperatures, resulting in the &lt;em&gt;failure&lt;&#x2F;em&gt; of the seal to contain hot combustion gases.&lt;&#x2F;li&gt;
&lt;li&gt;The rivets on the Titanic had a &lt;em&gt;latent fault&lt;&#x2F;em&gt;: they exceeded the &lt;em&gt;required&lt;&#x2F;em&gt; maximum level of slag impurity. This made them brittle in the freezing North Atlantic waters. When ice contacted the hull plates, the rivets sheared rather than deformed, a &lt;em&gt;failure&lt;&#x2F;em&gt; which caused ingress of seawater.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;failure-to-meet-expectations&quot;&gt;Failure to meet expectations&lt;&#x2F;h2&gt;
&lt;p&gt;A user-centric view of failure says that &lt;em&gt;a system fails if it does does not meet user expectations&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;This broader view pits the end-user&#x27;s expectations against the design and implementation.&lt;&#x2F;li&gt;
&lt;li&gt;This kind of failure is mitigated with early and iterative validation, by asking users to try it and give feedback.&lt;&#x2F;li&gt;
&lt;li&gt;For software:
&lt;ul&gt;
&lt;li&gt;The design may have said &quot;make the button green&quot;, and the button background may factually be &lt;code class=&quot;not-prose&quot; style=&quot;background-color: #00FF00; color: #000000;&quot;&gt;#00FF00&lt;&#x2F;code&gt;, but if the user was expecting blue, the software has failed.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;For hardware:
&lt;ul&gt;
&lt;li&gt;The original Segway was a well-functioning self-balancing vehicle. People &lt;em&gt;expected&lt;&#x2F;em&gt; it to improve their urban transit. Instead, they got expensive scooters that attract ridicule. The device &lt;em&gt;failed&lt;&#x2F;em&gt; to meet customer expectations. The Segway brand now emphasizes traditional scooters and e-bikes.&lt;&#x2F;li&gt;
&lt;li&gt;The Concorde jet met its spec: it achieved supersonic commercial flight. Passengers &lt;em&gt;expected&lt;&#x2F;em&gt; fast, worldwide travel. Instead they got limited routes and extremely expensive fares. The jet &lt;em&gt;failed&lt;&#x2F;em&gt; to find product-market fit. The last one was made in 1979.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The processes for identifying these two kinds of failures are often called &lt;strong&gt;verification&lt;&#x2F;strong&gt; (&quot;Did we built the thing right?&quot;) and &lt;strong&gt;validation&lt;&#x2F;strong&gt; (&quot;Did we build the right thing?&quot;).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;failure-to-avoid-hazard-or-loss&quot;&gt;Failure to avoid hazard or loss&lt;&#x2F;h2&gt;
&lt;p&gt;There is a third, safety-centric view which says that &lt;em&gt;a system fails if it contributes to a hazard or loss&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;This perspective is more common in safety-critical systems and public infrastructure.&lt;&#x2F;li&gt;
&lt;li&gt;For software:
&lt;ul&gt;
&lt;li&gt;The Boeing 737 MAX MCAS software functioned as designed when the single angle of attack sensor failed: it thought the plane was in a nose-up attitude, so it commanded the nose to go down. While a requirement-centric view would say the software functioned as designed in this situation, nobody expects a plane to take an uncommanded nose dive. The failures are the two ground collisions which killed 346 people.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;For hardware:
&lt;ul&gt;
&lt;li&gt;We say a bridge failed if it collapses, even if it&#x27;s because a container ship collided into it, a load it was never required or expected to withstand.&lt;&#x2F;li&gt;
&lt;li&gt;The towers of the World Trade Center collapsed after airliners flew into them and the inferno weakened its metal structure. The doomed occupants may have hoped the buildings would stay up, but nobody &lt;em&gt;expected&lt;&#x2F;em&gt; it, and no building code &lt;em&gt;required&lt;&#x2F;em&gt; it. Still, nobody challenges a statement like, &quot;the structure failed.&quot;&lt;&#x2F;li&gt;
&lt;li&gt;For space shuttle Challenger, the failure from this perspective is not the seal but the loss of crew and vehicle.&lt;&#x2F;li&gt;
&lt;li&gt;For Titanic, the failure from this perspective is not the rivets or hull plating but the hazard of the ship flooding with seawater and the resulting tragic loss of life.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;Over time, software and hardware fail for different reasons:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Hardware&lt;&#x2F;em&gt; fails as its internal physical condition deteriorates.&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;em&gt;program&lt;&#x2F;em&gt; fails as it environment changes, invalidating its assumptions and preconditions.&lt;&#x2F;li&gt;
&lt;li&gt;A &lt;em&gt;codebase&lt;&#x2F;em&gt; fails as its design integrity dissolves and defect count rises.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In an instant of time, software and hardware fail for the same reasons:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Sins of commission&lt;&#x2F;em&gt;: The system did something it was required not to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Sins of omission&lt;&#x2F;em&gt;: The system didn&#x27;t do something it was required to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Unmet expectations&lt;&#x2F;em&gt;: The user was surprised the system did or didn&#x27;t do something.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Compromised safety&lt;&#x2F;em&gt;: A hazard or loss occurred and the system was involved, &lt;em&gt;even if&lt;&#x2F;em&gt; it performed as required and expected.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I plan to write more about software failures. See you soon.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;archive.md&#x2F;aZwgc&quot;&gt;IBM: What is COBOL?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.cs.utexas.edu&#x2F;~EWD&#x2F;transcriptions&#x2F;EWD10xx&#x2F;EWD1036.html&quot;&gt;Dijkstra: On the cruelty of really teaching computing science&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bathtub_curve&quot;&gt;Wikipedia: Bathtub curve&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mean_time_between_failures&quot;&gt;Wikipedia: Mean Time Between Failures&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.informatik.htw-dresden.de&#x2F;~hauptman&#x2F;SEI&#x2F;IEEE_Standard_Glossary_of_Software_Engineering_Terminology%20.pdf&quot;&gt;IEEE 610.12 Standard Glossary of Software Engineering Terminology&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Who wins in an Arms Race?</title>
        <published>2025-10-28T00:00:00+00:00</published>
        <updated>2025-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;who-wins-in-an-arms-race&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;who-wins-in-an-arms-race&#x2F;</id>
        <summary type="html">&lt;p&gt;In 2016, Nike shook up the sport of road running with its elite &lt;em&gt;Vaporfly 4%&lt;&#x2F;em&gt; shoe. This shoe factually speeds up elite running times by 3-4% &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, which translates to 4-5 minutes over a 2 hour 30 minute marathon, an impassable advantage.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;vaporfly4.jpg&quot; alt=&quot;The Nike Vaporfly 4%&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    The Nike Vaporfly 4%
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;supershoes-make-you-lose&quot;&gt;Supershoes make you lose&lt;&#x2F;h1&gt;
&lt;p&gt;You might think that racing in these shoes would convey a career-defining advantage, but they actually do the opposite. The shoe only helps one to lose, not to win.&lt;&#x2F;p&gt;
&lt;p&gt;Initially, Nike restricted the supply to its sponsored athletes. Runners sponsored by any other brand were at a disadvantage. After a while, Nike made the shoes generally available, and competitors created similar shoes. Since then, the entire marathon elite field shows up wearing supershoes. They have to: those who don&#x27;t are competing with a handicap.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;2016_rio_shoes.jpg&quot; alt=&quot;Picture of the shoes the men wore in the marathon at the 2016 Rio Olympics&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    In the men’s marathon at the 2016 Rio Olympics, most of the competitors wore the same green Nike shoe. Photo Credit: Norman Katende
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;llms-are-supershoes&quot;&gt;LLMs are supershoes&lt;&#x2F;h1&gt;
&lt;p&gt;LLMs are like the Vaporfly shoe in the bad ways and not in the good ways.&lt;&#x2F;p&gt;
&lt;p&gt;Whether used for writing software or marketing copy, LLMs promise to make businesses ship faster, both yours and your competitor&#x27;s. If they live up to this promise (an uncertain claim &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;), no winners are made; only losers who don&#x27;t wear the new shoes.&lt;&#x2F;p&gt;
&lt;p&gt;At least supershoes don&#x27;t take away fitness. You still have to run. In contrast, LLMs can make you dumber &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. They&#x27;re mopeds, not bicycles &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The winners are the shoe makers, LLM providers, and GPU manufacturers.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;take-aways&quot;&gt;Take aways&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;In a competitive landscape, LLMs, like supershoes, do not result in your benefit.&lt;&#x2F;li&gt;
&lt;li&gt;LLM providers are SaaS &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. All SaaS wants to minimize customer turnover and to expand revenue. The SaaS dream is to capture customers and make them dependent on the SaaS offering.&lt;&#x2F;li&gt;
&lt;li&gt;LLM dependency is both competitive and cognitive.
&lt;ul&gt;
&lt;li&gt;Competitive: All of your competitors are using LLMs. You have to keep up with the pack.&lt;&#x2F;li&gt;
&lt;li&gt;Cognitive: LLM use atrophies one&#x27;s ability to think and reason, making one likely to prompt again. The dependency is self-reinforcing.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.npr.org&#x2F;2019&#x2F;10&#x2F;27&#x2F;773817418&#x2F;nikes-controversially-fast-new-shoes&quot;&gt;Nike&#x27;s Controversially Fast New Shoes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;metr.org&#x2F;blog&#x2F;2025-07-10-early-2025-ai-experienced-os-dev-study&#x2F;&quot;&gt;Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.media.mit.edu&#x2F;publications&#x2F;your-brain-on-chatgpt&#x2F;&quot;&gt;Your Brain on ChatGPT&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;llms-are-not-bicycles-for-the-mind&#x2F;&quot;&gt;LLMs are not Bicycles for the Mind&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Software_as_a_service&quot;&gt;Software as a service&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;who-wins-in-an-arms-race&#x2F;">&lt;p&gt;In 2016, Nike shook up the sport of road running with its elite &lt;em&gt;Vaporfly 4%&lt;&#x2F;em&gt; shoe. This shoe factually speeds up elite running times by 3-4% &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, which translates to 4-5 minutes over a 2 hour 30 minute marathon, an impassable advantage.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;vaporfly4.jpg&quot; alt=&quot;The Nike Vaporfly 4%&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    The Nike Vaporfly 4%
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;supershoes-make-you-lose&quot;&gt;Supershoes make you lose&lt;&#x2F;h1&gt;
&lt;p&gt;You might think that racing in these shoes would convey a career-defining advantage, but they actually do the opposite. The shoe only helps one to lose, not to win.&lt;&#x2F;p&gt;
&lt;p&gt;Initially, Nike restricted the supply to its sponsored athletes. Runners sponsored by any other brand were at a disadvantage. After a while, Nike made the shoes generally available, and competitors created similar shoes. Since then, the entire marathon elite field shows up wearing supershoes. They have to: those who don&#x27;t are competing with a handicap.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;2016_rio_shoes.jpg&quot; alt=&quot;Picture of the shoes the men wore in the marathon at the 2016 Rio Olympics&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    In the men’s marathon at the 2016 Rio Olympics, most of the competitors wore the same green Nike shoe. Photo Credit: Norman Katende
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;llms-are-supershoes&quot;&gt;LLMs are supershoes&lt;&#x2F;h1&gt;
&lt;p&gt;LLMs are like the Vaporfly shoe in the bad ways and not in the good ways.&lt;&#x2F;p&gt;
&lt;p&gt;Whether used for writing software or marketing copy, LLMs promise to make businesses ship faster, both yours and your competitor&#x27;s. If they live up to this promise (an uncertain claim &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;), no winners are made; only losers who don&#x27;t wear the new shoes.&lt;&#x2F;p&gt;
&lt;p&gt;At least supershoes don&#x27;t take away fitness. You still have to run. In contrast, LLMs can make you dumber &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. They&#x27;re mopeds, not bicycles &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The winners are the shoe makers, LLM providers, and GPU manufacturers.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;take-aways&quot;&gt;Take aways&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;In a competitive landscape, LLMs, like supershoes, do not result in your benefit.&lt;&#x2F;li&gt;
&lt;li&gt;LLM providers are SaaS &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. All SaaS wants to minimize customer turnover and to expand revenue. The SaaS dream is to capture customers and make them dependent on the SaaS offering.&lt;&#x2F;li&gt;
&lt;li&gt;LLM dependency is both competitive and cognitive.
&lt;ul&gt;
&lt;li&gt;Competitive: All of your competitors are using LLMs. You have to keep up with the pack.&lt;&#x2F;li&gt;
&lt;li&gt;Cognitive: LLM use atrophies one&#x27;s ability to think and reason, making one likely to prompt again. The dependency is self-reinforcing.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.npr.org&#x2F;2019&#x2F;10&#x2F;27&#x2F;773817418&#x2F;nikes-controversially-fast-new-shoes&quot;&gt;Nike&#x27;s Controversially Fast New Shoes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;metr.org&#x2F;blog&#x2F;2025-07-10-early-2025-ai-experienced-os-dev-study&#x2F;&quot;&gt;Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.media.mit.edu&#x2F;publications&#x2F;your-brain-on-chatgpt&#x2F;&quot;&gt;Your Brain on ChatGPT&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;llms-are-not-bicycles-for-the-mind&#x2F;&quot;&gt;LLMs are not Bicycles for the Mind&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Software_as_a_service&quot;&gt;Software as a service&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>How to say no without authority</title>
        <published>2025-10-22T00:00:00+00:00</published>
        <updated>2025-10-22T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;At work, saying no to someone higher on the org chart is safe if you first earn their trust and if it&#x27;s for the good of the business.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;authority_taxonomy.avif&quot; alt=&quot;A taxonomy of authority: position authority is not earned authority, but relational authority is.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    There&#x27;s more than one type of authority. Being the boss is just one. The red circle is smallest because it&#x27;s the weakest.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;key-ideas&quot;&gt;Key ideas&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;There&#x27;s more than one kind of authority&lt;&#x2F;li&gt;
&lt;li&gt;Saying &quot;no&quot; without positional authority is a negotiation&lt;&#x2F;li&gt;
&lt;li&gt;Relational authority is a valid negotiating position&lt;&#x2F;li&gt;
&lt;li&gt;You earn relational authority when you make people feel understood&lt;&#x2F;li&gt;
&lt;li&gt;To understand someone, you first have to cool down, even if you disagree&lt;&#x2F;li&gt;
&lt;li&gt;When your &quot;no&quot; is aligned with business objectives (increased revenue or reduced costs), you can negotiate with a clear conscience.&lt;&#x2F;li&gt;
&lt;li&gt;To negotiate, you need to establish common ground.&lt;&#x2F;li&gt;
&lt;li&gt;You are the only factor you can control, so dig through your beliefs and worldviews for that common ground.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;why-read-this&quot;&gt;Why read this?&lt;&#x2F;h1&gt;
&lt;p&gt;Hackers lack soft skills. That includes me.&lt;&#x2F;p&gt;
&lt;p&gt;(For the general audience: the term &quot;hacker&quot; doesn&#x27;t mean what you think. If you&#x27;re comfortable with a command line interface, you&#x27;re probably a hacker. Being mysterious and unethical is not part of the definition).&lt;&#x2F;p&gt;
&lt;p&gt;I showed a draft of this post to my wife, who is an elementary school teacher. She remarked, &quot;In my line of work, this is very basic stuff. Like, not interesting at all. Do you think tech people need this post?&quot; I don&#x27;t know you, dear reader, but I&#x27;ve been in this game long enough to know that hacker culture does not esteem soft skills. We&#x27;d much rather learn Haskell or complain about the Apple tax. Seven employers have not subjected me to such training: what soft skills I possess, I&#x27;ve learned on my own. My hope is this post gives you a head start.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;intro&quot;&gt;Intro&lt;&#x2F;h1&gt;
&lt;p&gt;About a week ago, a software developer, nickname him Thrug (a cousin of &lt;a href=&quot;https:&#x2F;&#x2F;grugbrain.dev&#x2F;&quot;&gt;Grug&lt;&#x2F;a&gt;), submitted a post to the &lt;code&gt;&#x2F;r&#x2F;ExperiencedDevs&lt;&#x2F;code&gt; subreddit with the title, &lt;em&gt;Why do people think software development is easy?&lt;&#x2F;em&gt; In short, the Thrug&#x27;s management asked for an unrealistic deliverable and did not appreciate his manner of protest:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Management says], &quot;it should be simple to build&quot; ... I am always sort of at a loss as to how to even respond ... When I tell them no that’s not possible, they get upset and treat it as me being difficult ... One guy or a few are asked to build the impossible. &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;diagnosis&quot;&gt;Diagnosis&lt;&#x2F;h1&gt;
&lt;p&gt;To be brief, Thrug&#x27;s employer exhibits the traits of a pathological organization. As for Thrug, his escalated emotional state blocks any capacity for empathy and persuasion.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-pathological-organization&quot;&gt;A pathological organization&lt;&#x2F;h2&gt;
&lt;p&gt;Anyone who has read the book &lt;em&gt;Accelerate&lt;&#x2F;em&gt; &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; can quickly discern from the following red flags that Thrug is working amongst dysfunction. I wouldn&#x27;t apply for a job at Thrug&#x27;s company:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There&#x27;s a &lt;strong&gt;hero culture&lt;&#x2F;strong&gt;. The company expects an individual to deliver what should take a team.&lt;&#x2F;li&gt;
&lt;li&gt;There&#x27;s an absence of &lt;strong&gt;psychological safety&lt;&#x2F;strong&gt;. Messengers get shot. Blame is the norm. For being realistic, Thrug is labeled &quot;difficult&quot;, though I think some of the fault rests with the manner of his pushback, which I&#x27;ll get to in a moment.&lt;&#x2F;li&gt;
&lt;li&gt;Long project timelines imply &lt;strong&gt;infrequent deployments&lt;&#x2F;strong&gt;, which means each deployment carries greater risk, which contributes to...&lt;&#x2F;li&gt;
&lt;li&gt;High &lt;strong&gt;change failure rate&lt;&#x2F;strong&gt;. Bugs are the probable outcome of rushed projects. Remember &quot;Good, fast, cheap. Choose two.&quot; &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;No &lt;strong&gt;learning culture&lt;&#x2F;strong&gt;. According to Thrug, this isn&#x27;t the first time the company has ignored developers and overpromised deliverables.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Thrug is in a tough environment; he isn&#x27;t crazy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;blinded-by-feelings&quot;&gt;Blinded by feelings&lt;&#x2F;h2&gt;
&lt;p&gt;At the same time, some the criticism from Thrug&#x27;s management is valid.&lt;&#x2F;p&gt;
&lt;p&gt;His post includes charged, accusatory language and absolute statements:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;managers dictating what softwares to make&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;These people have no concept of technology&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;everyone thinks things can just be tossed into the magical black box&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;zillion other things&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;just flat out impossible&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;From its length, I&#x27;m guessing the post took Thrug at least one coffee break to write. If this is the language Thrug deploys after cooling off a bit, I can infer he was at least as escalated when communicating with his management in realtime. This lends some validity to the label &quot;difficult&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s clear that Thrug feels strong negative emotions: he feels frustrated and exasperated at being misunderstood, isolated with no leadership in his corner, and defensive when accused of being the problem.&lt;&#x2F;p&gt;
&lt;p&gt;Like I said, Thrug has good reason to be upset: his worldviews are in conflict with his workplace.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;He believes that craftsmanship is more important than speed.&lt;&#x2F;li&gt;
&lt;li&gt;He believes that expertise should be respected.&lt;&#x2F;li&gt;
&lt;li&gt;He believes management is theatrics.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Thrug is upset, but the problem is that he stays there and doesn&#x27;t move forward toward constructive resolution. He&#x27;s not exactly endearing himself to his leadership. Nobody in management can say, &quot;Well, Thrug didn&#x27;t perform as I expected, but he&#x27;s a great guy and I enjoy having him around.&quot; As a result, the business misses out on his valuable perspective. It&#x27;s up to Thrug to make a change, for his benefit and the benefit of the business.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;remedy&quot;&gt;Remedy&lt;&#x2F;h1&gt;
&lt;p&gt;Now that we know Thrug&#x27;s failure mode (overheated emotions), we can prescribe a path to resolution:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Deescalate&lt;&#x2F;li&gt;
&lt;li&gt;Humanize&lt;&#x2F;li&gt;
&lt;li&gt;Negotiate&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If Thrug can deescalate his emotions, he will be able to empathize with his management&#x27;s perspective and to show he cares. He will be willing to listen, to back off from his hardline &quot;no&quot;, and to negotiate options. All this will flip their perception. Once they believe he understands them and is on their side, they will be much more likely to listen to him.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;deescalate&quot;&gt;Deescalate&lt;&#x2F;h2&gt;
&lt;p&gt;We can&#x27;t think straight when we are escalated emotionally; the structure of the brain all but guarantees it. When activated, the amygdala mostly preempts the prefrontal cortex&#x27;s ability to think &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. You have to calm down first.&lt;&#x2F;p&gt;
&lt;p&gt;To calm down, take two minutes to close your eyes and breathe deeply. This can shift the brain out of crisis mode and let you start to think. Then, identify your feelings. Naming them is enough.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re face-to-face with someone, you may not have two minutes to calm down. While it is possible with practice to deescalate in a matter of seconds, it&#x27;s best to ask for a few moments to think or to take a trip to the restroom.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;humanize&quot;&gt;Humanize&lt;&#x2F;h2&gt;
&lt;p&gt;Once you are calm enough to think somewhat objectively, your goal is to humanize the other party. Naming their probable feelings is a great start, because it bootstraps your empathy. Asking questions lets them clarify their feelings and perspective. Listening is like attaching a debugger to a person and inspecting their local variables and emotional call stack. Are they angry, fearful, insecure? Does their mom have cancer? Are they behind on their mortgage?&lt;&#x2F;p&gt;
&lt;p&gt;Example: Imagine you&#x27;re Thrug. Think about the manager you&#x27;re most upset with. You just left a meeting with them ten minutes ago. You&#x27;ve calmed down, or as much as one can in ten minutes. Now ask yourself, what is that manager going through? How do they feel? Here&#x27;s one possible thought train:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Well, my manager said the Director of Product said we missed quarterly revenue goals and have customer retention issues. That sounds like bad news. The director probably had a tough meeting with the middle managers, from which our meeting resulted. I bet a lot of similar meetings are happening right now, so I&#x27;m not alone. This is probably from even higher up: I&#x27;ve often heard the private investor group backing us is pushy. This isn&#x27;t my manager&#x27;s fault. He&#x27;s stuck between a rock and a hard place: the Powers That Be demand more of him, but I know it&#x27;s not even possible. Moreover, I was really nasty to him about it. I know he&#x27;s been a manager for only a year. He started out in customer service years ago. I remember him saying offhand a few weeks ago how the call center was way more fun. That&#x27;s really saying something since our customers are sweat shops and drug cartels. Perhaps training could help my manager, but I know finance is never going to approve it. He&#x27;s stuck where he&#x27;s at. With just an associate&#x27;s degree, he isn&#x27;t qualified for such a well-compensated role anywhere else. He can&#x27;t risk it anyway, since he has a wife and toddler and newborn at home. Man, he&#x27;s in a tough spot.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Next, with a rational mind, Thrug can challenge his own worldviews. For example, he could come to accept that in business, the fundamental purpose of software development is to bring business value, not to practice craftsmanship. This happens to be a worldview that his manager very likely also holds. That&#x27;s valuable common ground. Thrug can repeat to himself:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Producing beautiful software is not a goal. Solving complex technical problems is not a goal. Writing bug-free code is not a goal. Using sexy programming languages is not a goal. Add revenue. Reduce costs. Those are your only goals. &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;negotiate&quot;&gt;Negotiate&lt;&#x2F;h2&gt;
&lt;p&gt;Yes, negotiation. When you are saying &quot;no&quot; to someone and don&#x27;t want to burn a bridge, you are in a negotiation, not just for the decision but also for the relationship.&lt;&#x2F;p&gt;
&lt;p&gt;Now that the other person is a human again in your mind, it&#x27;s time to communicate with them. You&#x27;re going to let them know that you are on their side. This addresses the &lt;em&gt;ethos&lt;&#x2F;em&gt; of your negotiating position.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-is-ethos&quot;&gt;What is ethos?&lt;&#x2F;h3&gt;
&lt;p&gt;Ever heard of &lt;em&gt;logos&lt;&#x2F;em&gt;, &lt;em&gt;pathos&lt;&#x2F;em&gt; and &lt;em&gt;ethos&lt;&#x2F;em&gt;? In rhetoric, &lt;em&gt;logos&lt;&#x2F;em&gt; is the logic of your argument. &lt;em&gt;Pathos&lt;&#x2F;em&gt; concerns how people feel about your argument. &lt;em&gt;Ethos&lt;&#x2F;em&gt; is your credibility and authority. You can have a totally valid argument (good logos) and be unpersuasive because you are not trusted (poor ethos).&lt;&#x2F;p&gt;
&lt;p&gt;The ethos you project needs to be genuine. Don&#x27;t apologize if you aren&#x27;t. Don&#x27;t insinuate you are working in someone&#x27;s interest when you aren&#x27;t. Don&#x27;t ask how someone is doing if you don&#x27;t care. If they get a whiff of your duplicity, you&#x27;re in doo-doo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ethos-is-authority&quot;&gt;Ethos is authority&lt;&#x2F;h3&gt;
&lt;p&gt;Most people when they hear the word &lt;em&gt;authority&lt;&#x2F;em&gt; picture positional authority: an airline captain, your boss, a police officer. You listen to these people because of the consequences they can inflict, which in these cases includes removing you from a flight, firing you, or firing at you.&lt;&#x2F;p&gt;
&lt;p&gt;There are other kinds of authority, and the kind I&#x27;m advocating here is &lt;em&gt;relational&lt;&#x2F;em&gt; authority. You listen to someone because you trust them. Relational authority is a kind of &lt;em&gt;earned&lt;&#x2F;em&gt; authority. You&#x27;re not handed relational authority when you become someone&#x27;s boss: you have to earn it. Another kind of earned authority is &lt;em&gt;expert&lt;&#x2F;em&gt; authority: You listen to someone because they&#x27;ve proven their competence. It&#x27;s why you listen to your doctor even if she has poor bedside manners. Thrug&#x27;s boss may have positional authority over Thrug, but we can infer from Thrug&#x27;s post that he does not possess relational or expert authority with Thrug. In turn, Thrug doesn&#x27;t possess any of these three forms of authority with his manager. It&#x27;s not a good negotiating position.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-restorative-conversation&quot;&gt;The restorative conversation&lt;&#x2F;h3&gt;
&lt;p&gt;Here&#x27;s how Thrug can instantly improve his negotiating position with his manager. The next time they talk, he can say, &quot;I apologize for my response last time. I bet it feels like you&#x27;re between a rock and a hard place, between senior leadership&#x27;s demands and my rants.&quot; Thrug should be prepared for a potentially emotional response. That&#x27;s good and means he is getting through and it&#x27;s time to listen. If the response is bland, his inference might be incorrect, or his manager might be guarded. Obviously hasn&#x27;t forgotten about recent interactions. In these cases, Thrug can simply ask, &quot;How do you feel about all that?&quot; When talked to this way, most people will mirror your gentleness and open up.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;relationship-takes-time&quot;&gt;Relationship takes time&lt;&#x2F;h3&gt;
&lt;p&gt;In particularly broken relationships, it may take time and consistency to restore relational authority.&lt;&#x2F;p&gt;
&lt;p&gt;The strongest relationships have been cultivated over long periods of time. You should always seek to build rapport and trust with people because people are valuable in and of themselves &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. However, humans are eager help you if they like you. Ask your DevOps lead about his sickly mother and show genuine concern by following up once or twice. Months later, watch how your request to update the CI pipeline skips the weeks-long backlog and is done two hours after you asked. True story.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;make-the-offer&quot;&gt;Make the offer&lt;&#x2F;h3&gt;
&lt;p&gt;With a relationship in place, the conversation can proceed on constructive terms. Thrug can make an initial offer: &quot;I want to help deliver business value. I still think it&#x27;ll be a long shot, but I&#x27;d like to talk about some options to cut scope so we can realistically ship Feature X on time.&quot; A back-and-forth follows from there.&lt;&#x2F;p&gt;
&lt;p&gt;In a negotiation, there is always a BATNA: the Best Alternative to a Negotiated Agreement. It&#x27;s what happens if you and the other party fail to reach an agreement. In this case, there are at least two alternatives:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Thrug leaves the company.&lt;&#x2F;li&gt;
&lt;li&gt;The company commits to more than it can deliver. The company misses the revenue, loses to competitors, and Thrug is out of a job anyway.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I think for at least the short term, these two alternatives are worse for the business than negotiating an achievable deliverable.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;When you as a software developer have the insight that a software deliverable is unachievable, it&#x27;s in the business&#x27;s interest to negotiate another plan. The negotiated deliverable is more likely to be delivered on time and its business value realized. If you&#x27;re in a blameful work culture, building relational authority first serves as job security.&lt;&#x2F;p&gt;
&lt;p&gt;This is how you say &quot;no&quot; in a way that earns respect:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deescalate&lt;&#x2F;strong&gt; if necessary. Pause. Breathe. Collect yourself.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Humanize&lt;&#x2F;strong&gt;. See the other side&#x27;s feelings. Let them feel understood and cared about. Listen. Ask questions.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Negotiate&lt;&#x2F;strong&gt;.
&lt;ul&gt;
&lt;li&gt;Offer choices. Rarely do you actually utter the syllable &quot;no&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;They make a choice&lt;&#x2F;li&gt;
&lt;li&gt;They walk away feeling good because you&#x27;re working for their benefit.&lt;&#x2F;li&gt;
&lt;li&gt;You&#x27;re protected because they made the choice and they respect you.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;It&#x27;s like the old Aesop fable of the North Wind and the Sun &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The harder the wind blew, the tighter the man held on to his coat. The sun however warmed the man until he willingly removed it. Go forth and do likewise.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;old.reddit.com&#x2F;r&#x2F;ExperiencedDevs&#x2F;comments&#x2F;1o35z8f&#x2F;why_do_people_think_software_development_is_easy&quot;&gt;Why do people think software development is easy?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;itrevolution.com&#x2F;product&#x2F;accelerate&#x2F;&quot;&gt;Accelerate (book)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Project_management_triangle&quot;&gt;Project management triangle&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;danielgolemanemotionalintelligence.com&quot;&gt;Emotional Intelligence (book)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.kalzumeus.com&#x2F;2011&#x2F;10&#x2F;28&#x2F;dont-call-yourself-a-programmer&#x2F;&quot;&gt;Don&#x27;t Call Yourself A Programmer&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.biblegateway.com&#x2F;passage&#x2F;?search=Psalm+139%3A14&amp;amp;version=ESV&quot;&gt;Psalm 139:14&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;read.gov&#x2F;aesop&#x2F;143.html&quot;&gt;The North Wind &amp;amp; the Sun&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;recommended-reading&quot;&gt;Recommended Reading&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;Forsgren, N., Humble, J. and Kim, G. (2018) &lt;em&gt;Accelerate: The science of lean software and DevOps: Building and scaling high performing technology organizations&lt;&#x2F;em&gt;. Portland: IT Revolution Press.&lt;&#x2F;li&gt;
&lt;li&gt;Goulston, M. (2010) &lt;em&gt;Just listen: Discover the secret to getting through to absolutely anyone&lt;&#x2F;em&gt;. New York: AMACOM.&lt;&#x2F;li&gt;
&lt;li&gt;Goleman, D. (1995) &lt;em&gt;Emotional intelligence: Why it can matter more than IQ&lt;&#x2F;em&gt;. New York: Bantam Books.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;addendum-a-personal-experience&quot;&gt;Addendum: A personal experience&lt;&#x2F;h1&gt;
&lt;p&gt;Thrug&#x27;s post hits close to home, because I recently lived this experience. About eight months ago I was writing software at a company with a similar management culture. Communication was one-way, and the company was piling on tech debt faster than anyone could track. I was a vocal messenger but was viewed as the problem. Thrug&#x27;s management is comparably patient: I was fired after eight weeks.&lt;&#x2F;p&gt;
&lt;p&gt;My dismissal was tragic. I knew my tech skills could have helped that company, but I never got to deploy them because of my manner of communication. It&#x27;s tempting to blame the company, but I am the only factor which I know can change. In the months after, I came to regard soft skills as my new growth area: I bought no less than seven books on emotional intelligence, negotiation, conflict, and leadership. I also went through a counseling program at my church.&lt;&#x2F;p&gt;
&lt;p&gt;As my software engineering career stretches toward two decades, more often I&#x27;ve found it necessary to turn things down. The audience and context varies: sometimes I&#x27;m speaking with mentees, sometimes with peers, and often enough with superiors. Sometimes it&#x27;s declining a change in a pull request. Sometimes it&#x27;s in a meeting, talking the team down from a design decision. A couple of times, it was on the phone with a customer, tactfully helping them see the problem was on their end or that the software works as intended.&lt;&#x2F;p&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;">&lt;p&gt;&lt;em&gt;At work, saying no to someone higher on the org chart is safe if you first earn their trust and if it&#x27;s for the good of the business.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;authority_taxonomy.avif&quot; alt=&quot;A taxonomy of authority: position authority is not earned authority, but relational authority is.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    There&#x27;s more than one type of authority. Being the boss is just one. The red circle is smallest because it&#x27;s the weakest.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;key-ideas&quot;&gt;Key ideas&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;There&#x27;s more than one kind of authority&lt;&#x2F;li&gt;
&lt;li&gt;Saying &quot;no&quot; without positional authority is a negotiation&lt;&#x2F;li&gt;
&lt;li&gt;Relational authority is a valid negotiating position&lt;&#x2F;li&gt;
&lt;li&gt;You earn relational authority when you make people feel understood&lt;&#x2F;li&gt;
&lt;li&gt;To understand someone, you first have to cool down, even if you disagree&lt;&#x2F;li&gt;
&lt;li&gt;When your &quot;no&quot; is aligned with business objectives (increased revenue or reduced costs), you can negotiate with a clear conscience.&lt;&#x2F;li&gt;
&lt;li&gt;To negotiate, you need to establish common ground.&lt;&#x2F;li&gt;
&lt;li&gt;You are the only factor you can control, so dig through your beliefs and worldviews for that common ground.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;why-read-this&quot;&gt;Why read this?&lt;&#x2F;h1&gt;
&lt;p&gt;Hackers lack soft skills. That includes me.&lt;&#x2F;p&gt;
&lt;p&gt;(For the general audience: the term &quot;hacker&quot; doesn&#x27;t mean what you think. If you&#x27;re comfortable with a command line interface, you&#x27;re probably a hacker. Being mysterious and unethical is not part of the definition).&lt;&#x2F;p&gt;
&lt;p&gt;I showed a draft of this post to my wife, who is an elementary school teacher. She remarked, &quot;In my line of work, this is very basic stuff. Like, not interesting at all. Do you think tech people need this post?&quot; I don&#x27;t know you, dear reader, but I&#x27;ve been in this game long enough to know that hacker culture does not esteem soft skills. We&#x27;d much rather learn Haskell or complain about the Apple tax. Seven employers have not subjected me to such training: what soft skills I possess, I&#x27;ve learned on my own. My hope is this post gives you a head start.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;intro&quot;&gt;Intro&lt;&#x2F;h1&gt;
&lt;p&gt;About a week ago, a software developer, nickname him Thrug (a cousin of &lt;a href=&quot;https:&#x2F;&#x2F;grugbrain.dev&#x2F;&quot;&gt;Grug&lt;&#x2F;a&gt;), submitted a post to the &lt;code&gt;&#x2F;r&#x2F;ExperiencedDevs&lt;&#x2F;code&gt; subreddit with the title, &lt;em&gt;Why do people think software development is easy?&lt;&#x2F;em&gt; In short, the Thrug&#x27;s management asked for an unrealistic deliverable and did not appreciate his manner of protest:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Management says], &quot;it should be simple to build&quot; ... I am always sort of at a loss as to how to even respond ... When I tell them no that’s not possible, they get upset and treat it as me being difficult ... One guy or a few are asked to build the impossible. &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;diagnosis&quot;&gt;Diagnosis&lt;&#x2F;h1&gt;
&lt;p&gt;To be brief, Thrug&#x27;s employer exhibits the traits of a pathological organization. As for Thrug, his escalated emotional state blocks any capacity for empathy and persuasion.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-pathological-organization&quot;&gt;A pathological organization&lt;&#x2F;h2&gt;
&lt;p&gt;Anyone who has read the book &lt;em&gt;Accelerate&lt;&#x2F;em&gt; &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; can quickly discern from the following red flags that Thrug is working amongst dysfunction. I wouldn&#x27;t apply for a job at Thrug&#x27;s company:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;There&#x27;s a &lt;strong&gt;hero culture&lt;&#x2F;strong&gt;. The company expects an individual to deliver what should take a team.&lt;&#x2F;li&gt;
&lt;li&gt;There&#x27;s an absence of &lt;strong&gt;psychological safety&lt;&#x2F;strong&gt;. Messengers get shot. Blame is the norm. For being realistic, Thrug is labeled &quot;difficult&quot;, though I think some of the fault rests with the manner of his pushback, which I&#x27;ll get to in a moment.&lt;&#x2F;li&gt;
&lt;li&gt;Long project timelines imply &lt;strong&gt;infrequent deployments&lt;&#x2F;strong&gt;, which means each deployment carries greater risk, which contributes to...&lt;&#x2F;li&gt;
&lt;li&gt;High &lt;strong&gt;change failure rate&lt;&#x2F;strong&gt;. Bugs are the probable outcome of rushed projects. Remember &quot;Good, fast, cheap. Choose two.&quot; &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;No &lt;strong&gt;learning culture&lt;&#x2F;strong&gt;. According to Thrug, this isn&#x27;t the first time the company has ignored developers and overpromised deliverables.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Thrug is in a tough environment; he isn&#x27;t crazy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;blinded-by-feelings&quot;&gt;Blinded by feelings&lt;&#x2F;h2&gt;
&lt;p&gt;At the same time, some the criticism from Thrug&#x27;s management is valid.&lt;&#x2F;p&gt;
&lt;p&gt;His post includes charged, accusatory language and absolute statements:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;managers dictating what softwares to make&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;These people have no concept of technology&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;everyone thinks things can just be tossed into the magical black box&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;zillion other things&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;just flat out impossible&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;From its length, I&#x27;m guessing the post took Thrug at least one coffee break to write. If this is the language Thrug deploys after cooling off a bit, I can infer he was at least as escalated when communicating with his management in realtime. This lends some validity to the label &quot;difficult&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s clear that Thrug feels strong negative emotions: he feels frustrated and exasperated at being misunderstood, isolated with no leadership in his corner, and defensive when accused of being the problem.&lt;&#x2F;p&gt;
&lt;p&gt;Like I said, Thrug has good reason to be upset: his worldviews are in conflict with his workplace.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;He believes that craftsmanship is more important than speed.&lt;&#x2F;li&gt;
&lt;li&gt;He believes that expertise should be respected.&lt;&#x2F;li&gt;
&lt;li&gt;He believes management is theatrics.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Thrug is upset, but the problem is that he stays there and doesn&#x27;t move forward toward constructive resolution. He&#x27;s not exactly endearing himself to his leadership. Nobody in management can say, &quot;Well, Thrug didn&#x27;t perform as I expected, but he&#x27;s a great guy and I enjoy having him around.&quot; As a result, the business misses out on his valuable perspective. It&#x27;s up to Thrug to make a change, for his benefit and the benefit of the business.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;remedy&quot;&gt;Remedy&lt;&#x2F;h1&gt;
&lt;p&gt;Now that we know Thrug&#x27;s failure mode (overheated emotions), we can prescribe a path to resolution:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Deescalate&lt;&#x2F;li&gt;
&lt;li&gt;Humanize&lt;&#x2F;li&gt;
&lt;li&gt;Negotiate&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If Thrug can deescalate his emotions, he will be able to empathize with his management&#x27;s perspective and to show he cares. He will be willing to listen, to back off from his hardline &quot;no&quot;, and to negotiate options. All this will flip their perception. Once they believe he understands them and is on their side, they will be much more likely to listen to him.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;deescalate&quot;&gt;Deescalate&lt;&#x2F;h2&gt;
&lt;p&gt;We can&#x27;t think straight when we are escalated emotionally; the structure of the brain all but guarantees it. When activated, the amygdala mostly preempts the prefrontal cortex&#x27;s ability to think &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. You have to calm down first.&lt;&#x2F;p&gt;
&lt;p&gt;To calm down, take two minutes to close your eyes and breathe deeply. This can shift the brain out of crisis mode and let you start to think. Then, identify your feelings. Naming them is enough.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re face-to-face with someone, you may not have two minutes to calm down. While it is possible with practice to deescalate in a matter of seconds, it&#x27;s best to ask for a few moments to think or to take a trip to the restroom.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;humanize&quot;&gt;Humanize&lt;&#x2F;h2&gt;
&lt;p&gt;Once you are calm enough to think somewhat objectively, your goal is to humanize the other party. Naming their probable feelings is a great start, because it bootstraps your empathy. Asking questions lets them clarify their feelings and perspective. Listening is like attaching a debugger to a person and inspecting their local variables and emotional call stack. Are they angry, fearful, insecure? Does their mom have cancer? Are they behind on their mortgage?&lt;&#x2F;p&gt;
&lt;p&gt;Example: Imagine you&#x27;re Thrug. Think about the manager you&#x27;re most upset with. You just left a meeting with them ten minutes ago. You&#x27;ve calmed down, or as much as one can in ten minutes. Now ask yourself, what is that manager going through? How do they feel? Here&#x27;s one possible thought train:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Well, my manager said the Director of Product said we missed quarterly revenue goals and have customer retention issues. That sounds like bad news. The director probably had a tough meeting with the middle managers, from which our meeting resulted. I bet a lot of similar meetings are happening right now, so I&#x27;m not alone. This is probably from even higher up: I&#x27;ve often heard the private investor group backing us is pushy. This isn&#x27;t my manager&#x27;s fault. He&#x27;s stuck between a rock and a hard place: the Powers That Be demand more of him, but I know it&#x27;s not even possible. Moreover, I was really nasty to him about it. I know he&#x27;s been a manager for only a year. He started out in customer service years ago. I remember him saying offhand a few weeks ago how the call center was way more fun. That&#x27;s really saying something since our customers are sweat shops and drug cartels. Perhaps training could help my manager, but I know finance is never going to approve it. He&#x27;s stuck where he&#x27;s at. With just an associate&#x27;s degree, he isn&#x27;t qualified for such a well-compensated role anywhere else. He can&#x27;t risk it anyway, since he has a wife and toddler and newborn at home. Man, he&#x27;s in a tough spot.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Next, with a rational mind, Thrug can challenge his own worldviews. For example, he could come to accept that in business, the fundamental purpose of software development is to bring business value, not to practice craftsmanship. This happens to be a worldview that his manager very likely also holds. That&#x27;s valuable common ground. Thrug can repeat to himself:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Producing beautiful software is not a goal. Solving complex technical problems is not a goal. Writing bug-free code is not a goal. Using sexy programming languages is not a goal. Add revenue. Reduce costs. Those are your only goals. &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;negotiate&quot;&gt;Negotiate&lt;&#x2F;h2&gt;
&lt;p&gt;Yes, negotiation. When you are saying &quot;no&quot; to someone and don&#x27;t want to burn a bridge, you are in a negotiation, not just for the decision but also for the relationship.&lt;&#x2F;p&gt;
&lt;p&gt;Now that the other person is a human again in your mind, it&#x27;s time to communicate with them. You&#x27;re going to let them know that you are on their side. This addresses the &lt;em&gt;ethos&lt;&#x2F;em&gt; of your negotiating position.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-is-ethos&quot;&gt;What is ethos?&lt;&#x2F;h3&gt;
&lt;p&gt;Ever heard of &lt;em&gt;logos&lt;&#x2F;em&gt;, &lt;em&gt;pathos&lt;&#x2F;em&gt; and &lt;em&gt;ethos&lt;&#x2F;em&gt;? In rhetoric, &lt;em&gt;logos&lt;&#x2F;em&gt; is the logic of your argument. &lt;em&gt;Pathos&lt;&#x2F;em&gt; concerns how people feel about your argument. &lt;em&gt;Ethos&lt;&#x2F;em&gt; is your credibility and authority. You can have a totally valid argument (good logos) and be unpersuasive because you are not trusted (poor ethos).&lt;&#x2F;p&gt;
&lt;p&gt;The ethos you project needs to be genuine. Don&#x27;t apologize if you aren&#x27;t. Don&#x27;t insinuate you are working in someone&#x27;s interest when you aren&#x27;t. Don&#x27;t ask how someone is doing if you don&#x27;t care. If they get a whiff of your duplicity, you&#x27;re in doo-doo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ethos-is-authority&quot;&gt;Ethos is authority&lt;&#x2F;h3&gt;
&lt;p&gt;Most people when they hear the word &lt;em&gt;authority&lt;&#x2F;em&gt; picture positional authority: an airline captain, your boss, a police officer. You listen to these people because of the consequences they can inflict, which in these cases includes removing you from a flight, firing you, or firing at you.&lt;&#x2F;p&gt;
&lt;p&gt;There are other kinds of authority, and the kind I&#x27;m advocating here is &lt;em&gt;relational&lt;&#x2F;em&gt; authority. You listen to someone because you trust them. Relational authority is a kind of &lt;em&gt;earned&lt;&#x2F;em&gt; authority. You&#x27;re not handed relational authority when you become someone&#x27;s boss: you have to earn it. Another kind of earned authority is &lt;em&gt;expert&lt;&#x2F;em&gt; authority: You listen to someone because they&#x27;ve proven their competence. It&#x27;s why you listen to your doctor even if she has poor bedside manners. Thrug&#x27;s boss may have positional authority over Thrug, but we can infer from Thrug&#x27;s post that he does not possess relational or expert authority with Thrug. In turn, Thrug doesn&#x27;t possess any of these three forms of authority with his manager. It&#x27;s not a good negotiating position.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-restorative-conversation&quot;&gt;The restorative conversation&lt;&#x2F;h3&gt;
&lt;p&gt;Here&#x27;s how Thrug can instantly improve his negotiating position with his manager. The next time they talk, he can say, &quot;I apologize for my response last time. I bet it feels like you&#x27;re between a rock and a hard place, between senior leadership&#x27;s demands and my rants.&quot; Thrug should be prepared for a potentially emotional response. That&#x27;s good and means he is getting through and it&#x27;s time to listen. If the response is bland, his inference might be incorrect, or his manager might be guarded. Obviously hasn&#x27;t forgotten about recent interactions. In these cases, Thrug can simply ask, &quot;How do you feel about all that?&quot; When talked to this way, most people will mirror your gentleness and open up.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;relationship-takes-time&quot;&gt;Relationship takes time&lt;&#x2F;h3&gt;
&lt;p&gt;In particularly broken relationships, it may take time and consistency to restore relational authority.&lt;&#x2F;p&gt;
&lt;p&gt;The strongest relationships have been cultivated over long periods of time. You should always seek to build rapport and trust with people because people are valuable in and of themselves &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. However, humans are eager help you if they like you. Ask your DevOps lead about his sickly mother and show genuine concern by following up once or twice. Months later, watch how your request to update the CI pipeline skips the weeks-long backlog and is done two hours after you asked. True story.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;make-the-offer&quot;&gt;Make the offer&lt;&#x2F;h3&gt;
&lt;p&gt;With a relationship in place, the conversation can proceed on constructive terms. Thrug can make an initial offer: &quot;I want to help deliver business value. I still think it&#x27;ll be a long shot, but I&#x27;d like to talk about some options to cut scope so we can realistically ship Feature X on time.&quot; A back-and-forth follows from there.&lt;&#x2F;p&gt;
&lt;p&gt;In a negotiation, there is always a BATNA: the Best Alternative to a Negotiated Agreement. It&#x27;s what happens if you and the other party fail to reach an agreement. In this case, there are at least two alternatives:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Thrug leaves the company.&lt;&#x2F;li&gt;
&lt;li&gt;The company commits to more than it can deliver. The company misses the revenue, loses to competitors, and Thrug is out of a job anyway.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I think for at least the short term, these two alternatives are worse for the business than negotiating an achievable deliverable.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;When you as a software developer have the insight that a software deliverable is unachievable, it&#x27;s in the business&#x27;s interest to negotiate another plan. The negotiated deliverable is more likely to be delivered on time and its business value realized. If you&#x27;re in a blameful work culture, building relational authority first serves as job security.&lt;&#x2F;p&gt;
&lt;p&gt;This is how you say &quot;no&quot; in a way that earns respect:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deescalate&lt;&#x2F;strong&gt; if necessary. Pause. Breathe. Collect yourself.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Humanize&lt;&#x2F;strong&gt;. See the other side&#x27;s feelings. Let them feel understood and cared about. Listen. Ask questions.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Negotiate&lt;&#x2F;strong&gt;.
&lt;ul&gt;
&lt;li&gt;Offer choices. Rarely do you actually utter the syllable &quot;no&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;They make a choice&lt;&#x2F;li&gt;
&lt;li&gt;They walk away feeling good because you&#x27;re working for their benefit.&lt;&#x2F;li&gt;
&lt;li&gt;You&#x27;re protected because they made the choice and they respect you.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;It&#x27;s like the old Aesop fable of the North Wind and the Sun &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;10&#x2F;how-to-say-no-without-authority&#x2F;#references&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The harder the wind blew, the tighter the man held on to his coat. The sun however warmed the man until he willingly removed it. Go forth and do likewise.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;old.reddit.com&#x2F;r&#x2F;ExperiencedDevs&#x2F;comments&#x2F;1o35z8f&#x2F;why_do_people_think_software_development_is_easy&quot;&gt;Why do people think software development is easy?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;itrevolution.com&#x2F;product&#x2F;accelerate&#x2F;&quot;&gt;Accelerate (book)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Project_management_triangle&quot;&gt;Project management triangle&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;danielgolemanemotionalintelligence.com&quot;&gt;Emotional Intelligence (book)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.kalzumeus.com&#x2F;2011&#x2F;10&#x2F;28&#x2F;dont-call-yourself-a-programmer&#x2F;&quot;&gt;Don&#x27;t Call Yourself A Programmer&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.biblegateway.com&#x2F;passage&#x2F;?search=Psalm+139%3A14&amp;amp;version=ESV&quot;&gt;Psalm 139:14&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;read.gov&#x2F;aesop&#x2F;143.html&quot;&gt;The North Wind &amp;amp; the Sun&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;recommended-reading&quot;&gt;Recommended Reading&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;Forsgren, N., Humble, J. and Kim, G. (2018) &lt;em&gt;Accelerate: The science of lean software and DevOps: Building and scaling high performing technology organizations&lt;&#x2F;em&gt;. Portland: IT Revolution Press.&lt;&#x2F;li&gt;
&lt;li&gt;Goulston, M. (2010) &lt;em&gt;Just listen: Discover the secret to getting through to absolutely anyone&lt;&#x2F;em&gt;. New York: AMACOM.&lt;&#x2F;li&gt;
&lt;li&gt;Goleman, D. (1995) &lt;em&gt;Emotional intelligence: Why it can matter more than IQ&lt;&#x2F;em&gt;. New York: Bantam Books.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;addendum-a-personal-experience&quot;&gt;Addendum: A personal experience&lt;&#x2F;h1&gt;
&lt;p&gt;Thrug&#x27;s post hits close to home, because I recently lived this experience. About eight months ago I was writing software at a company with a similar management culture. Communication was one-way, and the company was piling on tech debt faster than anyone could track. I was a vocal messenger but was viewed as the problem. Thrug&#x27;s management is comparably patient: I was fired after eight weeks.&lt;&#x2F;p&gt;
&lt;p&gt;My dismissal was tragic. I knew my tech skills could have helped that company, but I never got to deploy them because of my manner of communication. It&#x27;s tempting to blame the company, but I am the only factor which I know can change. In the months after, I came to regard soft skills as my new growth area: I bought no less than seven books on emotional intelligence, negotiation, conflict, and leadership. I also went through a counseling program at my church.&lt;&#x2F;p&gt;
&lt;p&gt;As my software engineering career stretches toward two decades, more often I&#x27;ve found it necessary to turn things down. The audience and context varies: sometimes I&#x27;m speaking with mentees, sometimes with peers, and often enough with superiors. Sometimes it&#x27;s declining a change in a pull request. Sometimes it&#x27;s in a meeting, talking the team down from a design decision. A couple of times, it was on the phone with a customer, tactfully helping them see the problem was on their end or that the software works as intended.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>It&#x27;s Time to License Software Engineering</title>
        <published>2025-09-15T00:00:00+00:00</published>
        <updated>2025-09-15T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;Society restricts who can design bridges or prescribe medicine, but it lets anyone market their software. AI accelerates the problem. It&#x27;s in everyone&#x27;s interest that states require licensure of software engineers.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;2019_vs_2025_bridges_software.png&quot; alt=&quot;Diagram contrasting who can make bridges in 2025 with who can make software in 2025. Nothing has changed for structural engineering, but now anyone can write software.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    AI has dramatically broadened who can create software.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;why-i-care&quot;&gt;Why I care&lt;&#x2F;h1&gt;
&lt;p&gt;I almost became an engineer. From 2008, I spent three years pursuing a degree in computer engineering. I sat in engineering fundamentals and ethics courses with people who became engineers: mechanical, electrical, aerospace, nuclear, and others. We all planned to graduate, pass the FE exam, work a while, pass the PE exam, and become licensed professional engineers.&lt;&#x2F;p&gt;
&lt;p&gt;Then I switched to computer science. At the time, the thought of government adding red tape to my career path angered me. You don&#x27;t even need a degree to become a software engineer. You just have to convince someone to hire you into that role.&lt;&#x2F;p&gt;
&lt;p&gt;Fast forward to 2025, and the barrier to entry is even lower. AI lets anyone ship software, and it&#x27;s causing an avalanche of quality issues&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The classic engineering disciplines have spent centuries learning hard lessons about cost and quality. My profession could learn a thing or two from them.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;why-do-we-have-engineering-licensure&quot;&gt;Why do we have engineering licensure?&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;how-the-us-got-started&quot;&gt;How the US got started&lt;&#x2F;h2&gt;
&lt;p&gt;On March 12, 1928, the St. Francis dam near Los Angeles had stood for just under two years when it collapsed with almost no warning. Flood water surged down the San Francisquito Canyon, drowning over 400 people and causing extensive damage to man-made structures and the environment&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;francis_dam_before.jpg&quot; alt=&quot;Picture of the St. Francis dam before its collapse. It&#x27;s a wide but not tall structure holding back a majestic manmade lake.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    The St. Francis Dam before its collapse
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;francis_dam_after.webp&quot; alt=&quot;Picture of the St. Francis dam after its collapse. All that remains is a small section of the original retaining wall. The carnage of flood water is evident.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    The St. Francis Dam after its collapse. 
    &lt;br&#x2F;&gt;Just a small section of the wall remained, nicknamed &quot;the tombstone&quot;.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;The immediate cause was the material on which the dam rested essentially dissolved and eroded away when it became wet.
The proximal cause was the dam&#x27;s designer was not qualified to design dams, and being self-taught, made critical errors in judgement.
The root cause was a public policy which permitted the design and construction of dams by unqualified people and without independent review.&lt;&#x2F;p&gt;
&lt;p&gt;Just over a year after the collapse, California enacted its Civil Engineers Act, making it the second US state to regulate licensure of engineers. By 1947, all states had created similar licensure laws for Civil, Mechanical, and Electrical engineers.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;licensure-lifts-quality&quot;&gt;Licensure lifts quality&lt;&#x2F;h2&gt;
&lt;p&gt;Market forces exert a downward pressure on cost and therefore on the quality of products and services. Licensure of professionals, combined with the standards they must follow, protects public welfare by exerting a counteracting upward force on quality.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;market_vs_licensure.png&quot; alt=&quot;Diagram showing that market forces push prices and quality down, while licensure and standards push them up.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Licensure sets a minimum bar for quality and upfront cost. 
    &lt;br&#x2F;&gt;Read more about cost in &lt;a href=&quot;#software-will-get-more-expensive&quot;&gt;Objections&lt;&#x2F;a&gt;.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;For example, the International Building Code specifies a minimum load a roof must be able to hold up. Without this requirement, structural engineers might cave when pressured to find ways to make a building cheaper.&lt;&#x2F;p&gt;
&lt;p&gt;Another way to look at it is, competing firms find themselves in a prisoner&#x27;s dilemma where they all &lt;em&gt;could&lt;&#x2F;em&gt; cooperate and offer high quality goods. If any one of them defects by offering a lower price, then to maintain market share, all firms must follow suit. A Nash equilibrium emerges where nobody offers quality goods. Markets do segment; it&#x27;s how Jones soda can exist in the same world as Coca Cola and Pepsi, but they all follow FDA standards for water quality.&lt;&#x2F;p&gt;
&lt;p&gt;Licensure lifts the Nash equilibrium to a higher level of quality, since no participant has the choice to cut certain costs.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;why-license-software-engineers&quot;&gt;Why license software engineers?&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;software-can-harm-people&quot;&gt;Software can Harm People&lt;&#x2F;h2&gt;
&lt;p&gt;The collapse of a dam, bridge, or building is tragic when it costs lives. Bad medicine is also insidious: it promises a cure but delivers none or actively harms the patient.&lt;&#x2F;p&gt;
&lt;p&gt;Software is less tangible, but it can also cause widespread harm. For example:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;In 2024, the global Crowdstrike outage brought down 18,000 customers and businesses, including retail stores, banks, universities, airports, hospitals, and governments&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Tesla&#x27;s self-driving cars marketed with &quot;Autopilot&quot; have a well-established record of killing occupants, pedestrians, and other drivers&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Most of your line-of-business software isn&#x27;t going to kill people, but software supply chains are complex: a library maintained by some guy in Nebraska&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; can show up in surprisingly mission-critical situations.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;society-wants-it&quot;&gt;Society wants it&lt;&#x2F;h2&gt;
&lt;p&gt;Professional licensure ensures both adequate competence and a commitment to public good.&lt;&#x2F;p&gt;
&lt;p&gt;Physicians take countless exams and traditionally recite some derivative of the Hippocratic oath, promising to do no harm with their practice of medicine. Engineers take the FE exam and the PE exam. Both professions follow their respective code of ethics.&lt;&#x2F;p&gt;
&lt;p&gt;If software engineering had had any serious commitment to the ACM&#x27;s 1999 code of ethics&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, I think the world would look different today. The profession has exerted herculean efforts enabling these societal harms:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;surveilling and amassing personal information&lt;&#x2F;li&gt;
&lt;li&gt;showing targeted ads for the highest bidder&lt;&#x2F;li&gt;
&lt;li&gt;rent-seeking and encrapifying marketplaces&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nonpractitioners-want-it&quot;&gt;Nonpractitioners want it&lt;&#x2F;h2&gt;
&lt;p&gt;By practitioners, I mean people who were already writing software for a living before LLMs or who could continue to do so if all LLMs were turned off.&lt;&#x2F;p&gt;
&lt;p&gt;AI lets anyone write software, even if they don&#x27;t want to or are not qualified to.&lt;&#x2F;p&gt;
&lt;p&gt;Mr. Big Boss can now ask Suzy Secretary to write a bossware app that tracks remote employees&#x27; app use and keystrokes. As of 2025, Suzy can no longer say &quot;I don&#x27;t know how to do that&quot; because with Claude Code and a 30 minute YouTube tutorial, she can. She has no code of ethics by which to say, &quot;I won&#x27;t do that&quot;. She also doesn&#x27;t know that the AI-generated spyware transmits company data over the web in plaintext. Suzy shouldn&#x27;t do this job, but she has no power to decline.&lt;&#x2F;p&gt;
&lt;p&gt;Mr. Big Boss could never ask Suzy to write him a pharmacy prescription. Why can he do that for software?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;practitioners-want-it&quot;&gt;Practitioners want it&lt;&#x2F;h2&gt;
&lt;p&gt;In the US, the titles &quot;Professional&#x2F;Licensed&#x2F;Registered Engineer&quot; are legally protected&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Without a license, it&#x27;s unlawful to market oneself using them.&lt;&#x2F;p&gt;
&lt;p&gt;In the U.S., most employment is at-will, meaning you can leave or be fired at any time and for any reason, but many states and federal laws create exceptions that can make a termination unlawful* when an engineer is fired for refusing to break the law or for protecting public health and safety. Many statutes are derived from the NSPE Code of Ethics.&lt;&#x2F;p&gt;
&lt;p&gt;I personally witnessed a professional engineer successfully sue our former employer which fired whim when he wouldn&#x27;t sign off on a medical device he didn&#x27;t think was ready to treat patients.&lt;&#x2F;p&gt;
&lt;p&gt;* I am not a lawyer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;customers-want-it&quot;&gt;Customers want it&lt;&#x2F;h2&gt;
&lt;p&gt;Licensure protects consumers, too. The threat of license revocation encourages responsible conduct.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to build a house, your architect has to convince a licensed structural engineer to sign off on the mechanical soundness of the structure. If the house later collapses, you have legal recourse against the engineer.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;objections&quot;&gt;Objections&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;licensure-doesn-t-make-software-better&quot;&gt;Licensure doesn&#x27;t make software better&lt;&#x2F;h2&gt;
&lt;p&gt;It does improve outcomes for the existing professions, and in three ways:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;It ensures a minimum level of competence.&lt;&#x2F;li&gt;
&lt;li&gt;It holds professionals accountable to a code of ethics.&lt;&#x2F;li&gt;
&lt;li&gt;It provides leverage for professionals to push back on forces that compromise quality.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;In a world where I hold a license to practice software engineering, I hold the keys to shipping legally. I have leverage when my project manager pushes back against unit tests and tech debt. They don&#x27;t hold a license, so they can&#x27;t ship without me.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;licensure-will-get-abused-by-political-actors&quot;&gt;Licensure will get abused by political actors&lt;&#x2F;h2&gt;
&lt;p&gt;On the contrary, licensure would give our profession a backbone and a voice. There&#x27;s no real unifying body for software engineers. For the vast majority of them, IEEE and ACM are irrelevant.&lt;&#x2F;p&gt;
&lt;p&gt;The AMA and NSPE respectively serve that role for physicians and engineers. Their age is measured in centuries, and they serve as nonpartisan beacons of ethics and professionalism.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;software-will-get-more-expensive&quot;&gt;Software will get more expensive.&lt;&#x2F;h2&gt;
&lt;p&gt;The upfront cost will increase, but a long tail of costs stemming from quality issues will decrease.&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s cheaper: to build a dam right or let it collapse and kill 400 people?&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s cheaper: Adding adequate driver awareness detection to Teslas or a fatal accident rate that&#x27;s twice the industry average?&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What costs more: Adding automated tests now or years of tech debt?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-can-engineers-without-a-license-find-work&quot;&gt;How can engineers without a license find work?&lt;&#x2F;h2&gt;
&lt;p&gt;The same as unlicensed civil engineers: behind the name of a licensed PE (professional engineer) who signs off on their work.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;can-suzy-still-write-software&quot;&gt;Can Suzy still write software?&lt;&#x2F;h2&gt;
&lt;p&gt;I think Suzy should be allowed to write her own apps and even share them with friends. To sell them or use them commercially, she needs a PE to sign off.&lt;&#x2F;p&gt;
&lt;p&gt;Like agriculture, you can grow your own tomatoes in your backyard, and you can bring a bag of them to share at work, but if you start selling them, the FDA might come visit.&lt;&#x2F;p&gt;
&lt;p&gt;When it comes to private activity, there are edge cases and nuance. It often comes down to scale and risk.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;You can DIY a shed but not a house.&lt;&#x2F;li&gt;
&lt;li&gt;You can self-prescribe ibuprofen but not oxycodone.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;is-software-free-speech&quot;&gt;Is software free speech?&lt;&#x2F;h2&gt;
&lt;p&gt;In the US, yes&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but causing public harm or encroaching on others&#x27; rights is not protected. For example, DeCSS was ruled to be illegal&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; even though it was free, noncommercial software.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;will-some-committee-tell-me-how-to-do-my-job-what-language-to-use-where-the-curly-braces-go-etc&quot;&gt;Will some committee tell me how to do my job? (What language to use, where the curly braces go, etc.)&lt;&#x2F;h2&gt;
&lt;p&gt;I think some recommendations are to be called for. These would provide some of that upward force on quality against the market&#x27;s tendency to push it down.&lt;&#x2F;p&gt;
&lt;p&gt;There is already pressure e.g. from NIST to use safer, more secure languages, like Rust or C# instead of C or C++. To that I would add QA standards like automated testing. Just like a structure must undergo inspection, it simply should not be a business&#x27;s choice to skip QA of software.&lt;&#x2F;p&gt;
&lt;p&gt;However, the software profession has a great deal of variety in the work it does and the tools it uses. It also changes very rapidly, since the field is extremely young compared to e.g. civil engineering. We shouldn&#x27;t enforce things we aren&#x27;t certain are beneficial.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-mechanisms-will-there-be-to-obtain-licensure&quot;&gt;What mechanisms will there be to obtain licensure?&lt;&#x2F;h2&gt;
&lt;p&gt;Like the existing PE, there would be training and exams. There would be statements to sign, like a code of ethics, as well as continuing education.&lt;&#x2F;p&gt;
&lt;p&gt;Grandfathering and exemptions were common in the early days of the PE. These would be awarded based factors like education, length of career, and reputation.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;isn-t-this-overkill-what-about-open-source-projects&quot;&gt;Isn&#x27;t this overkill? What about open-source projects?&lt;&#x2F;h2&gt;
&lt;p&gt;What I&#x27;m proposing is only for commercial software, at the end of the supply chain. A professional software engineer signs off on all of the packages and dependencies used in a product. Nothing changes for the guy working for free in Nebraska.&lt;&#x2F;p&gt;
&lt;p&gt;One of the differences between e.g. structural and software engineering is with the former, there is a clear distinction between design and construction, i.e. between idea and tangible artifact. A structural engineer doesn&#x27;t necessary even see the constructed building whose structural designs he approved. Software engineers handle both.&lt;&#x2F;p&gt;
&lt;p&gt;I considered conceding that we could require sign-off just for certain high-risk classes of software like automotive, medical, and aerospace or high-scale classes like social media, but that does not address the problem of everyday people selling or commercially deploying AI-generated software whose quality they aren&#x27;t able to ensure.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-about-versioning-do-i-need-a-sign-off-for-minor-revisions-and-bugfixes&quot;&gt;What about versioning? Do I need a sign off for minor revisions and bugfixes?&lt;&#x2F;h2&gt;
&lt;p&gt;Each public release of commercial software needs a sign off.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;so-my-wordpress-blog-needs-a-sign-off-for-each-post&quot;&gt;So my WordPress blog needs a sign off for each post?&lt;&#x2F;h2&gt;
&lt;p&gt;That&#x27;s publishing, not software, and requiring sign off on writing would encroach on free speech.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-would-it-be-enforced&quot;&gt;How would it be enforced?&lt;&#x2F;h2&gt;
&lt;p&gt;Probably via courts. We should look to the existing engineering disciplines for guidance and precedent.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Consider supporting licensure of sofware engineering. My aim is to protect:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;society from a deluge of low-quality software of uncertain provenance.&lt;&#x2F;li&gt;
&lt;li&gt;the craft and integrity of the profession from unethical demands.&lt;&#x2F;li&gt;
&lt;li&gt;nonpractitioners of software engineering from being consigned by their employers to write software they aren&#x27;t qualified to.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;next&quot;&gt;Next...&lt;&#x2F;h1&gt;
&lt;p&gt;Subscribe to my email list below. I plan to write more.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.finalroundai.com&#x2F;blog&#x2F;vibe-coding-failures-that-prove-ai-cant-replace-developers-yet&quot;&gt;5 Vibe Coding Failures That Prove AI Can&#x27;t Replace Developers Yet&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.enr.com&#x2F;articles&#x2F;61151-total-failure-of-st-francis-dam-renewed-calls-for-oversight&quot;&gt;Total Failure of St. Francis Dam Renewed Calls for Oversight&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;2024_CrowdStrike-related_IT_outages&quot;&gt;2024 CrowdStrike-related IT outages&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;List_of_Tesla_Autopilot_crashes&quot;&gt;List of Tesla Autopilot crashes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;2347&#x2F;&quot;&gt;XKCD: Dependency&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.acm.org&#x2F;code-of-ethics&#x2F;software-engineering-code&quot;&gt;The Software Engineering Code of Ethics and Professional Practice&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Regulation_and_licensure_in_engineering&quot;&gt;Regulation and licensure in engineering&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.iseecars.com&#x2F;most-dangerous-cars-study#v=2024&quot;&gt;The 23 Most Dangerous Cars On The Road&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bernstein_v._United_States&quot;&gt;Bernstein v. United States&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Universal_City_Studios,_Inc._v._Corley&quot;&gt;Universal City Studios, Inc. v. Corley&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;">&lt;p&gt;&lt;em&gt;Society restricts who can design bridges or prescribe medicine, but it lets anyone market their software. AI accelerates the problem. It&#x27;s in everyone&#x27;s interest that states require licensure of software engineers.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;2019_vs_2025_bridges_software.png&quot; alt=&quot;Diagram contrasting who can make bridges in 2025 with who can make software in 2025. Nothing has changed for structural engineering, but now anyone can write software.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    AI has dramatically broadened who can create software.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;why-i-care&quot;&gt;Why I care&lt;&#x2F;h1&gt;
&lt;p&gt;I almost became an engineer. From 2008, I spent three years pursuing a degree in computer engineering. I sat in engineering fundamentals and ethics courses with people who became engineers: mechanical, electrical, aerospace, nuclear, and others. We all planned to graduate, pass the FE exam, work a while, pass the PE exam, and become licensed professional engineers.&lt;&#x2F;p&gt;
&lt;p&gt;Then I switched to computer science. At the time, the thought of government adding red tape to my career path angered me. You don&#x27;t even need a degree to become a software engineer. You just have to convince someone to hire you into that role.&lt;&#x2F;p&gt;
&lt;p&gt;Fast forward to 2025, and the barrier to entry is even lower. AI lets anyone ship software, and it&#x27;s causing an avalanche of quality issues&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The classic engineering disciplines have spent centuries learning hard lessons about cost and quality. My profession could learn a thing or two from them.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;why-do-we-have-engineering-licensure&quot;&gt;Why do we have engineering licensure?&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;how-the-us-got-started&quot;&gt;How the US got started&lt;&#x2F;h2&gt;
&lt;p&gt;On March 12, 1928, the St. Francis dam near Los Angeles had stood for just under two years when it collapsed with almost no warning. Flood water surged down the San Francisquito Canyon, drowning over 400 people and causing extensive damage to man-made structures and the environment&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;francis_dam_before.jpg&quot; alt=&quot;Picture of the St. Francis dam before its collapse. It&#x27;s a wide but not tall structure holding back a majestic manmade lake.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    The St. Francis Dam before its collapse
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;francis_dam_after.webp&quot; alt=&quot;Picture of the St. Francis dam after its collapse. All that remains is a small section of the original retaining wall. The carnage of flood water is evident.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    The St. Francis Dam after its collapse. 
    &lt;br&#x2F;&gt;Just a small section of the wall remained, nicknamed &quot;the tombstone&quot;.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;The immediate cause was the material on which the dam rested essentially dissolved and eroded away when it became wet.
The proximal cause was the dam&#x27;s designer was not qualified to design dams, and being self-taught, made critical errors in judgement.
The root cause was a public policy which permitted the design and construction of dams by unqualified people and without independent review.&lt;&#x2F;p&gt;
&lt;p&gt;Just over a year after the collapse, California enacted its Civil Engineers Act, making it the second US state to regulate licensure of engineers. By 1947, all states had created similar licensure laws for Civil, Mechanical, and Electrical engineers.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;licensure-lifts-quality&quot;&gt;Licensure lifts quality&lt;&#x2F;h2&gt;
&lt;p&gt;Market forces exert a downward pressure on cost and therefore on the quality of products and services. Licensure of professionals, combined with the standards they must follow, protects public welfare by exerting a counteracting upward force on quality.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;market_vs_licensure.png&quot; alt=&quot;Diagram showing that market forces push prices and quality down, while licensure and standards push them up.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Licensure sets a minimum bar for quality and upfront cost. 
    &lt;br&#x2F;&gt;Read more about cost in &lt;a href=&quot;#software-will-get-more-expensive&quot;&gt;Objections&lt;&#x2F;a&gt;.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;For example, the International Building Code specifies a minimum load a roof must be able to hold up. Without this requirement, structural engineers might cave when pressured to find ways to make a building cheaper.&lt;&#x2F;p&gt;
&lt;p&gt;Another way to look at it is, competing firms find themselves in a prisoner&#x27;s dilemma where they all &lt;em&gt;could&lt;&#x2F;em&gt; cooperate and offer high quality goods. If any one of them defects by offering a lower price, then to maintain market share, all firms must follow suit. A Nash equilibrium emerges where nobody offers quality goods. Markets do segment; it&#x27;s how Jones soda can exist in the same world as Coca Cola and Pepsi, but they all follow FDA standards for water quality.&lt;&#x2F;p&gt;
&lt;p&gt;Licensure lifts the Nash equilibrium to a higher level of quality, since no participant has the choice to cut certain costs.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;why-license-software-engineers&quot;&gt;Why license software engineers?&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;software-can-harm-people&quot;&gt;Software can Harm People&lt;&#x2F;h2&gt;
&lt;p&gt;The collapse of a dam, bridge, or building is tragic when it costs lives. Bad medicine is also insidious: it promises a cure but delivers none or actively harms the patient.&lt;&#x2F;p&gt;
&lt;p&gt;Software is less tangible, but it can also cause widespread harm. For example:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;In 2024, the global Crowdstrike outage brought down 18,000 customers and businesses, including retail stores, banks, universities, airports, hospitals, and governments&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Tesla&#x27;s self-driving cars marketed with &quot;Autopilot&quot; have a well-established record of killing occupants, pedestrians, and other drivers&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Most of your line-of-business software isn&#x27;t going to kill people, but software supply chains are complex: a library maintained by some guy in Nebraska&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; can show up in surprisingly mission-critical situations.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;society-wants-it&quot;&gt;Society wants it&lt;&#x2F;h2&gt;
&lt;p&gt;Professional licensure ensures both adequate competence and a commitment to public good.&lt;&#x2F;p&gt;
&lt;p&gt;Physicians take countless exams and traditionally recite some derivative of the Hippocratic oath, promising to do no harm with their practice of medicine. Engineers take the FE exam and the PE exam. Both professions follow their respective code of ethics.&lt;&#x2F;p&gt;
&lt;p&gt;If software engineering had had any serious commitment to the ACM&#x27;s 1999 code of ethics&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, I think the world would look different today. The profession has exerted herculean efforts enabling these societal harms:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;surveilling and amassing personal information&lt;&#x2F;li&gt;
&lt;li&gt;showing targeted ads for the highest bidder&lt;&#x2F;li&gt;
&lt;li&gt;rent-seeking and encrapifying marketplaces&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nonpractitioners-want-it&quot;&gt;Nonpractitioners want it&lt;&#x2F;h2&gt;
&lt;p&gt;By practitioners, I mean people who were already writing software for a living before LLMs or who could continue to do so if all LLMs were turned off.&lt;&#x2F;p&gt;
&lt;p&gt;AI lets anyone write software, even if they don&#x27;t want to or are not qualified to.&lt;&#x2F;p&gt;
&lt;p&gt;Mr. Big Boss can now ask Suzy Secretary to write a bossware app that tracks remote employees&#x27; app use and keystrokes. As of 2025, Suzy can no longer say &quot;I don&#x27;t know how to do that&quot; because with Claude Code and a 30 minute YouTube tutorial, she can. She has no code of ethics by which to say, &quot;I won&#x27;t do that&quot;. She also doesn&#x27;t know that the AI-generated spyware transmits company data over the web in plaintext. Suzy shouldn&#x27;t do this job, but she has no power to decline.&lt;&#x2F;p&gt;
&lt;p&gt;Mr. Big Boss could never ask Suzy to write him a pharmacy prescription. Why can he do that for software?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;practitioners-want-it&quot;&gt;Practitioners want it&lt;&#x2F;h2&gt;
&lt;p&gt;In the US, the titles &quot;Professional&#x2F;Licensed&#x2F;Registered Engineer&quot; are legally protected&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Without a license, it&#x27;s unlawful to market oneself using them.&lt;&#x2F;p&gt;
&lt;p&gt;In the U.S., most employment is at-will, meaning you can leave or be fired at any time and for any reason, but many states and federal laws create exceptions that can make a termination unlawful* when an engineer is fired for refusing to break the law or for protecting public health and safety. Many statutes are derived from the NSPE Code of Ethics.&lt;&#x2F;p&gt;
&lt;p&gt;I personally witnessed a professional engineer successfully sue our former employer which fired whim when he wouldn&#x27;t sign off on a medical device he didn&#x27;t think was ready to treat patients.&lt;&#x2F;p&gt;
&lt;p&gt;* I am not a lawyer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;customers-want-it&quot;&gt;Customers want it&lt;&#x2F;h2&gt;
&lt;p&gt;Licensure protects consumers, too. The threat of license revocation encourages responsible conduct.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to build a house, your architect has to convince a licensed structural engineer to sign off on the mechanical soundness of the structure. If the house later collapses, you have legal recourse against the engineer.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;objections&quot;&gt;Objections&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;licensure-doesn-t-make-software-better&quot;&gt;Licensure doesn&#x27;t make software better&lt;&#x2F;h2&gt;
&lt;p&gt;It does improve outcomes for the existing professions, and in three ways:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;It ensures a minimum level of competence.&lt;&#x2F;li&gt;
&lt;li&gt;It holds professionals accountable to a code of ethics.&lt;&#x2F;li&gt;
&lt;li&gt;It provides leverage for professionals to push back on forces that compromise quality.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;In a world where I hold a license to practice software engineering, I hold the keys to shipping legally. I have leverage when my project manager pushes back against unit tests and tech debt. They don&#x27;t hold a license, so they can&#x27;t ship without me.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;licensure-will-get-abused-by-political-actors&quot;&gt;Licensure will get abused by political actors&lt;&#x2F;h2&gt;
&lt;p&gt;On the contrary, licensure would give our profession a backbone and a voice. There&#x27;s no real unifying body for software engineers. For the vast majority of them, IEEE and ACM are irrelevant.&lt;&#x2F;p&gt;
&lt;p&gt;The AMA and NSPE respectively serve that role for physicians and engineers. Their age is measured in centuries, and they serve as nonpartisan beacons of ethics and professionalism.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;software-will-get-more-expensive&quot;&gt;Software will get more expensive.&lt;&#x2F;h2&gt;
&lt;p&gt;The upfront cost will increase, but a long tail of costs stemming from quality issues will decrease.&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s cheaper: to build a dam right or let it collapse and kill 400 people?&lt;&#x2F;p&gt;
&lt;p&gt;What&#x27;s cheaper: Adding adequate driver awareness detection to Teslas or a fatal accident rate that&#x27;s twice the industry average?&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What costs more: Adding automated tests now or years of tech debt?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-can-engineers-without-a-license-find-work&quot;&gt;How can engineers without a license find work?&lt;&#x2F;h2&gt;
&lt;p&gt;The same as unlicensed civil engineers: behind the name of a licensed PE (professional engineer) who signs off on their work.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;can-suzy-still-write-software&quot;&gt;Can Suzy still write software?&lt;&#x2F;h2&gt;
&lt;p&gt;I think Suzy should be allowed to write her own apps and even share them with friends. To sell them or use them commercially, she needs a PE to sign off.&lt;&#x2F;p&gt;
&lt;p&gt;Like agriculture, you can grow your own tomatoes in your backyard, and you can bring a bag of them to share at work, but if you start selling them, the FDA might come visit.&lt;&#x2F;p&gt;
&lt;p&gt;When it comes to private activity, there are edge cases and nuance. It often comes down to scale and risk.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;You can DIY a shed but not a house.&lt;&#x2F;li&gt;
&lt;li&gt;You can self-prescribe ibuprofen but not oxycodone.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;is-software-free-speech&quot;&gt;Is software free speech?&lt;&#x2F;h2&gt;
&lt;p&gt;In the US, yes&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but causing public harm or encroaching on others&#x27; rights is not protected. For example, DeCSS was ruled to be illegal&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;its-time-to-license-software-engineering&#x2F;#references&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; even though it was free, noncommercial software.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;will-some-committee-tell-me-how-to-do-my-job-what-language-to-use-where-the-curly-braces-go-etc&quot;&gt;Will some committee tell me how to do my job? (What language to use, where the curly braces go, etc.)&lt;&#x2F;h2&gt;
&lt;p&gt;I think some recommendations are to be called for. These would provide some of that upward force on quality against the market&#x27;s tendency to push it down.&lt;&#x2F;p&gt;
&lt;p&gt;There is already pressure e.g. from NIST to use safer, more secure languages, like Rust or C# instead of C or C++. To that I would add QA standards like automated testing. Just like a structure must undergo inspection, it simply should not be a business&#x27;s choice to skip QA of software.&lt;&#x2F;p&gt;
&lt;p&gt;However, the software profession has a great deal of variety in the work it does and the tools it uses. It also changes very rapidly, since the field is extremely young compared to e.g. civil engineering. We shouldn&#x27;t enforce things we aren&#x27;t certain are beneficial.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-mechanisms-will-there-be-to-obtain-licensure&quot;&gt;What mechanisms will there be to obtain licensure?&lt;&#x2F;h2&gt;
&lt;p&gt;Like the existing PE, there would be training and exams. There would be statements to sign, like a code of ethics, as well as continuing education.&lt;&#x2F;p&gt;
&lt;p&gt;Grandfathering and exemptions were common in the early days of the PE. These would be awarded based factors like education, length of career, and reputation.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;isn-t-this-overkill-what-about-open-source-projects&quot;&gt;Isn&#x27;t this overkill? What about open-source projects?&lt;&#x2F;h2&gt;
&lt;p&gt;What I&#x27;m proposing is only for commercial software, at the end of the supply chain. A professional software engineer signs off on all of the packages and dependencies used in a product. Nothing changes for the guy working for free in Nebraska.&lt;&#x2F;p&gt;
&lt;p&gt;One of the differences between e.g. structural and software engineering is with the former, there is a clear distinction between design and construction, i.e. between idea and tangible artifact. A structural engineer doesn&#x27;t necessary even see the constructed building whose structural designs he approved. Software engineers handle both.&lt;&#x2F;p&gt;
&lt;p&gt;I considered conceding that we could require sign-off just for certain high-risk classes of software like automotive, medical, and aerospace or high-scale classes like social media, but that does not address the problem of everyday people selling or commercially deploying AI-generated software whose quality they aren&#x27;t able to ensure.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-about-versioning-do-i-need-a-sign-off-for-minor-revisions-and-bugfixes&quot;&gt;What about versioning? Do I need a sign off for minor revisions and bugfixes?&lt;&#x2F;h2&gt;
&lt;p&gt;Each public release of commercial software needs a sign off.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;so-my-wordpress-blog-needs-a-sign-off-for-each-post&quot;&gt;So my WordPress blog needs a sign off for each post?&lt;&#x2F;h2&gt;
&lt;p&gt;That&#x27;s publishing, not software, and requiring sign off on writing would encroach on free speech.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-would-it-be-enforced&quot;&gt;How would it be enforced?&lt;&#x2F;h2&gt;
&lt;p&gt;Probably via courts. We should look to the existing engineering disciplines for guidance and precedent.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Consider supporting licensure of sofware engineering. My aim is to protect:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;society from a deluge of low-quality software of uncertain provenance.&lt;&#x2F;li&gt;
&lt;li&gt;the craft and integrity of the profession from unethical demands.&lt;&#x2F;li&gt;
&lt;li&gt;nonpractitioners of software engineering from being consigned by their employers to write software they aren&#x27;t qualified to.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;next&quot;&gt;Next...&lt;&#x2F;h1&gt;
&lt;p&gt;Subscribe to my email list below. I plan to write more.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.finalroundai.com&#x2F;blog&#x2F;vibe-coding-failures-that-prove-ai-cant-replace-developers-yet&quot;&gt;5 Vibe Coding Failures That Prove AI Can&#x27;t Replace Developers Yet&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.enr.com&#x2F;articles&#x2F;61151-total-failure-of-st-francis-dam-renewed-calls-for-oversight&quot;&gt;Total Failure of St. Francis Dam Renewed Calls for Oversight&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;2024_CrowdStrike-related_IT_outages&quot;&gt;2024 CrowdStrike-related IT outages&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;List_of_Tesla_Autopilot_crashes&quot;&gt;List of Tesla Autopilot crashes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;2347&#x2F;&quot;&gt;XKCD: Dependency&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.acm.org&#x2F;code-of-ethics&#x2F;software-engineering-code&quot;&gt;The Software Engineering Code of Ethics and Professional Practice&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Regulation_and_licensure_in_engineering&quot;&gt;Regulation and licensure in engineering&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.iseecars.com&#x2F;most-dangerous-cars-study#v=2024&quot;&gt;The 23 Most Dangerous Cars On The Road&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bernstein_v._United_States&quot;&gt;Bernstein v. United States&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Universal_City_Studios,_Inc._v._Corley&quot;&gt;Universal City Studios, Inc. v. Corley&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>About that Gig Fixing Vibe Code Slop</title>
        <published>2025-09-05T00:00:00+00:00</published>
        <updated>2025-09-05T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;AI now lets anyone write software, but it has limits. People will call upon software practitioners to fix their AI-generated code. Learn how to decide when to take that gig.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;.&#x2F;2019_vs_2025_software.png&quot; alt=&quot;&quot; title=&quot;Venn diagrams showing that AI lets more people make software&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Venn diagrams showing that AI lets more people make software
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;everyone-can-make-apps-now-sort-of&quot;&gt;Everyone Can Make Apps Now, sort of&lt;&#x2F;h1&gt;
&lt;p&gt;All over the world, people who haven&#x27;t written a line of code in their life are using chat bots and coding agents to code up their dream product or app.&lt;&#x2F;p&gt;
&lt;p&gt;Venture capitalists, MBAs, project managers, visual designers, auto mechanics, and even elementary schoolers are now able to obtain working implementations of their ideas, and for a fraction of the cost. In 2025, you can pay a developer $10,000 to make a web app in a few weeks, or you can pay an AI company $2 in tokens and ship in a few hours.&lt;&#x2F;p&gt;
&lt;p&gt;But LLMs have limits:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Context windows limit how much code and conversation they can digest.&lt;&#x2F;li&gt;
&lt;li&gt;Hallucinations interpolate false information.&lt;&#x2F;li&gt;
&lt;li&gt;A lack of long term memory means each morning is the first day on the job.&lt;&#x2F;li&gt;
&lt;li&gt;A lack of emotion and metacognition means they don&#x27;t get that &quot;sinking feeling&quot; that causes humans to pause and assess their choices.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The ease of starting a software project leaves nontechnical people surprised when they hit a productivity wall. This is a risk for them &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup&gt; &lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but an opportunity for you.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;practitioners-to-the-rescue-maybe&quot;&gt;Practitioners to the Rescue, maybe&lt;&#x2F;h1&gt;
&lt;p&gt;When AI leaves a nontechnical person up a creek without paddle, there&#x27;s a nonzero chance they&#x27;ll be ready to hand the work over to a professional.&lt;&#x2F;p&gt;
&lt;p&gt;Why? Maybe their reputation is on the line, or their company&#x27;s revenue. Maybe their proof of concept demonstrated enough value to justify making it production-ready. Maybe the prototype is already in production and its bugs have caused downtime, data loss, or customer churn.&lt;&#x2F;p&gt;
&lt;p&gt;Whatever the circumstance, if you can read and write software without LLMs, you can charge money to make their problem your problem. When you receive that call, email, or LinkedIn message, what will your answer be? Before you sign, should know what you&#x27;re getting into.&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;re dealing with a special category of &lt;em&gt;legacy code&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;ai_code_venn.png&quot; alt=&quot;A Venn diagram showing that AI-generated code is a kind of legacy code&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A Venn diagram showing that AI-generated code is a kind of legacy code
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;what-is-legacy-code&quot;&gt;What Is Legacy Code?&lt;&#x2F;h1&gt;
&lt;p&gt;You know you&#x27;re dealing with legacy code when either:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;It&#x27;s a &lt;em&gt;huge codebase&lt;&#x2F;em&gt;: even ideal code in high quantities is expensive to change.&lt;&#x2F;li&gt;
&lt;li&gt;You have &lt;em&gt;low confidence&lt;&#x2F;em&gt; that the code is or will remain correct.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The general topic of legacy code maintenance is already addressed in some great literature &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Since it&#x27;s not currently within the abilities of LLMs to generate very large codebases, this short post will focus on &lt;em&gt;confidence&lt;&#x2F;em&gt; .&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-do-we-know-when-software-is-correct&quot;&gt;How do we know when software is correct?&lt;&#x2F;h2&gt;
&lt;p&gt;Software practitioners have three gates at their disposal to catch software defects:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Runtime&lt;&#x2F;strong&gt;. The app has errors when you run it. They can surface to users, like error messages, or remain hidden, like logs. Unit and integration tests attempt to reveal errors at runtime.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Compile time&lt;&#x2F;strong&gt;. The compiler yells at you on your dev machine or in your CI&#x2F;CD pipeline, because for example you can&#x27;t do &lt;code&gt;Dog fido = new Cat()&lt;&#x2F;code&gt;. You can&#x27;t run code that won&#x27;t compile.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Design time&lt;&#x2F;strong&gt;. This one is trickier. A bad design will compile and run. There&#x27;s no automated way to evaluate design. It has to do with fulfilling the software&#x27;s requirements, and in a way that keeps the software simple and easy to change. It&#x27;s about structure and language: boxes and arrows; lexicons and metaphors. I explored the relationship between design and code in a previous post &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You will notice that runtime occurs after compile time, which occurs after design time. In general, it is most cost-effective to shift errors from runtime to compile time and from compile time to design time. When using an iterative SDLC, the time between each step is shortened, but the sequence is still there.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;design_compile_runtime.png&quot; alt=&quot;A 2D chart comparing the cost of fixing code at design time, compile time, and runtime.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
		It&#x27;s more expensive to fix code at runtime than at compile time and at compile time than at design time.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Unfortunately, AI rushes people to runtime as fast as possible.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;when-don-t-we-have-confidence&quot;&gt;When don&#x27;t we have confidence?&lt;&#x2F;h2&gt;
&lt;p&gt;From the previous points, we can see that there are a few reasons one might feel reluctant to change legacy code:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Runtime
&lt;ul&gt;
&lt;li&gt;There are no automated regression tests.&lt;&#x2F;li&gt;
&lt;li&gt;There are no manual regression tests.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Compile time
&lt;ul&gt;
&lt;li&gt;The language doesn&#x27;t discover errors at compile time, i.e. it is interpreted, dynamically typed, or weakly typed. Examples include Python, Ruby, and JavaScript.&lt;&#x2F;li&gt;
&lt;li&gt;The code doesn&#x27;t make use of the compiler&#x27;s type system. For example, it uses strings like &lt;code&gt;&quot;Employee&quot;&lt;&#x2F;code&gt; and &lt;code&gt;&quot;Admin&quot;&lt;&#x2F;code&gt; instead of value types like &lt;code&gt;record Employee; record Admin&lt;&#x2F;code&gt; or enums like &lt;code&gt;enum User { Employee, Admin }&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Design time
&lt;ul&gt;
&lt;li&gt;There is no &lt;strong&gt;specification&lt;&#x2F;strong&gt;, i.e. what the code should do is not written down.&lt;&#x2F;li&gt;
&lt;li&gt;There is no &lt;strong&gt;documentation&lt;&#x2F;strong&gt;, i.e. no knowledge about the code&#x27;s internal structure or design is written down.&lt;&#x2F;li&gt;
&lt;li&gt;There are no &lt;strong&gt;domain experts&lt;&#x2F;strong&gt;, i.e. people who know about the problem the software solves.&lt;&#x2F;li&gt;
&lt;li&gt;There are no &lt;strong&gt;code experts&lt;&#x2F;strong&gt;, such as a developer who wrote the code. The bus factor &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; is zero.&lt;&#x2F;li&gt;
&lt;li&gt;The code is &lt;strong&gt;badly structured&lt;&#x2F;strong&gt;, i.e. hard to understand and hard to change.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;unique-qualities-of-ai-generated-code&quot;&gt;Unique Qualities of AI-Generated Code&lt;&#x2F;h2&gt;
&lt;p&gt;AI-generated code inherits the characteristics of legacy code but is especially likely to have these:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Low internal quality&lt;&#x2F;strong&gt;. You&#x27;ll hear this feedback from developers: &quot;this code makes no sense&quot;. They may be referring the code&#x27;s poor structure: duplication, inconsistent patterns, or to poor naming and a lack of coherence between the code and the part of the world the software interacts with. The result is the code is hard to understand and hard to change.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Low external quality&lt;&#x2F;strong&gt;. You&#x27;ll hear this kind of feedback from non-developers, with phrases like, &quot;this thing kind of does what I want, but not quite&quot; or &quot;this thing is so buggy&quot;. The code fulfills its requirements partially or circumstantially.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;High Quantity to Age Ratio&lt;&#x2F;strong&gt;. You don&#x27;t need AI to write legacy code. Humans do it every day, but AI can do it faster.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;the-confidence-rubric&quot;&gt;The Confidence Rubric&lt;&#x2F;h1&gt;
&lt;p&gt;My &lt;em&gt;Confidence Rubric&lt;&#x2F;em&gt; evaluates the previously discussed factors to score how painful a codebase will be to work in.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Spec&lt;&#x2F;th&gt;&lt;th&gt;Docs&lt;&#x2F;th&gt;&lt;th&gt;Code Expert&lt;&#x2F;th&gt;&lt;th&gt;Domain Expert&lt;&#x2F;th&gt;&lt;th&gt;Tests&lt;&#x2F;th&gt;&lt;th&gt;Structure&lt;&#x2F;th&gt;&lt;th&gt;Language&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Let&#x27;s fill in the rubric while considering two made-up scenarios.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;scenario-auto-repair-shop&quot;&gt;Scenario: Auto Repair Shop&lt;&#x2F;h2&gt;
&lt;p&gt;James runs a car repair shop by himself. A YouTube video taught him to use Lovable to write a web app to track his small business&#x27;s tools and parts inventory. It wrote the frontend in ReactJS and the backend in Python+Flask+Postgres. There are no automated tests, docs, or specs.&lt;&#x2F;p&gt;
&lt;p&gt;The app works fine, but Lovable has trouble iterating from there. After James hires two employees, he needs to track who has which tools. He asks Lovable what to do. It recommends implementing identity, authentication, and authorization. That&#x27;s total overkill: OAuth is hard, and simpler solutions would work. James doesn&#x27;t know that, so he says go for it. Lovable goes down a rabbit hole and can&#x27;t get it working. After burning four hours on a Sunday afternoon, James gets fed up and the next day calls a software consultancy.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s our confidence rubric for James:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Spec&lt;&#x2F;th&gt;&lt;th&gt;Docs&lt;&#x2F;th&gt;&lt;th&gt;Experts (Code | Domain)&lt;&#x2F;th&gt;&lt;th&gt;Tests&lt;&#x2F;th&gt;&lt;th&gt;Structure&lt;&#x2F;th&gt;&lt;th&gt;Language&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;❌&lt;&#x2F;td&gt;&lt;td&gt;❌&lt;&#x2F;td&gt;&lt;td&gt;❌ | ✅&lt;&#x2F;td&gt;&lt;td&gt;❌&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;❌&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;There&#x27;s only one thing going for this codebase, which is that you can talk to James.&lt;&#x2F;p&gt;
&lt;p&gt;Notice we haven&#x27;t evaluated the structure. We won&#x27;t cover that deep topic in this post, but if you have the opportunity, sign an NDA and have a look at the actual code before committing to the job.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;scenario-small-vc-firm&quot;&gt;Scenario: Small VC Firm&lt;&#x2F;h2&gt;
&lt;p&gt;Susan studied at a major USA university. She took a year of computer science before switching to an MBA. After college, she worked at Big Enterprise, but for the last five years she&#x27;s worked at a small venture capital firm. She&#x27;s not a developer, but she remembers some things from her CS program and her time at the Big Enterprise. She follows a tutorial and has Claude Code write a web app to manage her company&#x27;s investment portfolio. She asks Claude to write the app using the same technologies she knew worked at the Big Enterprise: ASP.NET Core Blazor + Azure App Service and Managed SQL Database. Following the tutorial, she writes her requirements in a &lt;code&gt;Requirements.md&lt;&#x2F;code&gt; file and has Claude and track its progress across sessions in a &lt;code&gt;Tasks.md&lt;&#x2F;code&gt; file as well as keep a &lt;code&gt;README.md&lt;&#x2F;code&gt; file up to date. She has Claude commit incrementally using git. There are integration tests which run the app in a browser against an in-memory DB, click buttons, fill and submit forms, and verify expected changes in the DB.&lt;&#x2F;p&gt;
&lt;p&gt;The app is a hit, since everyone at the firm is tired of sharing spreadsheets. Not long after, Susan retires, and her younger colleague Mark inherits her work. The app hums along unmaintained for months. One day, the CEO is out on the putting green and opens the web app on his phone. He notices that it looks terrible; Susan only ever tested it on her 1080p work monitor. He calls up Mark and asks him to make it mobile-friendly. Mark has no idea and is busy; he immediately reaches out to a consultant.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s our confidence rubric for Mark:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Spec&lt;&#x2F;th&gt;&lt;th&gt;Docs&lt;&#x2F;th&gt;&lt;th&gt;Experts (Code | Domain)&lt;&#x2F;th&gt;&lt;th&gt;Tests&lt;&#x2F;th&gt;&lt;th&gt;Structure&lt;&#x2F;th&gt;&lt;th&gt;Language&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;✅&lt;&#x2F;td&gt;&lt;td&gt;✅&lt;&#x2F;td&gt;&lt;td&gt;❌ | ❌&lt;&#x2F;td&gt;&lt;td&gt;✅&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;✅&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Without even looking at the code, it&#x27;s already looking like Mark&#x27;s project will be easier to work on than James, but there is still more to consider.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;human-and-organizational-factors&quot;&gt;Human and Organizational Factors&lt;&#x2F;h1&gt;
&lt;p&gt;Outside of the code, there are nontechnical factors that can affect any software project: there can be difficult personalities, tall management structures, entrenched political actors, and misaligned expectations.&lt;&#x2F;p&gt;
&lt;p&gt;While James&#x27; code might be a bigger lift, I&#x27;ll bet working with him would be more straightforward than proxying through Mark to his CEO, who is busy flying around doing VC things. On the other hand, I&#x27;ll bet that a VC firm is less price sensitive than a car repair shop.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;managing-expectations&quot;&gt;Managing Expectations&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;Stable&lt;&#x2F;em&gt; and &lt;em&gt;boring&lt;&#x2F;em&gt; often describe legacy code. It&#x27;s often old and business-critical, and an established organization understands that it takes time to turn a big ship.&lt;&#x2F;p&gt;
&lt;p&gt;With AI-generated code, there&#x27;s none of the stable cash-minting of an old lethargic codebase. While it may not be business-critical, there is likely schedule pressure to fix the mess. To the business, you&#x27;ll feel slow compared to the quick start AI gave them. You&#x27;ll need communicate expectations and sell the business on the ROI of finishing the job.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;When you&#x27;re offered a job or gig fixing AI-generated Code, give pause.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;AI-generated code is a lot like legacy code, with some unique characteristics.&lt;&#x2F;li&gt;
&lt;li&gt;Not all AI-generated codebases are the same. Use the Confidence Rubric discern between them.&lt;&#x2F;li&gt;
&lt;li&gt;Consider the human and organizational factors.&lt;&#x2F;li&gt;
&lt;li&gt;Consider the customer&#x27;s willingness to pay.&lt;&#x2F;li&gt;
&lt;li&gt;Bigger headaches merit bigger checks, because you bring more value to the business.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;It&#x27;s Not Tech Debt. It&#x27;s Tech Risk.&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;tech-risk-is-business-risk&#x2F;&quot;&gt;Tech Risk is Business Risk&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;25544117-brutal-refactoring&quot;&gt;Brutal Refactoring&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;44919.Working_Effectively_with_Legacy_Code&quot;&gt;Working Effectively with Legacy Code&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;a-design-is-a-mold-for-code&#x2F;&quot;&gt;A Design is a Mold for Code&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bus_factor&quot;&gt;Bus factor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;">&lt;p&gt;&lt;em&gt;AI now lets anyone write software, but it has limits. People will call upon software practitioners to fix their AI-generated code. Learn how to decide when to take that gig.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;.&#x2F;2019_vs_2025_software.png&quot; alt=&quot;&quot; title=&quot;Venn diagrams showing that AI lets more people make software&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Venn diagrams showing that AI lets more people make software
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;everyone-can-make-apps-now-sort-of&quot;&gt;Everyone Can Make Apps Now, sort of&lt;&#x2F;h1&gt;
&lt;p&gt;All over the world, people who haven&#x27;t written a line of code in their life are using chat bots and coding agents to code up their dream product or app.&lt;&#x2F;p&gt;
&lt;p&gt;Venture capitalists, MBAs, project managers, visual designers, auto mechanics, and even elementary schoolers are now able to obtain working implementations of their ideas, and for a fraction of the cost. In 2025, you can pay a developer $10,000 to make a web app in a few weeks, or you can pay an AI company $2 in tokens and ship in a few hours.&lt;&#x2F;p&gt;
&lt;p&gt;But LLMs have limits:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Context windows limit how much code and conversation they can digest.&lt;&#x2F;li&gt;
&lt;li&gt;Hallucinations interpolate false information.&lt;&#x2F;li&gt;
&lt;li&gt;A lack of long term memory means each morning is the first day on the job.&lt;&#x2F;li&gt;
&lt;li&gt;A lack of emotion and metacognition means they don&#x27;t get that &quot;sinking feeling&quot; that causes humans to pause and assess their choices.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The ease of starting a software project leaves nontechnical people surprised when they hit a productivity wall. This is a risk for them &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup&gt; &lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but an opportunity for you.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;practitioners-to-the-rescue-maybe&quot;&gt;Practitioners to the Rescue, maybe&lt;&#x2F;h1&gt;
&lt;p&gt;When AI leaves a nontechnical person up a creek without paddle, there&#x27;s a nonzero chance they&#x27;ll be ready to hand the work over to a professional.&lt;&#x2F;p&gt;
&lt;p&gt;Why? Maybe their reputation is on the line, or their company&#x27;s revenue. Maybe their proof of concept demonstrated enough value to justify making it production-ready. Maybe the prototype is already in production and its bugs have caused downtime, data loss, or customer churn.&lt;&#x2F;p&gt;
&lt;p&gt;Whatever the circumstance, if you can read and write software without LLMs, you can charge money to make their problem your problem. When you receive that call, email, or LinkedIn message, what will your answer be? Before you sign, should know what you&#x27;re getting into.&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;re dealing with a special category of &lt;em&gt;legacy code&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;ai_code_venn.png&quot; alt=&quot;A Venn diagram showing that AI-generated code is a kind of legacy code&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A Venn diagram showing that AI-generated code is a kind of legacy code
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;what-is-legacy-code&quot;&gt;What Is Legacy Code?&lt;&#x2F;h1&gt;
&lt;p&gt;You know you&#x27;re dealing with legacy code when either:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;It&#x27;s a &lt;em&gt;huge codebase&lt;&#x2F;em&gt;: even ideal code in high quantities is expensive to change.&lt;&#x2F;li&gt;
&lt;li&gt;You have &lt;em&gt;low confidence&lt;&#x2F;em&gt; that the code is or will remain correct.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The general topic of legacy code maintenance is already addressed in some great literature &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Since it&#x27;s not currently within the abilities of LLMs to generate very large codebases, this short post will focus on &lt;em&gt;confidence&lt;&#x2F;em&gt; .&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-do-we-know-when-software-is-correct&quot;&gt;How do we know when software is correct?&lt;&#x2F;h2&gt;
&lt;p&gt;Software practitioners have three gates at their disposal to catch software defects:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Runtime&lt;&#x2F;strong&gt;. The app has errors when you run it. They can surface to users, like error messages, or remain hidden, like logs. Unit and integration tests attempt to reveal errors at runtime.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Compile time&lt;&#x2F;strong&gt;. The compiler yells at you on your dev machine or in your CI&#x2F;CD pipeline, because for example you can&#x27;t do &lt;code&gt;Dog fido = new Cat()&lt;&#x2F;code&gt;. You can&#x27;t run code that won&#x27;t compile.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Design time&lt;&#x2F;strong&gt;. This one is trickier. A bad design will compile and run. There&#x27;s no automated way to evaluate design. It has to do with fulfilling the software&#x27;s requirements, and in a way that keeps the software simple and easy to change. It&#x27;s about structure and language: boxes and arrows; lexicons and metaphors. I explored the relationship between design and code in a previous post &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You will notice that runtime occurs after compile time, which occurs after design time. In general, it is most cost-effective to shift errors from runtime to compile time and from compile time to design time. When using an iterative SDLC, the time between each step is shortened, but the sequence is still there.&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;design_compile_runtime.png&quot; alt=&quot;A 2D chart comparing the cost of fixing code at design time, compile time, and runtime.&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
		It&#x27;s more expensive to fix code at runtime than at compile time and at compile time than at design time.
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Unfortunately, AI rushes people to runtime as fast as possible.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;when-don-t-we-have-confidence&quot;&gt;When don&#x27;t we have confidence?&lt;&#x2F;h2&gt;
&lt;p&gt;From the previous points, we can see that there are a few reasons one might feel reluctant to change legacy code:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Runtime
&lt;ul&gt;
&lt;li&gt;There are no automated regression tests.&lt;&#x2F;li&gt;
&lt;li&gt;There are no manual regression tests.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Compile time
&lt;ul&gt;
&lt;li&gt;The language doesn&#x27;t discover errors at compile time, i.e. it is interpreted, dynamically typed, or weakly typed. Examples include Python, Ruby, and JavaScript.&lt;&#x2F;li&gt;
&lt;li&gt;The code doesn&#x27;t make use of the compiler&#x27;s type system. For example, it uses strings like &lt;code&gt;&quot;Employee&quot;&lt;&#x2F;code&gt; and &lt;code&gt;&quot;Admin&quot;&lt;&#x2F;code&gt; instead of value types like &lt;code&gt;record Employee; record Admin&lt;&#x2F;code&gt; or enums like &lt;code&gt;enum User { Employee, Admin }&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Design time
&lt;ul&gt;
&lt;li&gt;There is no &lt;strong&gt;specification&lt;&#x2F;strong&gt;, i.e. what the code should do is not written down.&lt;&#x2F;li&gt;
&lt;li&gt;There is no &lt;strong&gt;documentation&lt;&#x2F;strong&gt;, i.e. no knowledge about the code&#x27;s internal structure or design is written down.&lt;&#x2F;li&gt;
&lt;li&gt;There are no &lt;strong&gt;domain experts&lt;&#x2F;strong&gt;, i.e. people who know about the problem the software solves.&lt;&#x2F;li&gt;
&lt;li&gt;There are no &lt;strong&gt;code experts&lt;&#x2F;strong&gt;, such as a developer who wrote the code. The bus factor &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;09&#x2F;about-that-gig-fixing-vibe-code-slop&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; is zero.&lt;&#x2F;li&gt;
&lt;li&gt;The code is &lt;strong&gt;badly structured&lt;&#x2F;strong&gt;, i.e. hard to understand and hard to change.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;unique-qualities-of-ai-generated-code&quot;&gt;Unique Qualities of AI-Generated Code&lt;&#x2F;h2&gt;
&lt;p&gt;AI-generated code inherits the characteristics of legacy code but is especially likely to have these:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Low internal quality&lt;&#x2F;strong&gt;. You&#x27;ll hear this feedback from developers: &quot;this code makes no sense&quot;. They may be referring the code&#x27;s poor structure: duplication, inconsistent patterns, or to poor naming and a lack of coherence between the code and the part of the world the software interacts with. The result is the code is hard to understand and hard to change.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Low external quality&lt;&#x2F;strong&gt;. You&#x27;ll hear this kind of feedback from non-developers, with phrases like, &quot;this thing kind of does what I want, but not quite&quot; or &quot;this thing is so buggy&quot;. The code fulfills its requirements partially or circumstantially.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;High Quantity to Age Ratio&lt;&#x2F;strong&gt;. You don&#x27;t need AI to write legacy code. Humans do it every day, but AI can do it faster.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;the-confidence-rubric&quot;&gt;The Confidence Rubric&lt;&#x2F;h1&gt;
&lt;p&gt;My &lt;em&gt;Confidence Rubric&lt;&#x2F;em&gt; evaluates the previously discussed factors to score how painful a codebase will be to work in.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Spec&lt;&#x2F;th&gt;&lt;th&gt;Docs&lt;&#x2F;th&gt;&lt;th&gt;Code Expert&lt;&#x2F;th&gt;&lt;th&gt;Domain Expert&lt;&#x2F;th&gt;&lt;th&gt;Tests&lt;&#x2F;th&gt;&lt;th&gt;Structure&lt;&#x2F;th&gt;&lt;th&gt;Language&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Let&#x27;s fill in the rubric while considering two made-up scenarios.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;scenario-auto-repair-shop&quot;&gt;Scenario: Auto Repair Shop&lt;&#x2F;h2&gt;
&lt;p&gt;James runs a car repair shop by himself. A YouTube video taught him to use Lovable to write a web app to track his small business&#x27;s tools and parts inventory. It wrote the frontend in ReactJS and the backend in Python+Flask+Postgres. There are no automated tests, docs, or specs.&lt;&#x2F;p&gt;
&lt;p&gt;The app works fine, but Lovable has trouble iterating from there. After James hires two employees, he needs to track who has which tools. He asks Lovable what to do. It recommends implementing identity, authentication, and authorization. That&#x27;s total overkill: OAuth is hard, and simpler solutions would work. James doesn&#x27;t know that, so he says go for it. Lovable goes down a rabbit hole and can&#x27;t get it working. After burning four hours on a Sunday afternoon, James gets fed up and the next day calls a software consultancy.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s our confidence rubric for James:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Spec&lt;&#x2F;th&gt;&lt;th&gt;Docs&lt;&#x2F;th&gt;&lt;th&gt;Experts (Code | Domain)&lt;&#x2F;th&gt;&lt;th&gt;Tests&lt;&#x2F;th&gt;&lt;th&gt;Structure&lt;&#x2F;th&gt;&lt;th&gt;Language&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;❌&lt;&#x2F;td&gt;&lt;td&gt;❌&lt;&#x2F;td&gt;&lt;td&gt;❌ | ✅&lt;&#x2F;td&gt;&lt;td&gt;❌&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;❌&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;There&#x27;s only one thing going for this codebase, which is that you can talk to James.&lt;&#x2F;p&gt;
&lt;p&gt;Notice we haven&#x27;t evaluated the structure. We won&#x27;t cover that deep topic in this post, but if you have the opportunity, sign an NDA and have a look at the actual code before committing to the job.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;scenario-small-vc-firm&quot;&gt;Scenario: Small VC Firm&lt;&#x2F;h2&gt;
&lt;p&gt;Susan studied at a major USA university. She took a year of computer science before switching to an MBA. After college, she worked at Big Enterprise, but for the last five years she&#x27;s worked at a small venture capital firm. She&#x27;s not a developer, but she remembers some things from her CS program and her time at the Big Enterprise. She follows a tutorial and has Claude Code write a web app to manage her company&#x27;s investment portfolio. She asks Claude to write the app using the same technologies she knew worked at the Big Enterprise: ASP.NET Core Blazor + Azure App Service and Managed SQL Database. Following the tutorial, she writes her requirements in a &lt;code&gt;Requirements.md&lt;&#x2F;code&gt; file and has Claude and track its progress across sessions in a &lt;code&gt;Tasks.md&lt;&#x2F;code&gt; file as well as keep a &lt;code&gt;README.md&lt;&#x2F;code&gt; file up to date. She has Claude commit incrementally using git. There are integration tests which run the app in a browser against an in-memory DB, click buttons, fill and submit forms, and verify expected changes in the DB.&lt;&#x2F;p&gt;
&lt;p&gt;The app is a hit, since everyone at the firm is tired of sharing spreadsheets. Not long after, Susan retires, and her younger colleague Mark inherits her work. The app hums along unmaintained for months. One day, the CEO is out on the putting green and opens the web app on his phone. He notices that it looks terrible; Susan only ever tested it on her 1080p work monitor. He calls up Mark and asks him to make it mobile-friendly. Mark has no idea and is busy; he immediately reaches out to a consultant.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s our confidence rubric for Mark:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Spec&lt;&#x2F;th&gt;&lt;th&gt;Docs&lt;&#x2F;th&gt;&lt;th&gt;Experts (Code | Domain)&lt;&#x2F;th&gt;&lt;th&gt;Tests&lt;&#x2F;th&gt;&lt;th&gt;Structure&lt;&#x2F;th&gt;&lt;th&gt;Language&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;✅&lt;&#x2F;td&gt;&lt;td&gt;✅&lt;&#x2F;td&gt;&lt;td&gt;❌ | ❌&lt;&#x2F;td&gt;&lt;td&gt;✅&lt;&#x2F;td&gt;&lt;td&gt;?&lt;&#x2F;td&gt;&lt;td&gt;✅&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Without even looking at the code, it&#x27;s already looking like Mark&#x27;s project will be easier to work on than James, but there is still more to consider.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;human-and-organizational-factors&quot;&gt;Human and Organizational Factors&lt;&#x2F;h1&gt;
&lt;p&gt;Outside of the code, there are nontechnical factors that can affect any software project: there can be difficult personalities, tall management structures, entrenched political actors, and misaligned expectations.&lt;&#x2F;p&gt;
&lt;p&gt;While James&#x27; code might be a bigger lift, I&#x27;ll bet working with him would be more straightforward than proxying through Mark to his CEO, who is busy flying around doing VC things. On the other hand, I&#x27;ll bet that a VC firm is less price sensitive than a car repair shop.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;managing-expectations&quot;&gt;Managing Expectations&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;Stable&lt;&#x2F;em&gt; and &lt;em&gt;boring&lt;&#x2F;em&gt; often describe legacy code. It&#x27;s often old and business-critical, and an established organization understands that it takes time to turn a big ship.&lt;&#x2F;p&gt;
&lt;p&gt;With AI-generated code, there&#x27;s none of the stable cash-minting of an old lethargic codebase. While it may not be business-critical, there is likely schedule pressure to fix the mess. To the business, you&#x27;ll feel slow compared to the quick start AI gave them. You&#x27;ll need communicate expectations and sell the business on the ROI of finishing the job.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;When you&#x27;re offered a job or gig fixing AI-generated Code, give pause.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;AI-generated code is a lot like legacy code, with some unique characteristics.&lt;&#x2F;li&gt;
&lt;li&gt;Not all AI-generated codebases are the same. Use the Confidence Rubric discern between them.&lt;&#x2F;li&gt;
&lt;li&gt;Consider the human and organizational factors.&lt;&#x2F;li&gt;
&lt;li&gt;Consider the customer&#x27;s willingness to pay.&lt;&#x2F;li&gt;
&lt;li&gt;Bigger headaches merit bigger checks, because you bring more value to the business.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;It&#x27;s Not Tech Debt. It&#x27;s Tech Risk.&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;tech-risk-is-business-risk&#x2F;&quot;&gt;Tech Risk is Business Risk&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;25544117-brutal-refactoring&quot;&gt;Brutal Refactoring&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;44919.Working_Effectively_with_Legacy_Code&quot;&gt;Working Effectively with Legacy Code&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;a-design-is-a-mold-for-code&#x2F;&quot;&gt;A Design is a Mold for Code&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bus_factor&quot;&gt;Bus factor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>LLMs are not Bicycles for the Mind</title>
        <published>2025-08-25T00:00:00+00:00</published>
        <updated>2025-08-25T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;llms-are-not-bicycles-for-the-mind&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;llms-are-not-bicycles-for-the-mind&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;LLMs are more like E-bikes. More assist makes you go faster, but provides less exercise.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;no_motor_vehicles.jpg&quot; alt=&quot;A greenway and a sign that says &#x27;No Motor Vehicles&#x27;&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A greenway and a sign that says &quot;No Motor Vehicles&quot;. Source &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;In 1980, Steve Jobs spoke,&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;What a computer is to me is it&#x27;s the most remarkable tool that we&#x27;ve ever come up with, and it&#x27;s the equivalent of a bicycle for our minds.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I don&#x27;t think that LLMs are like bicycles for the mind. They are more like E-bikes.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;greenways-and-e-bikes&quot;&gt;Greenways and E-bikes&lt;&#x2F;h1&gt;
&lt;p&gt;A few nights ago, I was walking with my wife on the greenway. It&#x27;s illuminated, so we were easily visible. We were absorbed in our conversation when an e-bike startled us, appearing around a curve and speeding toward us at about 25 miles per hour (~40 km&#x2F;h). With just a couple of seconds to react, I pushed my wife out of danger and into the damp grass. As the two-tired vehicle passed, I turned toward its rider and yelled, &quot;SLOW DOWN!&quot;. He muttered an unintelligible, unconcerned reply and motored on. As he disappeared from sight, I was angry and my wife was distraught.&lt;&#x2F;p&gt;
&lt;p&gt;The town where I live has excellent greenways, and I spend a lot of time running and walking on them. Seriously, it&#x27;s thousands of miles each year, and over the last five years, I&#x27;ve noticed an increase in use of electric vehicles on our greenways: I&#x27;ve seen e-things of all kinds and sizes: bikes, scooters, skateboards, longboards, and unicycles.&lt;&#x2F;p&gt;
&lt;p&gt;I suppose people believe that the absence of a gas engine makes a vehicle acceptable on the greenway. The greenway is an outdoor space reserved for humans to exercise and enjoy nature. E-bikes that go too fast deter pedestrians from using it as intended.&lt;&#x2F;p&gt;
&lt;p&gt;I am not against electric vehicles on the greenway when riders use the throttle responsibly. Electric assist is a fantastic gateway to a healthy aerobic exercise regimen for those who could otherwise not even start. For example, my older colleague&#x27;s e-bike gives him the confidence he needs get out in the first place.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;llms-are-like-e-bikes&quot;&gt;LLMs are like E-bikes&lt;&#x2F;h1&gt;
&lt;p&gt;In software engineering, LLM use is like riding an e-bike on the greenway. Appropriate use comes down to how much &quot;throttle&quot; you use: how much cognitive effort you offload to the bot. Engineering is an intellectual and collaborative space where human minds work hard to solve business and technical problems. When you drop a mostly LLM-generated contribution into a chat or pull request, you zoom by on your LLM-moped, disrespecting and alienating those who are engaging their neocortex without assistance.&lt;&#x2F;p&gt;
&lt;p&gt;One of the rudest encounters I&#x27;ve had in my career was when a former colleague contradicted me in a technical discussion with an LLM-generated reply. Their screenshot of ChatGPT was lazy and reinforced an incorrect belief. It amounted to nothing more than an appeal to authority: the AI said it, so it must be true &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;llms-are-not-bicycles-for-the-mind&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The asymmetry principle &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;llms-are-not-bicycles-for-the-mind&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; helps explain why it was so frustrating: my counterpart effortlessly generated the LLM rebuttal which took me time and effort to parse and refute.&lt;&#x2F;p&gt;
&lt;p&gt;At my work, the ratio of LLM-generated code in pull requests is rising. The interesting thing about these is the author often doesn&#x27;t seem quite as, well, &lt;em&gt;authoritative&lt;&#x2F;em&gt;. It seems that when a robot has written the code, a higher portion of my feedback is ignored or answered unsatisfactorily. Since the point of a pull request is knowledge sharing and responding to feedback, it&#x27;s a bit of a waste of time and feels more like a rubber-stamp request.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not pointing fingers: In mid-2023, I completely over-relied on ChatGPT and shipped code I didn&#x27;t understand to production. It took me three weeks to fix a  defect that came up. Pretty embarrassing.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;You can depend on LLMs too much. Use them in a way that doesn&#x27;t atrophy your mental fitness and doesn&#x27;t exasperate your colleagues.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;streets.mn&#x2F;2016&#x2F;05&#x2F;09&#x2F;whats-wrong-with-this-picture&#x2F;&quot;&gt;What&#x27;s Wrong with this Picture?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;blog.ploeh.dk&#x2F;2025&#x2F;03&#x2F;10&#x2F;appeal-to-aithority&#x2F;&quot;&gt;Appeal to Aithority&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Brandolini%27s_law&quot;&gt;Brandolini&#x27;s Law&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;llms-are-not-bicycles-for-the-mind&#x2F;">&lt;p&gt;&lt;em&gt;LLMs are more like E-bikes. More assist makes you go faster, but provides less exercise.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;no_motor_vehicles.jpg&quot; alt=&quot;A greenway and a sign that says &#x27;No Motor Vehicles&#x27;&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A greenway and a sign that says &quot;No Motor Vehicles&quot;. Source &lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;In 1980, Steve Jobs spoke,&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;What a computer is to me is it&#x27;s the most remarkable tool that we&#x27;ve ever come up with, and it&#x27;s the equivalent of a bicycle for our minds.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I don&#x27;t think that LLMs are like bicycles for the mind. They are more like E-bikes.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;greenways-and-e-bikes&quot;&gt;Greenways and E-bikes&lt;&#x2F;h1&gt;
&lt;p&gt;A few nights ago, I was walking with my wife on the greenway. It&#x27;s illuminated, so we were easily visible. We were absorbed in our conversation when an e-bike startled us, appearing around a curve and speeding toward us at about 25 miles per hour (~40 km&#x2F;h). With just a couple of seconds to react, I pushed my wife out of danger and into the damp grass. As the two-tired vehicle passed, I turned toward its rider and yelled, &quot;SLOW DOWN!&quot;. He muttered an unintelligible, unconcerned reply and motored on. As he disappeared from sight, I was angry and my wife was distraught.&lt;&#x2F;p&gt;
&lt;p&gt;The town where I live has excellent greenways, and I spend a lot of time running and walking on them. Seriously, it&#x27;s thousands of miles each year, and over the last five years, I&#x27;ve noticed an increase in use of electric vehicles on our greenways: I&#x27;ve seen e-things of all kinds and sizes: bikes, scooters, skateboards, longboards, and unicycles.&lt;&#x2F;p&gt;
&lt;p&gt;I suppose people believe that the absence of a gas engine makes a vehicle acceptable on the greenway. The greenway is an outdoor space reserved for humans to exercise and enjoy nature. E-bikes that go too fast deter pedestrians from using it as intended.&lt;&#x2F;p&gt;
&lt;p&gt;I am not against electric vehicles on the greenway when riders use the throttle responsibly. Electric assist is a fantastic gateway to a healthy aerobic exercise regimen for those who could otherwise not even start. For example, my older colleague&#x27;s e-bike gives him the confidence he needs get out in the first place.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;llms-are-like-e-bikes&quot;&gt;LLMs are like E-bikes&lt;&#x2F;h1&gt;
&lt;p&gt;In software engineering, LLM use is like riding an e-bike on the greenway. Appropriate use comes down to how much &quot;throttle&quot; you use: how much cognitive effort you offload to the bot. Engineering is an intellectual and collaborative space where human minds work hard to solve business and technical problems. When you drop a mostly LLM-generated contribution into a chat or pull request, you zoom by on your LLM-moped, disrespecting and alienating those who are engaging their neocortex without assistance.&lt;&#x2F;p&gt;
&lt;p&gt;One of the rudest encounters I&#x27;ve had in my career was when a former colleague contradicted me in a technical discussion with an LLM-generated reply. Their screenshot of ChatGPT was lazy and reinforced an incorrect belief. It amounted to nothing more than an appeal to authority: the AI said it, so it must be true &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;llms-are-not-bicycles-for-the-mind&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The asymmetry principle &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;llms-are-not-bicycles-for-the-mind&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; helps explain why it was so frustrating: my counterpart effortlessly generated the LLM rebuttal which took me time and effort to parse and refute.&lt;&#x2F;p&gt;
&lt;p&gt;At my work, the ratio of LLM-generated code in pull requests is rising. The interesting thing about these is the author often doesn&#x27;t seem quite as, well, &lt;em&gt;authoritative&lt;&#x2F;em&gt;. It seems that when a robot has written the code, a higher portion of my feedback is ignored or answered unsatisfactorily. Since the point of a pull request is knowledge sharing and responding to feedback, it&#x27;s a bit of a waste of time and feels more like a rubber-stamp request.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not pointing fingers: In mid-2023, I completely over-relied on ChatGPT and shipped code I didn&#x27;t understand to production. It took me three weeks to fix a  defect that came up. Pretty embarrassing.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h1&gt;
&lt;p&gt;You can depend on LLMs too much. Use them in a way that doesn&#x27;t atrophy your mental fitness and doesn&#x27;t exasperate your colleagues.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;streets.mn&#x2F;2016&#x2F;05&#x2F;09&#x2F;whats-wrong-with-this-picture&#x2F;&quot;&gt;What&#x27;s Wrong with this Picture?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;blog.ploeh.dk&#x2F;2025&#x2F;03&#x2F;10&#x2F;appeal-to-aithority&#x2F;&quot;&gt;Appeal to Aithority&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Brandolini%27s_law&quot;&gt;Brandolini&#x27;s Law&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Oil Spills Can Create Jobs</title>
        <published>2025-08-09T00:00:00+00:00</published>
        <updated>2025-08-09T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;oil-spills-can-create-jobs&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;oil-spills-can-create-jobs&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;LLM-generated code is like an oil spill. Real engineers will be there to mop up the mess - and collect the checks.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;DWH_Cleanup.jpg&quot; alt=&quot;Workers clean up LLM slop. Source: US Coast Guard&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Workers clean up LLM slop. Source: US Coast Guard&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;the-job-outlook-is-not-so-bad&quot;&gt;The job outlook is not so bad&lt;&#x2F;h1&gt;
&lt;p&gt;In 2010, after the BP&#x27;s oil rig &lt;em&gt;Deepwater Horizons&lt;&#x2F;em&gt; dumped 3 billion barrels of oil into the Gulf of Mexico &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;oil-spills-can-create-jobs&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, at least $20B of BP&#x27;s purse was redistributed to a massive mobilization of cleanup efforts. By 2014, this had resulted in a net increase in employment and wages in Louisiana, contrary to predictions of economic loss &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;oil-spills-can-create-jobs&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Last week, a reddit user lit &lt;code&gt;&#x2F;r&#x2F;ExperiencedDevs&lt;&#x2F;code&gt; on fire with this post &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;oil-spills-can-create-jobs&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’m a freelance software engineer...I have noticed a large increase in projects where they paid a ton of money for an internal software and it does not work well at all...most of the time, the people hiring me aren’t technical and don’t understand what the problem is...the code was obviously AI generated. -- kcib&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;In short, a software engineer noticed across a variety of his freelance projects that nontechnical decision makers are using AI to deploy buggy, unmaintainable apps. Then, they call in the calvary to fix the mess.&lt;&#x2F;p&gt;
&lt;p&gt;It stands to reason that to keep these systems in production, and with their reputations on the line, many decision makers will hire freelance or full-time software engineers to clean up their AI-generated mess. If this is a widespread pattern, the job outlook for devs may be brighter than one would conclude merely from recent big tech layoffs and boardroom-promulgated narratives about AI replacing tech laborers.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-internet-is-a-shared-ecosystem&quot;&gt;The Internet is a shared ecosystem&lt;&#x2F;h1&gt;
&lt;p&gt;Even though this oil spill created jobs, we shouldn&#x27;t encourage them. BP&#x27;s damage to the Gulf ecosystem is deep and unfathomable.&lt;&#x2F;p&gt;
&lt;p&gt;Similarly, we all inhabit the waters and shores of a shared ecosystem called the internet. Low-quality information is the oil of the internet. When people pollute the information space with the unrefined output of LLMs, it spreads and lingers, degrading everyone&#x27;s quality of life.&lt;&#x2F;p&gt;
&lt;p&gt;You don&#x27;t have to be altruistic. BP lost &lt;em&gt;reputation&lt;&#x2F;em&gt;, and on the internet, reputation is money. Reputation and quality information bring traffic, the lifeblood of companies. That&#x27;s one reason many subreddits and other online communities disallow LLM-generated content. These communities know their value is connecting with real people.&lt;&#x2F;p&gt;
&lt;p&gt;The same goes for publications. I can&#x27;t tell you how fast I hit the back button when I sense an article was written by an LLM. It feels impersonal, and my trust is broken. My thinking goes: if it wasn&#x27;t worth the author&#x27;s time to write, it isn&#x27;t worth my time to read.&lt;&#x2F;p&gt;
&lt;p&gt;The issue with an oil spill isn&#x27;t that the oil isn&#x27;t valuable. The issue is where the oil is, which renders it both useless and damaging to the place it ends up.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;picryl.com&#x2F;media&#x2F;dwh-plaquemines-branch-decon-unit-f1d671&quot;&gt;Deepwater Horizons Cleanup, 2010-08-19&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;as everyone called it then&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.hks.harvard.edu&#x2F;sites&#x2F;default&#x2F;files&#x2F;centers&#x2F;taubman&#x2F;files&#x2F;LaborMarketImpacts.pdf&quot;&gt;Labor Market Impacts of the 2010 Deepwater Horizon Oil Spill and Offshore Drilling Momentum&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;ExperiencedDevs&#x2F;comments&#x2F;1mg2r6y&#x2F;the_era_of_ai_slop_cleanup_has_begun&#x2F;&quot;&gt;The era of AI slop cleanup has begun&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;oil-spills-can-create-jobs&#x2F;">&lt;p&gt;&lt;em&gt;LLM-generated code is like an oil spill. Real engineers will be there to mop up the mess - and collect the checks.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;DWH_Cleanup.jpg&quot; alt=&quot;Workers clean up LLM slop. Source: US Coast Guard&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Workers clean up LLM slop. Source: US Coast Guard&lt;sup&gt;&lt;a href=&quot;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;the-job-outlook-is-not-so-bad&quot;&gt;The job outlook is not so bad&lt;&#x2F;h1&gt;
&lt;p&gt;In 2010, after the BP&#x27;s oil rig &lt;em&gt;Deepwater Horizons&lt;&#x2F;em&gt; dumped 3 billion barrels of oil into the Gulf of Mexico &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;oil-spills-can-create-jobs&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, at least $20B of BP&#x27;s purse was redistributed to a massive mobilization of cleanup efforts. By 2014, this had resulted in a net increase in employment and wages in Louisiana, contrary to predictions of economic loss &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;oil-spills-can-create-jobs&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Last week, a reddit user lit &lt;code&gt;&#x2F;r&#x2F;ExperiencedDevs&lt;&#x2F;code&gt; on fire with this post &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;08&#x2F;oil-spills-can-create-jobs&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I’m a freelance software engineer...I have noticed a large increase in projects where they paid a ton of money for an internal software and it does not work well at all...most of the time, the people hiring me aren’t technical and don’t understand what the problem is...the code was obviously AI generated. -- kcib&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;In short, a software engineer noticed across a variety of his freelance projects that nontechnical decision makers are using AI to deploy buggy, unmaintainable apps. Then, they call in the calvary to fix the mess.&lt;&#x2F;p&gt;
&lt;p&gt;It stands to reason that to keep these systems in production, and with their reputations on the line, many decision makers will hire freelance or full-time software engineers to clean up their AI-generated mess. If this is a widespread pattern, the job outlook for devs may be brighter than one would conclude merely from recent big tech layoffs and boardroom-promulgated narratives about AI replacing tech laborers.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-internet-is-a-shared-ecosystem&quot;&gt;The Internet is a shared ecosystem&lt;&#x2F;h1&gt;
&lt;p&gt;Even though this oil spill created jobs, we shouldn&#x27;t encourage them. BP&#x27;s damage to the Gulf ecosystem is deep and unfathomable.&lt;&#x2F;p&gt;
&lt;p&gt;Similarly, we all inhabit the waters and shores of a shared ecosystem called the internet. Low-quality information is the oil of the internet. When people pollute the information space with the unrefined output of LLMs, it spreads and lingers, degrading everyone&#x27;s quality of life.&lt;&#x2F;p&gt;
&lt;p&gt;You don&#x27;t have to be altruistic. BP lost &lt;em&gt;reputation&lt;&#x2F;em&gt;, and on the internet, reputation is money. Reputation and quality information bring traffic, the lifeblood of companies. That&#x27;s one reason many subreddits and other online communities disallow LLM-generated content. These communities know their value is connecting with real people.&lt;&#x2F;p&gt;
&lt;p&gt;The same goes for publications. I can&#x27;t tell you how fast I hit the back button when I sense an article was written by an LLM. It feels impersonal, and my trust is broken. My thinking goes: if it wasn&#x27;t worth the author&#x27;s time to write, it isn&#x27;t worth my time to read.&lt;&#x2F;p&gt;
&lt;p&gt;The issue with an oil spill isn&#x27;t that the oil isn&#x27;t valuable. The issue is where the oil is, which renders it both useless and damaging to the place it ends up.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;picryl.com&#x2F;media&#x2F;dwh-plaquemines-branch-decon-unit-f1d671&quot;&gt;Deepwater Horizons Cleanup, 2010-08-19&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;as everyone called it then&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.hks.harvard.edu&#x2F;sites&#x2F;default&#x2F;files&#x2F;centers&#x2F;taubman&#x2F;files&#x2F;LaborMarketImpacts.pdf&quot;&gt;Labor Market Impacts of the 2010 Deepwater Horizon Oil Spill and Offshore Drilling Momentum&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;ExperiencedDevs&#x2F;comments&#x2F;1mg2r6y&#x2F;the_era_of_ai_slop_cleanup_has_begun&#x2F;&quot;&gt;The era of AI slop cleanup has begun&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Dev Skills for the LLM Era</title>
        <published>2025-06-10T00:00:00+00:00</published>
        <updated>2025-06-10T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;There are certain skills software engineers can practice to further differentiate themselves from LLMs.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;eq_books.jpg&quot; alt=&quot;Books I am reading to uplevel my people skills&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Books I am reading to uplevel my people skills
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;In my last post, &lt;em&gt;AI: Accelerated Incompetence&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, I claimed that LLMs can&#x27;t replace human software developers, but I also wrote &quot;there are certainly things you can do to further differentiate yourself from an LLM&quot;. In this post, I want to elaborate on the things I am doing to keep myself indispensable in the LLM age.&lt;&#x2F;p&gt;
&lt;p&gt;Chronologically, my focused journey to develop these skills began in 2023, before LLMs were quite as ubiquitous as today. In 2025, I have redoubled these efforts.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;people-skills&quot;&gt;People Skills&lt;&#x2F;h1&gt;
&lt;p&gt;As a younger dev, I wanted it to be true that people skills didn&#x27;t matter in software engineering: I viewed emotion as a distraction, preferring to get right to the important stuff like defining requirements and writing code. However, as I&#x27;ve gotten into the mid to late years of my career, I&#x27;ve come to understand that awareness and management of my emotions and those of others is at the center of professional work.&lt;&#x2F;p&gt;
&lt;p&gt;If you don&#x27;t believe me, go scroll through &lt;code&gt;&#x2F;r&#x2F;ExperiencedDevs&lt;&#x2F;code&gt; on Reddit. I see more posts about people problems than code or architecture.&lt;&#x2F;p&gt;
&lt;p&gt;If there&#x27;s one thing a computer program can&#x27;t do, it is offer genuine connection and empathy. When an LLM says nice things to me, it feels disingenuous. When a human uses kind words, it stands out. It makes me like them, and I feel like there&#x27;s some good in this life, and I want to pass it forward.&lt;&#x2F;p&gt;
&lt;p&gt;At work, when you don&#x27;t have any positional authority but need to collaborate, the best card in your hand is that people like and trust you. If you do have managerial authority over people, it&#x27;s still in your best interest not to default to command-and-control schemes. As a leader, your example sets the tone for everyone else.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve often half-joked that the best thing I&#x27;ve done for my career is get married. Why? My wife &lt;em&gt;loves&lt;&#x2F;em&gt; to talk. Not to make noise, but as a means to connect with me on an emotional level. Younger Doug thought that words were merely for communicating information: e.g. for filing taxes, reading documentation, or writing requirements specifications. I now understand that I can talk to people to, you know, &lt;em&gt;make them feel cared about&lt;&#x2F;em&gt; and to allow them to &lt;em&gt;care about me&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;To that end, a couple of weeks ago I went on a binge and bought these books, pictured above:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;How to Win Friends and Influence People by Dale Carnegie&lt;&#x2F;li&gt;
&lt;li&gt;Emotional Intelligence by Daniel Goleman&lt;&#x2F;li&gt;
&lt;li&gt;What Makes a Leader by Daniel Goleman&lt;&#x2F;li&gt;
&lt;li&gt;Getting Along by Amy Gallo&lt;&#x2F;li&gt;
&lt;li&gt;Dealing with Conflict by Amy Gallo&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Whether its with these books or other resources, improving your people skills is not only likely to benefit your career, it might make you a happier person.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;managerial-and-communication-skills&quot;&gt;Managerial and Communication Skills&lt;&#x2F;h1&gt;
&lt;p&gt;Each of us is now a supervisor of machines. I never wanted to be a manager, but thankfully, there is a large body of knowledge for managing people. We just have to contextualize it to machines.&lt;&#x2F;p&gt;
&lt;p&gt;What is different about managing LLMs vs people?&lt;&#x2F;p&gt;
&lt;p&gt;With people, there is relationship, mutual trust (or lack of it), and shared context. Machines have none of that: there&#x27;s only your prompt, the system prompt, the context window, and the model&#x27;s training. Moreover, the model doesn&#x27;t have feelings and doesn&#x27;t require feedback and growth.&lt;&#x2F;p&gt;
&lt;p&gt;One of the most important aspects of management is communication.&lt;&#x2F;p&gt;
&lt;p&gt;LLMs are poor communicators, so you have to make up the difference. Unlike a talented direct report, LLMs don&#x27;t yet seem generally able to ask the question-behind-the-question or to infer a larger context behind a prompt, or even ask for clarification.&lt;&#x2F;p&gt;
&lt;p&gt;For LLMs, the medium of communication is writing. Therefore, it&#x27;s important to think clearly and write unambiguously. Be explicit, specific, and clear; and ask the LLM to respond the same way.&lt;&#x2F;p&gt;
&lt;p&gt;Before prompt engineering was a term, we had technical writing. I recommend you review Google&#x27;s free courses&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;advanced-software-engineering-skills&quot;&gt;Advanced Software Engineering Skills&lt;&#x2F;h1&gt;
&lt;p&gt;Look for ways to advance your software engineering skills.&lt;&#x2F;p&gt;
&lt;p&gt;Now that each of us commands a team of fast, confident, often wrong virtual engineers, we can move up the value chain of engineering. LLMs buy us time to do more important things. We don&#x27;t need to update the package dependencies by hand. We can ask an agent to, and with the time saved, we can talk with users or focus on refactoring the notification platform to an event-based architecture.&lt;&#x2F;p&gt;
&lt;p&gt;Where can we go to find advanced training in software engineering? Personally, I turn to books and courses. Paid courses are an excellent opportunity to differentiate from LLMs because being behind paywalls, their content is not scraped up with the rest of the publicly accessible internet. Books, legally or not, are more likely to be in the training dataset. Courses usually get you introduced to the instructor, whom you can reach e.g. by chat or email.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;books&quot;&gt;Books&lt;&#x2F;h2&gt;
&lt;p&gt;It&#x27;s easy to rattle off a list of books. Here&#x27;s a curated list that I have actually read, studied, applied in my work, and recommend to you:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;A Philosophy of Software Design&lt;&#x2F;em&gt; by John Ousterhout&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Grokking Simplicity&lt;&#x2F;em&gt; by Eric Normand&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Working Effectively with Legacy Code&lt;&#x2F;em&gt; by Michael C Feathers&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;courses&quot;&gt;Courses&lt;&#x2F;h2&gt;
&lt;p&gt;In 2023, I bought access to Jimmy Koppel&#x27;s &lt;em&gt;Advanced Software Design&lt;&#x2F;em&gt; course&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. It&#x27;s been well worth it. The course touts these benefits, among others, which I can attest to:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Rise above subjective debates. Give concrete suggestions your team will understand and respect&lt;&#x2F;li&gt;
&lt;li&gt;Escape software influencer dogma. Get your own compass.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;For a sample of Jimmy&#x27;s teaching, have a look at his blog, for example this post&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This year Udi Dahan made &lt;em&gt;Distributed System Design Fundamentals&lt;&#x2F;em&gt; course&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; available free of charge. The full course is pretty expensive, so it&#x27;s a fantastic opportunity. Some experienced colleagues of mine took it years ago and rave about it. I&#x27;ve just started it this week.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;business-skills&quot;&gt;Business Skills&lt;&#x2F;h1&gt;
&lt;p&gt;My position in this post and the last has been that LLMs can&#x27;t replace humans in skilled thought work. If your employer disagrees, there&#x27;s one sure move you can make: you can employ yourself.&lt;&#x2F;p&gt;
&lt;p&gt;Yes, running your own business is allowed, and get this: customers don&#x27;t care whether you use AI or not to make a product or service. They only care whether you solve a pain for them.&lt;&#x2F;p&gt;
&lt;p&gt;In 2023, I started a nascent software business. I quickly did what you&#x27;re not supposed to do: I built a product based on a &quot;cool idea&quot;. Instead of first finding customers and validating my idea, I jumped right in to coding. I spent hundreds of dollars and six months of nights and weekends. In the two years since, FitEdit&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; has earned a few hundred dollars. In December 2024, I repeated the mistake with Linklever&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. In six months, it&#x27;s made about $40.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m doing it a better way now. I&#x27;m breaking out of the &quot;fail cycle&quot; of building before validating. Last year, I bought access to Rob Walling&#x27;s course &lt;em&gt;The SaaS Launchpad&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. This year, I bought access to Amy Hoy and Alex Hillman&#x27;s startup course &lt;em&gt;30x500 Academy&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. These courses are teaching me to focus on customers and marketing before writing a line of code.&lt;&#x2F;p&gt;
&lt;p&gt;In February 2025, I was fired from my job. No LLMs were involved. I was grateful to be welcomed back to my previous job, but I resolved then that I wanted more financial security. A salaried engineer is a business with one large customer. I&#x27;d rather have 500 small customers. My goal is to build a product business that earns me financial independence.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Fellow dev, to stay economically valuable in the LLM age:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;practice soft skills and emotional intelligence. Most of engineering is human interaction.&lt;&#x2F;li&gt;
&lt;li&gt;learn to write clearly. You&#x27;re a manager of machines now.&lt;&#x2F;li&gt;
&lt;li&gt;focus on deep expertise and system-level thinking. That&#x27;s your bread-and-butter. Machines can handle the boring parts.&lt;&#x2F;li&gt;
&lt;li&gt;consider starting a business. Then you can decide what mix of LLMs and humans to employ. Beware that coding is just one small part.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;accelerated-incompetence&#x2F;&quot;&gt;AI: Accelerated Incompetence&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;developers.google.com&#x2F;tech-writing&#x2F;overview&quot;&gt;Overview of technical writing courses&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;self-service.mirdin.com&#x2F;&quot;&gt;Advanced Software Design Course by Mirdin&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2022&#x2F;03&#x2F;abstraction-not-what-you-think-it-is.html&quot;&gt;Abstraction: Not What You Think It Is&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;learn.particular.net&#x2F;courses&#x2F;distributed-systems-design-fundamentals-online&quot;&gt;Distributed Systems Design Fundamentals&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;fitedit.io&#x2F;&quot;&gt;FitEdit&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;linklever.net&#x2F;&quot;&gt;Linklever&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;microconf.com&#x2F;courses&#x2F;saas-launchpad&quot;&gt;The SaaS Launchpad&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;30x500.com&#x2F;academy&#x2F;&quot;&gt;30x500 Academy&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;">&lt;p&gt;&lt;em&gt;There are certain skills software engineers can practice to further differentiate themselves from LLMs.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;eq_books.jpg&quot; alt=&quot;Books I am reading to uplevel my people skills&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Books I am reading to uplevel my people skills
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;In my last post, &lt;em&gt;AI: Accelerated Incompetence&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, I claimed that LLMs can&#x27;t replace human software developers, but I also wrote &quot;there are certainly things you can do to further differentiate yourself from an LLM&quot;. In this post, I want to elaborate on the things I am doing to keep myself indispensable in the LLM age.&lt;&#x2F;p&gt;
&lt;p&gt;Chronologically, my focused journey to develop these skills began in 2023, before LLMs were quite as ubiquitous as today. In 2025, I have redoubled these efforts.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;people-skills&quot;&gt;People Skills&lt;&#x2F;h1&gt;
&lt;p&gt;As a younger dev, I wanted it to be true that people skills didn&#x27;t matter in software engineering: I viewed emotion as a distraction, preferring to get right to the important stuff like defining requirements and writing code. However, as I&#x27;ve gotten into the mid to late years of my career, I&#x27;ve come to understand that awareness and management of my emotions and those of others is at the center of professional work.&lt;&#x2F;p&gt;
&lt;p&gt;If you don&#x27;t believe me, go scroll through &lt;code&gt;&#x2F;r&#x2F;ExperiencedDevs&lt;&#x2F;code&gt; on Reddit. I see more posts about people problems than code or architecture.&lt;&#x2F;p&gt;
&lt;p&gt;If there&#x27;s one thing a computer program can&#x27;t do, it is offer genuine connection and empathy. When an LLM says nice things to me, it feels disingenuous. When a human uses kind words, it stands out. It makes me like them, and I feel like there&#x27;s some good in this life, and I want to pass it forward.&lt;&#x2F;p&gt;
&lt;p&gt;At work, when you don&#x27;t have any positional authority but need to collaborate, the best card in your hand is that people like and trust you. If you do have managerial authority over people, it&#x27;s still in your best interest not to default to command-and-control schemes. As a leader, your example sets the tone for everyone else.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve often half-joked that the best thing I&#x27;ve done for my career is get married. Why? My wife &lt;em&gt;loves&lt;&#x2F;em&gt; to talk. Not to make noise, but as a means to connect with me on an emotional level. Younger Doug thought that words were merely for communicating information: e.g. for filing taxes, reading documentation, or writing requirements specifications. I now understand that I can talk to people to, you know, &lt;em&gt;make them feel cared about&lt;&#x2F;em&gt; and to allow them to &lt;em&gt;care about me&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;To that end, a couple of weeks ago I went on a binge and bought these books, pictured above:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;How to Win Friends and Influence People by Dale Carnegie&lt;&#x2F;li&gt;
&lt;li&gt;Emotional Intelligence by Daniel Goleman&lt;&#x2F;li&gt;
&lt;li&gt;What Makes a Leader by Daniel Goleman&lt;&#x2F;li&gt;
&lt;li&gt;Getting Along by Amy Gallo&lt;&#x2F;li&gt;
&lt;li&gt;Dealing with Conflict by Amy Gallo&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Whether its with these books or other resources, improving your people skills is not only likely to benefit your career, it might make you a happier person.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;managerial-and-communication-skills&quot;&gt;Managerial and Communication Skills&lt;&#x2F;h1&gt;
&lt;p&gt;Each of us is now a supervisor of machines. I never wanted to be a manager, but thankfully, there is a large body of knowledge for managing people. We just have to contextualize it to machines.&lt;&#x2F;p&gt;
&lt;p&gt;What is different about managing LLMs vs people?&lt;&#x2F;p&gt;
&lt;p&gt;With people, there is relationship, mutual trust (or lack of it), and shared context. Machines have none of that: there&#x27;s only your prompt, the system prompt, the context window, and the model&#x27;s training. Moreover, the model doesn&#x27;t have feelings and doesn&#x27;t require feedback and growth.&lt;&#x2F;p&gt;
&lt;p&gt;One of the most important aspects of management is communication.&lt;&#x2F;p&gt;
&lt;p&gt;LLMs are poor communicators, so you have to make up the difference. Unlike a talented direct report, LLMs don&#x27;t yet seem generally able to ask the question-behind-the-question or to infer a larger context behind a prompt, or even ask for clarification.&lt;&#x2F;p&gt;
&lt;p&gt;For LLMs, the medium of communication is writing. Therefore, it&#x27;s important to think clearly and write unambiguously. Be explicit, specific, and clear; and ask the LLM to respond the same way.&lt;&#x2F;p&gt;
&lt;p&gt;Before prompt engineering was a term, we had technical writing. I recommend you review Google&#x27;s free courses&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;advanced-software-engineering-skills&quot;&gt;Advanced Software Engineering Skills&lt;&#x2F;h1&gt;
&lt;p&gt;Look for ways to advance your software engineering skills.&lt;&#x2F;p&gt;
&lt;p&gt;Now that each of us commands a team of fast, confident, often wrong virtual engineers, we can move up the value chain of engineering. LLMs buy us time to do more important things. We don&#x27;t need to update the package dependencies by hand. We can ask an agent to, and with the time saved, we can talk with users or focus on refactoring the notification platform to an event-based architecture.&lt;&#x2F;p&gt;
&lt;p&gt;Where can we go to find advanced training in software engineering? Personally, I turn to books and courses. Paid courses are an excellent opportunity to differentiate from LLMs because being behind paywalls, their content is not scraped up with the rest of the publicly accessible internet. Books, legally or not, are more likely to be in the training dataset. Courses usually get you introduced to the instructor, whom you can reach e.g. by chat or email.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;books&quot;&gt;Books&lt;&#x2F;h2&gt;
&lt;p&gt;It&#x27;s easy to rattle off a list of books. Here&#x27;s a curated list that I have actually read, studied, applied in my work, and recommend to you:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;A Philosophy of Software Design&lt;&#x2F;em&gt; by John Ousterhout&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Grokking Simplicity&lt;&#x2F;em&gt; by Eric Normand&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Working Effectively with Legacy Code&lt;&#x2F;em&gt; by Michael C Feathers&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;courses&quot;&gt;Courses&lt;&#x2F;h2&gt;
&lt;p&gt;In 2023, I bought access to Jimmy Koppel&#x27;s &lt;em&gt;Advanced Software Design&lt;&#x2F;em&gt; course&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. It&#x27;s been well worth it. The course touts these benefits, among others, which I can attest to:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Rise above subjective debates. Give concrete suggestions your team will understand and respect&lt;&#x2F;li&gt;
&lt;li&gt;Escape software influencer dogma. Get your own compass.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;For a sample of Jimmy&#x27;s teaching, have a look at his blog, for example this post&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This year Udi Dahan made &lt;em&gt;Distributed System Design Fundamentals&lt;&#x2F;em&gt; course&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; available free of charge. The full course is pretty expensive, so it&#x27;s a fantastic opportunity. Some experienced colleagues of mine took it years ago and rave about it. I&#x27;ve just started it this week.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;business-skills&quot;&gt;Business Skills&lt;&#x2F;h1&gt;
&lt;p&gt;My position in this post and the last has been that LLMs can&#x27;t replace humans in skilled thought work. If your employer disagrees, there&#x27;s one sure move you can make: you can employ yourself.&lt;&#x2F;p&gt;
&lt;p&gt;Yes, running your own business is allowed, and get this: customers don&#x27;t care whether you use AI or not to make a product or service. They only care whether you solve a pain for them.&lt;&#x2F;p&gt;
&lt;p&gt;In 2023, I started a nascent software business. I quickly did what you&#x27;re not supposed to do: I built a product based on a &quot;cool idea&quot;. Instead of first finding customers and validating my idea, I jumped right in to coding. I spent hundreds of dollars and six months of nights and weekends. In the two years since, FitEdit&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; has earned a few hundred dollars. In December 2024, I repeated the mistake with Linklever&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. In six months, it&#x27;s made about $40.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m doing it a better way now. I&#x27;m breaking out of the &quot;fail cycle&quot; of building before validating. Last year, I bought access to Rob Walling&#x27;s course &lt;em&gt;The SaaS Launchpad&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. This year, I bought access to Amy Hoy and Alex Hillman&#x27;s startup course &lt;em&gt;30x500 Academy&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;06&#x2F;dev-skills-for-the-llm-era&#x2F;#references&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. These courses are teaching me to focus on customers and marketing before writing a line of code.&lt;&#x2F;p&gt;
&lt;p&gt;In February 2025, I was fired from my job. No LLMs were involved. I was grateful to be welcomed back to my previous job, but I resolved then that I wanted more financial security. A salaried engineer is a business with one large customer. I&#x27;d rather have 500 small customers. My goal is to build a product business that earns me financial independence.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Fellow dev, to stay economically valuable in the LLM age:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;practice soft skills and emotional intelligence. Most of engineering is human interaction.&lt;&#x2F;li&gt;
&lt;li&gt;learn to write clearly. You&#x27;re a manager of machines now.&lt;&#x2F;li&gt;
&lt;li&gt;focus on deep expertise and system-level thinking. That&#x27;s your bread-and-butter. Machines can handle the boring parts.&lt;&#x2F;li&gt;
&lt;li&gt;consider starting a business. Then you can decide what mix of LLMs and humans to employ. Beware that coding is just one small part.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;accelerated-incompetence&#x2F;&quot;&gt;AI: Accelerated Incompetence&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;developers.google.com&#x2F;tech-writing&#x2F;overview&quot;&gt;Overview of technical writing courses&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;self-service.mirdin.com&#x2F;&quot;&gt;Advanced Software Design Course by Mirdin&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2022&#x2F;03&#x2F;abstraction-not-what-you-think-it-is.html&quot;&gt;Abstraction: Not What You Think It Is&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;learn.particular.net&#x2F;courses&#x2F;distributed-systems-design-fundamentals-online&quot;&gt;Distributed Systems Design Fundamentals&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;fitedit.io&#x2F;&quot;&gt;FitEdit&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;linklever.net&#x2F;&quot;&gt;Linklever&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;microconf.com&#x2F;courses&#x2F;saas-launchpad&quot;&gt;The SaaS Launchpad&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;30x500.com&#x2F;academy&#x2F;&quot;&gt;30x500 Academy&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>AI: Accelerated Incompetence</title>
        <published>2025-05-19T00:00:00+00:00</published>
        <updated>2025-05-19T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;In software engineering, over-reliance on LLMs accelerates incompetence. LLMs can&#x27;t replace human critical thinking.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;The text in this essay was written without any use of AI.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;llm_dependence.jpg&quot; alt=&quot;A chart showing a speculative inverse correlation between LLM dependence and IQ&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A speculative inverse correlation between LLM dependence and IQ
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;By now much ink has dried on the wave of AI and LLMs which crashed upon the public consciousness in late 2022. As an experienced software engineer, I&#x27;d like to speak to two troubling engineering perspectives I&#x27;ve observed on LLMs.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;llms-are-my-friend&quot;&gt;&quot;LLMs are my friend&quot;&lt;&#x2F;h1&gt;
&lt;p&gt;I don&#x27;t think anyone believes that a computer program is literally their companion, so let&#x27;s address the euphemistic intent of the above phrase: namely that an LLM conveys magnificent benefits upon its user.&lt;&#x2F;p&gt;
&lt;p&gt;Engineers who view LLMs as an ally invariably prioritize or feel pressured to prioritize velocity; for them, production trumps perspicacity. While it&#x27;s true that LLMs can deliver a lot of code quickly, their use carries a long tail of &lt;em&gt;risks&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;risks-of-using-llms&quot;&gt;Risks of using LLMs&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Output Risk&lt;&#x2F;strong&gt;. An LLM can give output that is blatantly incorrect, for example code that won&#x27;t compile. More likely and dangerously, it can give output that is subtly and undetectably wrong, like logic bugs. The risk is elevated if the prompter is not qualified to evaluate the output, for example project managers prompting for source code.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Input Risk&lt;&#x2F;strong&gt;. An LLM does not challenge a prompt which is leading&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; or whose assumptions are flawed or context is incomplete. Example: An engineer prompts, &quot;Provide a thread-safe list implementation in C#&quot; and receives 200 lines of flawless, correct code. It&#x27;s still the wrong answer, because the question should have been, &quot;How can I make this code thread-safe?&quot; and whose answer is &quot;Use &lt;code&gt;System.Collections.Concurrent&lt;&#x2F;code&gt;&quot; and 1 line of code. The LLM is not able to recognize an instance of the XY problem&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; because it was not asked to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Future Velocity&lt;&#x2F;strong&gt;. This is your typical &quot;tech debt&quot; argument, but more urgent. AI can degrade the quality of your codebase &lt;em&gt;so fast&lt;&#x2F;em&gt;. Have you ever seen the fruits of hoarding disorder? From the outside, a house or apartment may look fine. But the inside is unsanitary, reprehensible, and nonfunctional. Developers are discovering that without strong guardrails, code produced by an LLM is like such a space.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;User Infantilization&lt;&#x2F;strong&gt;. An extinction of talent will occur within individuals and organizations that outsource thinking and problem solving to LLMs:
&lt;ul&gt;
&lt;li&gt;As senior engineers are deprived of the opportunity to learn through productive struggle, their existing problem solving and critical thinking skills atrophy:
&lt;ul&gt;
&lt;li&gt;&quot;Microsoft research on knowledge workers found that AI-driven confidence often comes at the expense of critical thinking&quot;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;In a world pushing for “reflexive AI usage,” I’m advocating for something different: thoughtful, intentional collaboration with AI that preserves the essence of coding as a craft&quot;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;LLMs give me finished thoughts, polished and convincing, but none of the intellectual growth that comes from developing them myself&quot; &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Junior engineers never develop such skills to begin with and so can never in turn mentor future junior engineers.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Loss of Joy&lt;&#x2F;strong&gt;. Many developers are reporting that using AI robs them of flow state and the joy of creation.&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; AI-generated code is miserable to read and change.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In a future post, I plan to write about mitigations for each of these risks. Be sure to subscribe below if that sounds interesting.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;i-ll-become-redundant&quot;&gt;&quot;I&#x27;ll become redundant&quot;&lt;&#x2F;h1&gt;
&lt;p&gt;Source&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;No, you won&#x27;t. That said, there are certainly things you can do to further differentiate yourself from an LLM. To stay on topic, I&#x27;ll defer that to a future post. &lt;em&gt;(Update: I wrote &lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;dev-skills-for-the-llm-era&#x2F;&quot;&gt;that post&lt;&#x2F;a&gt;)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There are two programming competences that LLMs cannot furnish: &lt;em&gt;program theory&lt;&#x2F;em&gt; and &lt;em&gt;program entropy&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;program-theory&quot;&gt;Program Theory&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;...programming properly should be regarded as an activity by which the programmers form or achieve a certain kind of insight, a theory, of the matters at hand&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;-- Peter Naur, &lt;em&gt;Programming as Theory Building&lt;&#x2F;em&gt;, 1985&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Naur was one of the greats in computing. He argued, against popular belief at the time, that a program is not its source code. Rather, the program is a shared mental construct: a &lt;em&gt;theory&lt;&#x2F;em&gt; or &lt;em&gt;design&lt;&#x2F;em&gt;. From that, the engineer derives code, but the work product of value is the design, not code.&lt;&#x2F;p&gt;
&lt;p&gt;To help you think about the difference between program theory and program text, consider this thought experiment: Imagine that two engineering teams of equivalent talent, A and B, are locked in separate rooms. Each team is told not to communicate with the other. Team A is tasked to write a program, for example a simple terminal-based Chess game. Team B just waits, plays real Chess, or whatever. When Team A is finished, their source code is handed to Team B. Now each team is asked in parallel to add a feature to the program, for example a virtual chess player so the game can be played solo. (We&#x27;ll let Team A take a coffee break before they get started).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Question&lt;&#x2F;em&gt;: Which team will deliver a better solution?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Answer&lt;&#x2F;em&gt;: Team A, because those engineers have a fresh mental model of the program they just created, while Team B has none.&lt;&#x2F;p&gt;
&lt;p&gt;According to Naur, the theory matters because inevitably a program needs to be &lt;em&gt;maintained&lt;&#x2F;em&gt;, i.e. modified after its initial creation. If all you have is the source code and not an internalized understanding of its design, the cost for those modifications will be higher. I think we can each remember a time we were introduced to a big existing codebase. At first our productivity was near zero. As we loaded the program theory into our mind, productivity rose.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;llms-and-program-theory&quot;&gt;LLMs and Program Theory&lt;&#x2F;h3&gt;
&lt;p&gt;LLMs as they currently exist cannot master a theory, design, or mental construct because they don&#x27;t remember beyond their context window. Only humans can can gain and retain program theory.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;program-entropy&quot;&gt;Program Entropy&lt;&#x2F;h2&gt;
&lt;p&gt;Complexity is a fundamental opposing force of programming&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and it correlates with entropy.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;...program building is an entropy-decreasing process...program maintenance is an entropy-increasing process, and even its most skillful execution only delays the subsidence of the system into unfixable obsolescence&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;-- Fred Brooks, &lt;em&gt;The Mythical Man-Month&lt;&#x2F;em&gt;, 1975&lt;&#x2F;p&gt;
&lt;p&gt;Brooks, another prominent historical figure in computing, asserted that after initial construction, the changes made to a program can only make the source code more complex. However, changes made in harmony with the design will do so at a slower rate.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;llms-and-program-entropy&quot;&gt;LLMs and Program Entropy&lt;&#x2F;h3&gt;
&lt;p&gt;An LLM is a token predictor. It works only at the level of text. It is not capable of working at a conceptual level: it doesn&#x27;t reason about ideas, diagrams, or requirements specifications. Everyone who has prompted an LLM with a large chunk of code has beheld that the LLM tends to apply unnecessary and bizarre changes, and the longer the conversation drags on, the more it diverges. How often have you witnessed an LLM &lt;em&gt;reduce&lt;&#x2F;em&gt; the complexity of a piece of code?&lt;&#x2F;p&gt;
&lt;p&gt;Only humans can decrease or resist complexity.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;We found wisdom for the LLM age by remembering what two forerunners of our discipline had to say about software design and complexity.&lt;&#x2F;p&gt;
&lt;p&gt;If you had hoped that AI would launch your engineering career to the next level, be warned that it could do the opposite. &lt;em&gt;LLMs can accelerate incompetence.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re a skilled, experienced engineer and you fear that AI will make you unemployable, adopt a more nuanced view. &lt;em&gt;LLMs can&#x27;t replace human engineering.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The business allure of AI is reduced costs through commoditized engineering, but just like offshore engineering talent brings forth mixed fruit, LLMs fall short and open risks.&lt;&#x2F;p&gt;
&lt;p&gt;The AI hype cycle will eventually peak&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Companies which overuse AI now will inherit a long tail of costs, and they&#x27;ll either pivot or go extinct. As such, the long-term value proposition for humans in engineering remains unchanged. The world still needs and will pay for technical skills and deep thinking in engineering.&lt;&#x2F;p&gt;
&lt;p&gt;AI will stick around, though. Use it as a tool, not a crutch, and continue to invest in the same fundamental engineering skills that were deemed valuable in 2019.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;next&quot;&gt;Next...&lt;&#x2F;h1&gt;
&lt;p&gt;Subscribe to my email list below. I plan to write more.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Leading_question&quot;&gt;Leading Question&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;XY_problem&quot;&gt;The XY Problem&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.thoughtworks.com&#x2F;content&#x2F;dam&#x2F;thoughtworks&#x2F;documents&#x2F;radar&#x2F;2025&#x2F;04&#x2F;tr_technology_radar_vol_32_en.pdf&quot;&gt;ThoughtWorks Technology Radar Volume 32&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;cekrem.github.io&#x2F;posts&#x2F;coding-as-craft-going-back-to-the-old-gym&#x2F;&quot;&gt;Coding as Craft: Going Back to the Old Gym&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;dcurt.is&#x2F;thinking&quot;&gt;Thoughts on Thinking&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;terriblesoftware.org&#x2F;2025&#x2F;04&#x2F;23&#x2F;the-hidden-cost-of-ai-coding&#x2F;&quot;&gt;The Hidden Cost of AI Coding&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;ExperiencedDevs&#x2F;comments&#x2F;1h3xpke&#x2F;dont_know_if_the_right_place_how_to_work_on&#x2F;&quot;&gt;&quot;I wonder if I&#x27;ll become redundant&quot;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pablo.rauzy.name&#x2F;dev&#x2F;naur1985programming.pdf&quot;&gt;Programming as Theory Building&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;grugbrain.dev&#x2F;#grug-on-complexity&quot;&gt;Grug on Complexity&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Gartner_hype_cycle&quot;&gt;Gartner Hype Cycle&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;">&lt;p&gt;&lt;em&gt;In software engineering, over-reliance on LLMs accelerates incompetence. LLMs can&#x27;t replace human critical thinking.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;The text in this essay was written without any use of AI.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;img class=&quot;mx-auto&quot; src=&quot;.&#x2F;llm_dependence.jpg&quot; alt=&quot;A chart showing a speculative inverse correlation between LLM dependence and IQ&quot;&#x2F;&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A speculative inverse correlation between LLM dependence and IQ
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;By now much ink has dried on the wave of AI and LLMs which crashed upon the public consciousness in late 2022. As an experienced software engineer, I&#x27;d like to speak to two troubling engineering perspectives I&#x27;ve observed on LLMs.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;llms-are-my-friend&quot;&gt;&quot;LLMs are my friend&quot;&lt;&#x2F;h1&gt;
&lt;p&gt;I don&#x27;t think anyone believes that a computer program is literally their companion, so let&#x27;s address the euphemistic intent of the above phrase: namely that an LLM conveys magnificent benefits upon its user.&lt;&#x2F;p&gt;
&lt;p&gt;Engineers who view LLMs as an ally invariably prioritize or feel pressured to prioritize velocity; for them, production trumps perspicacity. While it&#x27;s true that LLMs can deliver a lot of code quickly, their use carries a long tail of &lt;em&gt;risks&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;risks-of-using-llms&quot;&gt;Risks of using LLMs&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Output Risk&lt;&#x2F;strong&gt;. An LLM can give output that is blatantly incorrect, for example code that won&#x27;t compile. More likely and dangerously, it can give output that is subtly and undetectably wrong, like logic bugs. The risk is elevated if the prompter is not qualified to evaluate the output, for example project managers prompting for source code.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Input Risk&lt;&#x2F;strong&gt;. An LLM does not challenge a prompt which is leading&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; or whose assumptions are flawed or context is incomplete. Example: An engineer prompts, &quot;Provide a thread-safe list implementation in C#&quot; and receives 200 lines of flawless, correct code. It&#x27;s still the wrong answer, because the question should have been, &quot;How can I make this code thread-safe?&quot; and whose answer is &quot;Use &lt;code&gt;System.Collections.Concurrent&lt;&#x2F;code&gt;&quot; and 1 line of code. The LLM is not able to recognize an instance of the XY problem&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; because it was not asked to.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Future Velocity&lt;&#x2F;strong&gt;. This is your typical &quot;tech debt&quot; argument, but more urgent. AI can degrade the quality of your codebase &lt;em&gt;so fast&lt;&#x2F;em&gt;. Have you ever seen the fruits of hoarding disorder? From the outside, a house or apartment may look fine. But the inside is unsanitary, reprehensible, and nonfunctional. Developers are discovering that without strong guardrails, code produced by an LLM is like such a space.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;User Infantilization&lt;&#x2F;strong&gt;. An extinction of talent will occur within individuals and organizations that outsource thinking and problem solving to LLMs:
&lt;ul&gt;
&lt;li&gt;As senior engineers are deprived of the opportunity to learn through productive struggle, their existing problem solving and critical thinking skills atrophy:
&lt;ul&gt;
&lt;li&gt;&quot;Microsoft research on knowledge workers found that AI-driven confidence often comes at the expense of critical thinking&quot;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;In a world pushing for “reflexive AI usage,” I’m advocating for something different: thoughtful, intentional collaboration with AI that preserves the essence of coding as a craft&quot;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;LLMs give me finished thoughts, polished and convincing, but none of the intellectual growth that comes from developing them myself&quot; &lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Junior engineers never develop such skills to begin with and so can never in turn mentor future junior engineers.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Loss of Joy&lt;&#x2F;strong&gt;. Many developers are reporting that using AI robs them of flow state and the joy of creation.&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; AI-generated code is miserable to read and change.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In a future post, I plan to write about mitigations for each of these risks. Be sure to subscribe below if that sounds interesting.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;i-ll-become-redundant&quot;&gt;&quot;I&#x27;ll become redundant&quot;&lt;&#x2F;h1&gt;
&lt;p&gt;Source&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;No, you won&#x27;t. That said, there are certainly things you can do to further differentiate yourself from an LLM. To stay on topic, I&#x27;ll defer that to a future post. &lt;em&gt;(Update: I wrote &lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;dev-skills-for-the-llm-era&#x2F;&quot;&gt;that post&lt;&#x2F;a&gt;)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There are two programming competences that LLMs cannot furnish: &lt;em&gt;program theory&lt;&#x2F;em&gt; and &lt;em&gt;program entropy&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;program-theory&quot;&gt;Program Theory&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;...programming properly should be regarded as an activity by which the programmers form or achieve a certain kind of insight, a theory, of the matters at hand&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;-- Peter Naur, &lt;em&gt;Programming as Theory Building&lt;&#x2F;em&gt;, 1985&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Naur was one of the greats in computing. He argued, against popular belief at the time, that a program is not its source code. Rather, the program is a shared mental construct: a &lt;em&gt;theory&lt;&#x2F;em&gt; or &lt;em&gt;design&lt;&#x2F;em&gt;. From that, the engineer derives code, but the work product of value is the design, not code.&lt;&#x2F;p&gt;
&lt;p&gt;To help you think about the difference between program theory and program text, consider this thought experiment: Imagine that two engineering teams of equivalent talent, A and B, are locked in separate rooms. Each team is told not to communicate with the other. Team A is tasked to write a program, for example a simple terminal-based Chess game. Team B just waits, plays real Chess, or whatever. When Team A is finished, their source code is handed to Team B. Now each team is asked in parallel to add a feature to the program, for example a virtual chess player so the game can be played solo. (We&#x27;ll let Team A take a coffee break before they get started).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Question&lt;&#x2F;em&gt;: Which team will deliver a better solution?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Answer&lt;&#x2F;em&gt;: Team A, because those engineers have a fresh mental model of the program they just created, while Team B has none.&lt;&#x2F;p&gt;
&lt;p&gt;According to Naur, the theory matters because inevitably a program needs to be &lt;em&gt;maintained&lt;&#x2F;em&gt;, i.e. modified after its initial creation. If all you have is the source code and not an internalized understanding of its design, the cost for those modifications will be higher. I think we can each remember a time we were introduced to a big existing codebase. At first our productivity was near zero. As we loaded the program theory into our mind, productivity rose.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;llms-and-program-theory&quot;&gt;LLMs and Program Theory&lt;&#x2F;h3&gt;
&lt;p&gt;LLMs as they currently exist cannot master a theory, design, or mental construct because they don&#x27;t remember beyond their context window. Only humans can can gain and retain program theory.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;program-entropy&quot;&gt;Program Entropy&lt;&#x2F;h2&gt;
&lt;p&gt;Complexity is a fundamental opposing force of programming&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and it correlates with entropy.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;...program building is an entropy-decreasing process...program maintenance is an entropy-increasing process, and even its most skillful execution only delays the subsidence of the system into unfixable obsolescence&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;-- Fred Brooks, &lt;em&gt;The Mythical Man-Month&lt;&#x2F;em&gt;, 1975&lt;&#x2F;p&gt;
&lt;p&gt;Brooks, another prominent historical figure in computing, asserted that after initial construction, the changes made to a program can only make the source code more complex. However, changes made in harmony with the design will do so at a slower rate.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;llms-and-program-entropy&quot;&gt;LLMs and Program Entropy&lt;&#x2F;h3&gt;
&lt;p&gt;An LLM is a token predictor. It works only at the level of text. It is not capable of working at a conceptual level: it doesn&#x27;t reason about ideas, diagrams, or requirements specifications. Everyone who has prompted an LLM with a large chunk of code has beheld that the LLM tends to apply unnecessary and bizarre changes, and the longer the conversation drags on, the more it diverges. How often have you witnessed an LLM &lt;em&gt;reduce&lt;&#x2F;em&gt; the complexity of a piece of code?&lt;&#x2F;p&gt;
&lt;p&gt;Only humans can decrease or resist complexity.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;We found wisdom for the LLM age by remembering what two forerunners of our discipline had to say about software design and complexity.&lt;&#x2F;p&gt;
&lt;p&gt;If you had hoped that AI would launch your engineering career to the next level, be warned that it could do the opposite. &lt;em&gt;LLMs can accelerate incompetence.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re a skilled, experienced engineer and you fear that AI will make you unemployable, adopt a more nuanced view. &lt;em&gt;LLMs can&#x27;t replace human engineering.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The business allure of AI is reduced costs through commoditized engineering, but just like offshore engineering talent brings forth mixed fruit, LLMs fall short and open risks.&lt;&#x2F;p&gt;
&lt;p&gt;The AI hype cycle will eventually peak&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;05&#x2F;accelerated-incompetence&#x2F;#references&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Companies which overuse AI now will inherit a long tail of costs, and they&#x27;ll either pivot or go extinct. As such, the long-term value proposition for humans in engineering remains unchanged. The world still needs and will pay for technical skills and deep thinking in engineering.&lt;&#x2F;p&gt;
&lt;p&gt;AI will stick around, though. Use it as a tool, not a crutch, and continue to invest in the same fundamental engineering skills that were deemed valuable in 2019.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;next&quot;&gt;Next...&lt;&#x2F;h1&gt;
&lt;p&gt;Subscribe to my email list below. I plan to write more.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;References&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Leading_question&quot;&gt;Leading Question&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;XY_problem&quot;&gt;The XY Problem&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.thoughtworks.com&#x2F;content&#x2F;dam&#x2F;thoughtworks&#x2F;documents&#x2F;radar&#x2F;2025&#x2F;04&#x2F;tr_technology_radar_vol_32_en.pdf&quot;&gt;ThoughtWorks Technology Radar Volume 32&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;cekrem.github.io&#x2F;posts&#x2F;coding-as-craft-going-back-to-the-old-gym&#x2F;&quot;&gt;Coding as Craft: Going Back to the Old Gym&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;dcurt.is&#x2F;thinking&quot;&gt;Thoughts on Thinking&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;terriblesoftware.org&#x2F;2025&#x2F;04&#x2F;23&#x2F;the-hidden-cost-of-ai-coding&#x2F;&quot;&gt;The Hidden Cost of AI Coding&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;ExperiencedDevs&#x2F;comments&#x2F;1h3xpke&#x2F;dont_know_if_the_right_place_how_to_work_on&#x2F;&quot;&gt;&quot;I wonder if I&#x27;ll become redundant&quot;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pablo.rauzy.name&#x2F;dev&#x2F;naur1985programming.pdf&quot;&gt;Programming as Theory Building&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;grugbrain.dev&#x2F;#grug-on-complexity&quot;&gt;Grug on Complexity&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Gartner_hype_cycle&quot;&gt;Gartner Hype Cycle&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Tech Risk is Business Risk</title>
        <published>2025-04-25T00:00:00+00:00</published>
        <updated>2025-04-25T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;Tech risk is a business concern. Instead of vaguely bemoaning &quot;tech debt&quot; and hoping to &quot;do things right&quot;, explain its potential costs with words the business understands.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;.&#x2F;tech_risk_mapping.png&quot; alt=&quot;Diagram Mapping Tech Risks to Business Metrics&quot; title=&quot;Tech Risks mapped onto Business Metrics&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Tech Risks mapped onto Business Metrics
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;5 months ago, Reddit user &lt;em&gt;Agent_Aftermath&lt;&#x2F;em&gt; posted in &lt;em&gt;&#x2F;r&#x2F;AskProgramming&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why are so many companies so ambivalent or uncommitted to addressing tech-debt?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I think most engineers can empathize with this problem. We&#x27;ve all worked in codebases or infrastructures that smelled worse than a dirty diaper while our organization seemed unmoved or even resisted remediation.&lt;&#x2F;p&gt;
&lt;p&gt;The responses enumerated the many disincentives for addressing tech debt and presented only a few tenuous solutions. The top response succinctly captures the diagnosis:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is more difficult to quantify the value of addressing tech debt as opposed to creating a new feature. --oofy-gang&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The problem is not that tech debt is not real, nor that addressing it is frivolous. The pain lurks in &lt;em&gt;quantifying it&lt;&#x2F;em&gt; and that there are &lt;em&gt;apparently&lt;&#x2F;em&gt; more profitable uses of resources.&lt;&#x2F;p&gt;
&lt;p&gt;Note that for the rest of this article, I will use the term &lt;em&gt;tech risk&lt;&#x2F;em&gt; instead of &lt;em&gt;tech debt&lt;&#x2F;em&gt;. Why: In short, unlike mortgages, quality issues exact repayment suddenly and unpredictably. You can read my more detailed explanation &lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-a-business-values&quot;&gt;What a Business Values&lt;&#x2F;h2&gt;
&lt;p&gt;Boardrooms always optimize for business metrics, and in capitalism, all business processes reduce to revenue and profit*. If technical issues have no &lt;em&gt;anticipated&lt;&#x2F;em&gt; effect on the bottom line, then leadership will readily prioritize other capitalizable work.&lt;&#x2F;p&gt;
&lt;p&gt;It would be ludicrous for a CTO to stand up in a board meeting and declare, &quot;I&#x27;m happy to share that engineering has closed all open bugs in the backlog.&quot; This statement conveys no meaning to the board. It is unactionable techno-babble. Rather, the CTO knows to translate to business-speak: &quot;I&#x27;m happy to share that this quarter we&#x27;ll able to deploy 100% of our resources to new feature development, and because of this efficiency we will not renew our offshore QA contract, saving $3M over last quarter.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;The key word above is &lt;em&gt;anticipated&lt;&#x2F;em&gt;. There is high-quality research&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt; and literature&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt; demonstrating that internal tech quality &lt;em&gt;is a business concern after all&lt;&#x2F;em&gt;. Indirectly, the board &lt;em&gt;does&lt;&#x2F;em&gt; care about the engineering backlog, because engineering is a business unit, and business units cost or earn money.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s now focus on how you, a technical person, can present engineering concerns as business concerns. I have distilled your task into three steps:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Identify business metrics&lt;&#x2F;li&gt;
&lt;li&gt;Identify tech risks&lt;&#x2F;li&gt;
&lt;li&gt;Map tech risks onto business metrics&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;* Funded startups, nonprofits, and businesses with philanthropic goals may have more nuanced motives than just net profit.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;identify-business-metrics&quot;&gt;Identify Business Metrics&lt;&#x2F;h2&gt;
&lt;p&gt;If you&#x27;re not sure what metrics your business is tracking, ask. They will usually be instantiations of &quot;make more money&quot; or &quot;spend less money&quot;. However, revenues and profit may be linked to business processes with second-order metrics and performance indicators. For example, a food distributor must:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;procure raw foods from producers&lt;&#x2F;li&gt;
&lt;li&gt;store raw foods cleanly&lt;&#x2F;li&gt;
&lt;li&gt;process and package foods efficiently and safely&lt;&#x2F;li&gt;
&lt;li&gt;find and retain customers&lt;&#x2F;li&gt;
&lt;li&gt;distribute food quickly to customers via truck, rail, or air before it spoils.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The overall business metric &quot;net profit&quot; will be a complex result of its many business processes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;identify-tech-risks&quot;&gt;Identify Tech Risks&lt;&#x2F;h2&gt;
&lt;p&gt;A tech risk is a technology that a business depends on that could have unexpected costs. Examples include a buggy internal codebase, outdated software&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;, servers past their vendor support window, and overcomplicated architectures. Quality is correlated with risk: high-quality software has less bugs and is easier to change.&lt;&#x2F;p&gt;
&lt;p&gt;These risks can cause events which negatively affect business metrics. For example:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;An old software package contains a security flaw which results in data exfiltration.&lt;&#x2F;li&gt;
&lt;li&gt;A server fails and production is interrupted for a day.&lt;&#x2F;li&gt;
&lt;li&gt;A complicated architecture makes it expensive and slow to pivot the business to pursue a new revenue stream.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;An FMEA&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt; is helpful for prioritization, i.e. to decide which risks most merit mitigation. In this style of risk analysis, the risk is quantified in terms of its probability of occurrence and severity of the harm it could cause. You won&#x27;t be able to fill in the severity column until you&#x27;ve completed the mapping to business metrics below.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tech Risk&lt;&#x2F;th&gt;&lt;th&gt;Probability of Occurrence&lt;&#x2F;th&gt;&lt;th&gt;Severity of Harm&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Security flaw in shipment DB&lt;&#x2F;td&gt;&lt;td&gt;1%&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;Low&lt;&#x2F;strong&gt;. Low-value shipment data exfiltrated&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Security flaw in patient DB&lt;&#x2F;td&gt;&lt;td&gt;1%&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;Severe&lt;&#x2F;strong&gt;. Protected Health Information exfiltrated&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Server disk fails&lt;&#x2F;td&gt;&lt;td&gt;10% after 5 years&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;Moderate&lt;&#x2F;strong&gt;. Production interrupted 1 day&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;map-tech-risks-onto-business-metrics&quot;&gt;Map Tech Risks onto Business Metrics&lt;&#x2F;h2&gt;
&lt;p&gt;Each risk presents one or more harms, each of which can realize cost to the business. Sometimes the path to a business metric will traverse one or more business processes. For example, it may not be immediately apparent how a damaged brand reputation can affect revenues, but a reduced sales funnel conversion rate will directly impact the bottom line.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Event&lt;&#x2F;th&gt;&lt;th&gt;Business Metric Impacted&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Low-value shipment data exfiltrated&lt;&#x2F;td&gt;&lt;td&gt;None; who cares?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Protected Health Information exfiltrated&lt;&#x2F;td&gt;&lt;td&gt;Brand reputation damaged → Sales Funnel Conversion % (fewer new customers)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Protected Health Information exfiltrated&lt;&#x2F;td&gt;&lt;td&gt;Brand reputation damaged → Churn (customers leave)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Production interrupted 1 day&lt;&#x2F;td&gt;&lt;td&gt;Can’t fulfill committed sales → 1% loss of quarterly revenue&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Step back for a second and compare the items on the left and right. The CEO&#x27;s eyes may glaze over at the annual HIPAA training, but connecting a PHI breach convincingly to the company&#x27;s sales conversion rate will make them listen.&lt;&#x2F;p&gt;
&lt;p&gt;Conversely, if you can&#x27;t meaningfully associate a tech risk with a business cost, then you should accept that it is not a business priority. In the example above, we don&#x27;t need to prioritize hardening the shipment DB.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;To convince your company to address &quot;tech debt&quot;, map from tech risks to business metrics. Be prepared to discover that some tech risks don&#x27;t matter.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;next&quot;&gt;Next...&lt;&#x2F;h2&gt;
&lt;p&gt;Subscribe to my email list below. I plan to write more.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;pdf&#x2F;1908.00150&quot;&gt;Code Red: The Business Impact of Code Quality&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;itrevolution.com&#x2F;product&#x2F;accelerate&#x2F;&quot;&gt;Accelerate: The Science of Lean Software and DevOps&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;endoflife.date&#x2F;&quot;&gt;End-of-life (EOL)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Failure_mode_and_effects_analysis&quot;&gt;Failure Mode and Effects Analysis&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;">&lt;p&gt;&lt;em&gt;Tech risk is a business concern. Instead of vaguely bemoaning &quot;tech debt&quot; and hoping to &quot;do things right&quot;, explain its potential costs with words the business understands.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;.&#x2F;tech_risk_mapping.png&quot; alt=&quot;Diagram Mapping Tech Risks to Business Metrics&quot; title=&quot;Tech Risks mapped onto Business Metrics&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Tech Risks mapped onto Business Metrics
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;5 months ago, Reddit user &lt;em&gt;Agent_Aftermath&lt;&#x2F;em&gt; posted in &lt;em&gt;&#x2F;r&#x2F;AskProgramming&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why are so many companies so ambivalent or uncommitted to addressing tech-debt?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I think most engineers can empathize with this problem. We&#x27;ve all worked in codebases or infrastructures that smelled worse than a dirty diaper while our organization seemed unmoved or even resisted remediation.&lt;&#x2F;p&gt;
&lt;p&gt;The responses enumerated the many disincentives for addressing tech debt and presented only a few tenuous solutions. The top response succinctly captures the diagnosis:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is more difficult to quantify the value of addressing tech debt as opposed to creating a new feature. --oofy-gang&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The problem is not that tech debt is not real, nor that addressing it is frivolous. The pain lurks in &lt;em&gt;quantifying it&lt;&#x2F;em&gt; and that there are &lt;em&gt;apparently&lt;&#x2F;em&gt; more profitable uses of resources.&lt;&#x2F;p&gt;
&lt;p&gt;Note that for the rest of this article, I will use the term &lt;em&gt;tech risk&lt;&#x2F;em&gt; instead of &lt;em&gt;tech debt&lt;&#x2F;em&gt;. Why: In short, unlike mortgages, quality issues exact repayment suddenly and unpredictably. You can read my more detailed explanation &lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;its-not-tech-debt-its-tech-risk&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-a-business-values&quot;&gt;What a Business Values&lt;&#x2F;h2&gt;
&lt;p&gt;Boardrooms always optimize for business metrics, and in capitalism, all business processes reduce to revenue and profit*. If technical issues have no &lt;em&gt;anticipated&lt;&#x2F;em&gt; effect on the bottom line, then leadership will readily prioritize other capitalizable work.&lt;&#x2F;p&gt;
&lt;p&gt;It would be ludicrous for a CTO to stand up in a board meeting and declare, &quot;I&#x27;m happy to share that engineering has closed all open bugs in the backlog.&quot; This statement conveys no meaning to the board. It is unactionable techno-babble. Rather, the CTO knows to translate to business-speak: &quot;I&#x27;m happy to share that this quarter we&#x27;ll able to deploy 100% of our resources to new feature development, and because of this efficiency we will not renew our offshore QA contract, saving $3M over last quarter.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;The key word above is &lt;em&gt;anticipated&lt;&#x2F;em&gt;. There is high-quality research&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt; and literature&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt; demonstrating that internal tech quality &lt;em&gt;is a business concern after all&lt;&#x2F;em&gt;. Indirectly, the board &lt;em&gt;does&lt;&#x2F;em&gt; care about the engineering backlog, because engineering is a business unit, and business units cost or earn money.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s now focus on how you, a technical person, can present engineering concerns as business concerns. I have distilled your task into three steps:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Identify business metrics&lt;&#x2F;li&gt;
&lt;li&gt;Identify tech risks&lt;&#x2F;li&gt;
&lt;li&gt;Map tech risks onto business metrics&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;* Funded startups, nonprofits, and businesses with philanthropic goals may have more nuanced motives than just net profit.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;identify-business-metrics&quot;&gt;Identify Business Metrics&lt;&#x2F;h2&gt;
&lt;p&gt;If you&#x27;re not sure what metrics your business is tracking, ask. They will usually be instantiations of &quot;make more money&quot; or &quot;spend less money&quot;. However, revenues and profit may be linked to business processes with second-order metrics and performance indicators. For example, a food distributor must:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;procure raw foods from producers&lt;&#x2F;li&gt;
&lt;li&gt;store raw foods cleanly&lt;&#x2F;li&gt;
&lt;li&gt;process and package foods efficiently and safely&lt;&#x2F;li&gt;
&lt;li&gt;find and retain customers&lt;&#x2F;li&gt;
&lt;li&gt;distribute food quickly to customers via truck, rail, or air before it spoils.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The overall business metric &quot;net profit&quot; will be a complex result of its many business processes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;identify-tech-risks&quot;&gt;Identify Tech Risks&lt;&#x2F;h2&gt;
&lt;p&gt;A tech risk is a technology that a business depends on that could have unexpected costs. Examples include a buggy internal codebase, outdated software&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;, servers past their vendor support window, and overcomplicated architectures. Quality is correlated with risk: high-quality software has less bugs and is easier to change.&lt;&#x2F;p&gt;
&lt;p&gt;These risks can cause events which negatively affect business metrics. For example:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;An old software package contains a security flaw which results in data exfiltration.&lt;&#x2F;li&gt;
&lt;li&gt;A server fails and production is interrupted for a day.&lt;&#x2F;li&gt;
&lt;li&gt;A complicated architecture makes it expensive and slow to pivot the business to pursue a new revenue stream.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;An FMEA&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;tech-risk-is-business-risk&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt; is helpful for prioritization, i.e. to decide which risks most merit mitigation. In this style of risk analysis, the risk is quantified in terms of its probability of occurrence and severity of the harm it could cause. You won&#x27;t be able to fill in the severity column until you&#x27;ve completed the mapping to business metrics below.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tech Risk&lt;&#x2F;th&gt;&lt;th&gt;Probability of Occurrence&lt;&#x2F;th&gt;&lt;th&gt;Severity of Harm&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Security flaw in shipment DB&lt;&#x2F;td&gt;&lt;td&gt;1%&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;Low&lt;&#x2F;strong&gt;. Low-value shipment data exfiltrated&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Security flaw in patient DB&lt;&#x2F;td&gt;&lt;td&gt;1%&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;Severe&lt;&#x2F;strong&gt;. Protected Health Information exfiltrated&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Server disk fails&lt;&#x2F;td&gt;&lt;td&gt;10% after 5 years&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;Moderate&lt;&#x2F;strong&gt;. Production interrupted 1 day&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;map-tech-risks-onto-business-metrics&quot;&gt;Map Tech Risks onto Business Metrics&lt;&#x2F;h2&gt;
&lt;p&gt;Each risk presents one or more harms, each of which can realize cost to the business. Sometimes the path to a business metric will traverse one or more business processes. For example, it may not be immediately apparent how a damaged brand reputation can affect revenues, but a reduced sales funnel conversion rate will directly impact the bottom line.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Event&lt;&#x2F;th&gt;&lt;th&gt;Business Metric Impacted&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Low-value shipment data exfiltrated&lt;&#x2F;td&gt;&lt;td&gt;None; who cares?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Protected Health Information exfiltrated&lt;&#x2F;td&gt;&lt;td&gt;Brand reputation damaged → Sales Funnel Conversion % (fewer new customers)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Protected Health Information exfiltrated&lt;&#x2F;td&gt;&lt;td&gt;Brand reputation damaged → Churn (customers leave)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Production interrupted 1 day&lt;&#x2F;td&gt;&lt;td&gt;Can’t fulfill committed sales → 1% loss of quarterly revenue&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Step back for a second and compare the items on the left and right. The CEO&#x27;s eyes may glaze over at the annual HIPAA training, but connecting a PHI breach convincingly to the company&#x27;s sales conversion rate will make them listen.&lt;&#x2F;p&gt;
&lt;p&gt;Conversely, if you can&#x27;t meaningfully associate a tech risk with a business cost, then you should accept that it is not a business priority. In the example above, we don&#x27;t need to prioritize hardening the shipment DB.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;To convince your company to address &quot;tech debt&quot;, map from tech risks to business metrics. Be prepared to discover that some tech risks don&#x27;t matter.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;next&quot;&gt;Next...&lt;&#x2F;h2&gt;
&lt;p&gt;Subscribe to my email list below. I plan to write more.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;pdf&#x2F;1908.00150&quot;&gt;Code Red: The Business Impact of Code Quality&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;itrevolution.com&#x2F;product&#x2F;accelerate&#x2F;&quot;&gt;Accelerate: The Science of Lean Software and DevOps&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;endoflife.date&#x2F;&quot;&gt;End-of-life (EOL)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Failure_mode_and_effects_analysis&quot;&gt;Failure Mode and Effects Analysis&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>It&#x27;s Not Tech Debt. It&#x27;s Tech Risk.</title>
        <published>2025-04-09T00:00:00+00:00</published>
        <updated>2025-04-09T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;</id>
        <summary type="html">&lt;p&gt;&lt;em&gt;Tech Debt becomes due swiftly and chaotically. Tech Risk is a better metaphor.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;.&#x2F;challenger_explosion.jpg&quot; alt=&quot;Space Shuttle Challenger, 1986&quot; title=&quot;Space Shuttle Challenger, 1986&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Space Shuttle Challenger, 1986. 
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;what-is-tech-debt&quot;&gt;What is Tech Debt?&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;Tech debt&lt;&#x2F;em&gt; is a metaphor coined in 1992 by Ward Cunningham&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;In software engineering and adjacent disciplines like DevOps, it relates shortcuts on quality to financial debt.&lt;&#x2F;p&gt;
&lt;p&gt;We all know how financial debt works: you pay to use someone else&#x27;s money. The amount you pay is proportional to the amount you borrow, how long you borrow it, and the interest rate. Borrowing can be a good idea since having money &lt;em&gt;right now&lt;&#x2F;em&gt; enables valuable events like buying a house or starting a business.&lt;&#x2F;p&gt;
&lt;p&gt;Wardites hold that tech debt, like financial debt, incurs a penalty which over time compounds the amount of labor required to continue delivering. Etiologies vary: Some folks hold that tech debt originates when stakeholders &lt;em&gt;intentionally&lt;&#x2F;em&gt; trade quality for delivery speed. Others say it happens &lt;em&gt;inadvertently&lt;&#x2F;em&gt;. Some distinguish between &lt;em&gt;reckless&lt;&#x2F;em&gt; and &lt;em&gt;prudent&lt;&#x2F;em&gt; tech debt&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;financial-debt-is-predictable&quot;&gt;Financial Debt is Predictable&lt;&#x2F;h2&gt;
&lt;p&gt;The tech debt metaphor appeals because it is easy to explain. Unfortunately, the metaphor is strained. &lt;em&gt;Tech debt is not like financial debt&lt;&#x2F;em&gt;. Let&#x27;s see why not.&lt;&#x2F;p&gt;
&lt;p&gt;Mortgages and other loan products are &lt;em&gt;predictable&lt;&#x2F;em&gt;, for both the lender and the borrower. Borrowers repay on a steady schedule which has a specified maturity term, e.g. 15 or 30 years. The interest rate is fixed or mostly fixed. From day one, a spreadsheet predicts exactly how much principal and interest the borrower will still owe in month 137. For a bank, any loan is part of a diversified portfolio of many loans. While banks do fail&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, stricter underwriting rules since 2008 have made it less common. Moreover, the societal harm of any individual bank failure is mitigated by distributing its cost across the entire banking system, facilitated by the full faith and assurance of the US Federal Reserve.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tech-debt-detonates&quot;&gt;Tech Debt Detonates&lt;&#x2F;h2&gt;
&lt;p&gt;Here&#x27;s how financial debt could be like tech debt. Imagine a hypothetical dystopian financial system in which banks could demand full mortgage repayment on a whim. We&#x27;ll call these &lt;em&gt;detonating mortgages&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; — If you can&#x27;t pay a few hundred thousand dollars &lt;em&gt;right now&lt;&#x2F;em&gt;, you lose your home. No, you didn&#x27;t do anything wrong, but the bank needs some liquidity today, so you and your children are now living in a hotel.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;.&#x2F;bank_and_family.jpg&quot; alt=&quot;Banker on the Phone and Family in a Hotel&quot; title=&quot;Banker on the Phone and Family in a Hotel&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A detonating mortgage
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Tech debt is like a detonating mortgage. Its payment becomes due unpredictably. Its timing is not fair or uniformly distributed.&lt;&#x2F;p&gt;
&lt;p&gt;The people who investigated the Challenger disaster&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; didn&#x27;t have the term tech debt, but they listed quality shortcuts among the root causes. These quality shortcuts exposed the space program to risk. If NASA could have had at their disposal a spreadsheet predicting that the O-ring would fail on January 28, 1986, they would have decided not to fly.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Quality shortcuts create risk. Some risk is necessary to reach our goals; how much we can tolerate depends on the expected reward&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s not delude ourselves when we&#x27;re taking risks. Deferred tech quality is not like a loan. The cost of quality shortcuts doesn&#x27;t manifest on a schedule.&lt;&#x2F;p&gt;
&lt;p&gt;Use the term &lt;strong&gt;tech risk&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;next&quot;&gt;Next...&lt;&#x2F;h2&gt;
&lt;p&gt;Want to identify, prioritize, and mitigate tech risk? Subscribe to my email list below. I plan to write more about this topic.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ward_Cunningham&quot;&gt;Ward Cunningham&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;martinfowler.com&#x2F;bliki&#x2F;TechnicalDebtQuadrant.html&quot;&gt;Technical Debt Quadrant&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.bitsaboutmoney.com&#x2F;archive&#x2F;banking-in-very-uncertain-times&#x2F;&quot;&gt;Banking in Very Uncertain Times&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Patrick McKenzie invented this thought experiment in &lt;em&gt;Banking in Very Uncertain Times&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Rogers_Commission_Report&quot;&gt;Rogers Commission Report&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;waynehale.wordpress.com&#x2F;2024&#x2F;01&#x2F;10&#x2F;the-most-important-thing&#x2F;&quot;&gt;The Most Important Thing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;">&lt;p&gt;&lt;em&gt;Tech Debt becomes due swiftly and chaotically. Tech Risk is a better metaphor.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;.&#x2F;challenger_explosion.jpg&quot; alt=&quot;Space Shuttle Challenger, 1986&quot; title=&quot;Space Shuttle Challenger, 1986&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    Space Shuttle Challenger, 1986. 
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;what-is-tech-debt&quot;&gt;What is Tech Debt?&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;Tech debt&lt;&#x2F;em&gt; is a metaphor coined in 1992 by Ward Cunningham&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;In software engineering and adjacent disciplines like DevOps, it relates shortcuts on quality to financial debt.&lt;&#x2F;p&gt;
&lt;p&gt;We all know how financial debt works: you pay to use someone else&#x27;s money. The amount you pay is proportional to the amount you borrow, how long you borrow it, and the interest rate. Borrowing can be a good idea since having money &lt;em&gt;right now&lt;&#x2F;em&gt; enables valuable events like buying a house or starting a business.&lt;&#x2F;p&gt;
&lt;p&gt;Wardites hold that tech debt, like financial debt, incurs a penalty which over time compounds the amount of labor required to continue delivering. Etiologies vary: Some folks hold that tech debt originates when stakeholders &lt;em&gt;intentionally&lt;&#x2F;em&gt; trade quality for delivery speed. Others say it happens &lt;em&gt;inadvertently&lt;&#x2F;em&gt;. Some distinguish between &lt;em&gt;reckless&lt;&#x2F;em&gt; and &lt;em&gt;prudent&lt;&#x2F;em&gt; tech debt&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;financial-debt-is-predictable&quot;&gt;Financial Debt is Predictable&lt;&#x2F;h2&gt;
&lt;p&gt;The tech debt metaphor appeals because it is easy to explain. Unfortunately, the metaphor is strained. &lt;em&gt;Tech debt is not like financial debt&lt;&#x2F;em&gt;. Let&#x27;s see why not.&lt;&#x2F;p&gt;
&lt;p&gt;Mortgages and other loan products are &lt;em&gt;predictable&lt;&#x2F;em&gt;, for both the lender and the borrower. Borrowers repay on a steady schedule which has a specified maturity term, e.g. 15 or 30 years. The interest rate is fixed or mostly fixed. From day one, a spreadsheet predicts exactly how much principal and interest the borrower will still owe in month 137. For a bank, any loan is part of a diversified portfolio of many loans. While banks do fail&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, stricter underwriting rules since 2008 have made it less common. Moreover, the societal harm of any individual bank failure is mitigated by distributing its cost across the entire banking system, facilitated by the full faith and assurance of the US Federal Reserve.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tech-debt-detonates&quot;&gt;Tech Debt Detonates&lt;&#x2F;h2&gt;
&lt;p&gt;Here&#x27;s how financial debt could be like tech debt. Imagine a hypothetical dystopian financial system in which banks could demand full mortgage repayment on a whim. We&#x27;ll call these &lt;em&gt;detonating mortgages&lt;&#x2F;em&gt;&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; — If you can&#x27;t pay a few hundred thousand dollars &lt;em&gt;right now&lt;&#x2F;em&gt;, you lose your home. No, you didn&#x27;t do anything wrong, but the bank needs some liquidity today, so you and your children are now living in a hotel.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;.&#x2F;bank_and_family.jpg&quot; alt=&quot;Banker on the Phone and Family in a Hotel&quot; title=&quot;Banker on the Phone and Family in a Hotel&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;text-center&quot;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;
    A detonating mortgage
  &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Tech debt is like a detonating mortgage. Its payment becomes due unpredictably. Its timing is not fair or uniformly distributed.&lt;&#x2F;p&gt;
&lt;p&gt;The people who investigated the Challenger disaster&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; didn&#x27;t have the term tech debt, but they listed quality shortcuts among the root causes. These quality shortcuts exposed the space program to risk. If NASA could have had at their disposal a spreadsheet predicting that the O-ring would fail on January 28, 1986, they would have decided not to fly.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Quality shortcuts create risk. Some risk is necessary to reach our goals; how much we can tolerate depends on the expected reward&lt;sup&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2025&#x2F;04&#x2F;its-not-tech-debt-its-tech-risk&#x2F;#references&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s not delude ourselves when we&#x27;re taking risks. Deferred tech quality is not like a loan. The cost of quality shortcuts doesn&#x27;t manifest on a schedule.&lt;&#x2F;p&gt;
&lt;p&gt;Use the term &lt;strong&gt;tech risk&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;next&quot;&gt;Next...&lt;&#x2F;h2&gt;
&lt;p&gt;Want to identify, prioritize, and mitigate tech risk? Subscribe to my email list below. I plan to write more about this topic.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ward_Cunningham&quot;&gt;Ward Cunningham&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;martinfowler.com&#x2F;bliki&#x2F;TechnicalDebtQuadrant.html&quot;&gt;Technical Debt Quadrant&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.bitsaboutmoney.com&#x2F;archive&#x2F;banking-in-very-uncertain-times&#x2F;&quot;&gt;Banking in Very Uncertain Times&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Patrick McKenzie invented this thought experiment in &lt;em&gt;Banking in Very Uncertain Times&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Rogers_Commission_Report&quot;&gt;Rogers Commission Report&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;waynehale.wordpress.com&#x2F;2024&#x2F;01&#x2F;10&#x2F;the-most-important-thing&#x2F;&quot;&gt;The Most Important Thing&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Why Programming is Hard</title>
        <published>2024-02-16T00:00:00+00:00</published>
        <updated>2024-02-16T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;</id>
        <summary type="html">&lt;p&gt;Programming computers is hard because, as &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=-J_xL4IGhJA&quot;&gt;Hal put it&lt;&#x2F;a&gt;, it isn&#x27;t about programming, and it isn&#x27;t about computers.&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: center; width: 60%; margin: 0 auto;&quot;&gt;
  &lt;img src=&quot;.&#x2F;wizard.png&quot;&#x2F;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;A wizard conjuring a computer program. Generated by Dall-E&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Even the most mundane of programming issues are rooted in profound questions:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Why are my dependencies broken?&quot; =&amp;gt; &quot;What is causality?&quot; &lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;#References&quot;&gt;1&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Should I check for null?&quot; =&amp;gt; &quot;When can we know a program is correct? Design time, compile time, or run time?&quot;  &lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;#References&quot;&gt;2,3&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why don&#x27;t I understand this code?&quot; =&amp;gt; &quot;What is memory, cognition, and language?&quot; &lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;#References&quot;&gt;4&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why is this program buggy?&quot; =&amp;gt; &quot;What is a proof?&quot; &lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;#References&quot;&gt;5,6&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;While you&#x27;ll overhear the questions on the left rising from the desks of developers on a Tuesday afternoon, their answers are surprisingly elusive and timeless.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;ieeexplore.ieee.org&#x2F;document&#x2F;7243738&quot;&gt;Program Actions as Actual Causes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20090628071208&#x2F;http:&#x2F;&#x2F;qconlondon.com&#x2F;london-2009&#x2F;speaker&#x2F;Tony+Hoare&quot;&gt;Null References: The Billion Dollar Mistake&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2018&#x2F;01&#x2F;the-three-levels-of-software-why-code.html&quot;&gt;The Three Levels of Software&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Tacit_knowledge&quot;&gt;Tacit knowledge&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Curry%E2%80%93Howard_correspondence&quot;&gt;Curry-Howard correspondence&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;tomasp.net&#x2F;blog&#x2F;2018&#x2F;alien-lambda-calculus&quot;&gt;Would aliens understand lambda calculus?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;">&lt;p&gt;Programming computers is hard because, as &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=-J_xL4IGhJA&quot;&gt;Hal put it&lt;&#x2F;a&gt;, it isn&#x27;t about programming, and it isn&#x27;t about computers.&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: center; width: 60%; margin: 0 auto;&quot;&gt;
  &lt;img src=&quot;.&#x2F;wizard.png&quot;&#x2F;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;A wizard conjuring a computer program. Generated by Dall-E&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Even the most mundane of programming issues are rooted in profound questions:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Why are my dependencies broken?&quot; =&amp;gt; &quot;What is causality?&quot; &lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;#References&quot;&gt;1&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Should I check for null?&quot; =&amp;gt; &quot;When can we know a program is correct? Design time, compile time, or run time?&quot;  &lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;#References&quot;&gt;2,3&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why don&#x27;t I understand this code?&quot; =&amp;gt; &quot;What is memory, cognition, and language?&quot; &lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;#References&quot;&gt;4&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Why is this program buggy?&quot; =&amp;gt; &quot;What is a proof?&quot; &lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;02&#x2F;why-programming-is-hard&#x2F;#References&quot;&gt;5,6&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;While you&#x27;ll overhear the questions on the left rising from the desks of developers on a Tuesday afternoon, their answers are surprisingly elusive and timeless.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;references&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;ieeexplore.ieee.org&#x2F;document&#x2F;7243738&quot;&gt;Program Actions as Actual Causes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20090628071208&#x2F;http:&#x2F;&#x2F;qconlondon.com&#x2F;london-2009&#x2F;speaker&#x2F;Tony+Hoare&quot;&gt;Null References: The Billion Dollar Mistake&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2018&#x2F;01&#x2F;the-three-levels-of-software-why-code.html&quot;&gt;The Three Levels of Software&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Tacit_knowledge&quot;&gt;Tacit knowledge&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Curry%E2%80%93Howard_correspondence&quot;&gt;Curry-Howard correspondence&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;tomasp.net&#x2F;blog&#x2F;2018&#x2F;alien-lambda-calculus&quot;&gt;Would aliens understand lambda calculus?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Grounded Programming Pedagogy</title>
        <published>2024-01-25T00:00:00+00:00</published>
        <updated>2024-01-25T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;01&#x2F;grounded-programming-pedagogy&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;01&#x2F;grounded-programming-pedagogy&#x2F;</id>
        <summary type="html">&lt;p&gt;In the alum chat for &lt;a href=&quot;https:&#x2F;&#x2F;www.mirdin.com&quot;&gt;Mirdin&lt;&#x2F;a&gt;, someone posted the following question, &quot;Would it be better to start teaching beginners functional or imperative programming first?&quot;&lt;&#x2F;p&gt;
&lt;p&gt;Pretending for a second that &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Functional_programming&quot;&gt;FP&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Imperative_programming&quot;&gt;IP&lt;&#x2F;a&gt; are the only choices (they&#x27;re &lt;a href=&quot;https:&#x2F;&#x2F;info.ucl.ac.be&#x2F;~pvr&#x2F;VanRoyChapter.pdf&quot;&gt;not&lt;&#x2F;a&gt;), an answer depends on where your beginner comes from.&lt;&#x2F;p&gt;
&lt;p&gt;A meta-pedagogical (teaching about teaching) answer acknowledges that learning starts in a place the learner feels &lt;a href=&quot;https:&#x2F;&#x2F;argumatronic.com&#x2F;posts&#x2F;2018-09-02-effective-metaphor.html&quot;&gt;grounded&lt;&#x2F;a&gt; and connects them from there to new knowledge. For example, &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Subitizing&quot;&gt;subitizing&lt;&#x2F;a&gt; is an innate ability. A developmentally normal child can instantly know how many objects are presented, for values up to about 5.&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: center; width: 60%; margin: 0 auto;&quot;&gt;
  &lt;img src=&quot;.&#x2F;5_die.png&quot;&#x2F;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;Image: How many dots are there? You just subitized.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;From there, you can teach a 5-year-old arithmetic, for example to add, by having them subitize groups of objects alongside numerals and the math symbol &lt;code&gt;+&lt;&#x2F;code&gt;. This connects their innate notion of quantity to the abstract notion of numbers.&lt;&#x2F;p&gt;
&lt;p&gt;The MIT book and course &lt;a href=&quot;https:&#x2F;&#x2F;web.mit.edu&#x2F;6.001&#x2F;6.037&#x2F;sicp.pdf&quot;&gt;SICP&lt;&#x2F;a&gt; is a masterpiece in programming pedagogy, and it falls heavily on the FP side. Watch Professor Sussman absolutely rip apart side effects in &lt;a href=&quot;https:&#x2F;&#x2F;ocw.mit.edu&#x2F;courses&#x2F;6-001-structure-and-interpretation-of-computer-programs-spring-2005&#x2F;resources&#x2F;5a-assignment-state-and-side-effects&#x2F;&quot;&gt;lecture 5A&lt;&#x2F;a&gt;. But not everybody &quot;gets&quot; this approach easily. Even Hal acknowledges in this &lt;a href=&quot;https:&#x2F;&#x2F;corecursive.com&#x2F;039-hal-abelson-sicp&#x2F;&quot;&gt;Corecursive interview&lt;&#x2F;a&gt; that the FP approach didn&#x27;t work for everyone:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;In the very beginning days, we would teach a sort of short courses for MIT faculty and some of the electrical engineers would just get stuck. &quot;You haven’t showed us how the transistors work&quot;. ...People think different ways. Some people have to be grounded on where they’re comfortable and for some people, well, it really is transistors.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Contrast that to somebody who knows what a function is, in the math sense. The machinery of a &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Transistor&quot;&gt;transistor&lt;&#x2F;a&gt;, of gates, sources, drains, and &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Transistor%E2%80%93transistor_logic&quot;&gt;TTL&lt;&#x2F;a&gt; will be an irritating detail, like multiplying matrices by hand.&lt;&#x2F;p&gt;
&lt;p&gt;So in the dichotomy between introducing FP and IP first, the answer might depend on where the learner is coming from. I learned IP and OOP first because that&#x27;s what material was available. I was first exposed to FP in college in the form of Scheme. It was disorienting. I couldn&#x27;t count all the parentheses, let alone grok tail recursion. I wish it could have been presented to me grounded in terms of what I was already comfortable with, for example high school algebra.&lt;&#x2F;p&gt;
&lt;p&gt;I say, introduce multiple programming paradigms early, and ground it in what the learner knows. A fundamental programming skill is to think at &lt;a href=&quot;https:&#x2F;&#x2F;www.joelonsoftware.com&#x2F;2002&#x2F;11&#x2F;11&#x2F;the-law-of-leaky-abstractions&#x2F;&quot;&gt;multiple levels of abstraction&lt;&#x2F;a&gt;. The Haskell programmer needs to be aware that even monads at some point are just bits in a memory hierarchy, just as it&#x27;s important for an assembly programmer to know that while register allocation is critical to performance, registers are not really what the program is about.&lt;&#x2F;p&gt;
&lt;p&gt;To close, let&#x27;s ground this discussion in something we all know. To design a cathedral, the architect needs to know what bricks will be used. To build a cathedral, the bricklayer needs to envision the noble end to which each brick is set down.&lt;&#x2F;p&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;01&#x2F;grounded-programming-pedagogy&#x2F;">&lt;p&gt;In the alum chat for &lt;a href=&quot;https:&#x2F;&#x2F;www.mirdin.com&quot;&gt;Mirdin&lt;&#x2F;a&gt;, someone posted the following question, &quot;Would it be better to start teaching beginners functional or imperative programming first?&quot;&lt;&#x2F;p&gt;
&lt;p&gt;Pretending for a second that &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Functional_programming&quot;&gt;FP&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Imperative_programming&quot;&gt;IP&lt;&#x2F;a&gt; are the only choices (they&#x27;re &lt;a href=&quot;https:&#x2F;&#x2F;info.ucl.ac.be&#x2F;~pvr&#x2F;VanRoyChapter.pdf&quot;&gt;not&lt;&#x2F;a&gt;), an answer depends on where your beginner comes from.&lt;&#x2F;p&gt;
&lt;p&gt;A meta-pedagogical (teaching about teaching) answer acknowledges that learning starts in a place the learner feels &lt;a href=&quot;https:&#x2F;&#x2F;argumatronic.com&#x2F;posts&#x2F;2018-09-02-effective-metaphor.html&quot;&gt;grounded&lt;&#x2F;a&gt; and connects them from there to new knowledge. For example, &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Subitizing&quot;&gt;subitizing&lt;&#x2F;a&gt; is an innate ability. A developmentally normal child can instantly know how many objects are presented, for values up to about 5.&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: center; width: 60%; margin: 0 auto;&quot;&gt;
  &lt;img src=&quot;.&#x2F;5_die.png&quot;&#x2F;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;Image: How many dots are there? You just subitized.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;From there, you can teach a 5-year-old arithmetic, for example to add, by having them subitize groups of objects alongside numerals and the math symbol &lt;code&gt;+&lt;&#x2F;code&gt;. This connects their innate notion of quantity to the abstract notion of numbers.&lt;&#x2F;p&gt;
&lt;p&gt;The MIT book and course &lt;a href=&quot;https:&#x2F;&#x2F;web.mit.edu&#x2F;6.001&#x2F;6.037&#x2F;sicp.pdf&quot;&gt;SICP&lt;&#x2F;a&gt; is a masterpiece in programming pedagogy, and it falls heavily on the FP side. Watch Professor Sussman absolutely rip apart side effects in &lt;a href=&quot;https:&#x2F;&#x2F;ocw.mit.edu&#x2F;courses&#x2F;6-001-structure-and-interpretation-of-computer-programs-spring-2005&#x2F;resources&#x2F;5a-assignment-state-and-side-effects&#x2F;&quot;&gt;lecture 5A&lt;&#x2F;a&gt;. But not everybody &quot;gets&quot; this approach easily. Even Hal acknowledges in this &lt;a href=&quot;https:&#x2F;&#x2F;corecursive.com&#x2F;039-hal-abelson-sicp&#x2F;&quot;&gt;Corecursive interview&lt;&#x2F;a&gt; that the FP approach didn&#x27;t work for everyone:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;In the very beginning days, we would teach a sort of short courses for MIT faculty and some of the electrical engineers would just get stuck. &quot;You haven’t showed us how the transistors work&quot;. ...People think different ways. Some people have to be grounded on where they’re comfortable and for some people, well, it really is transistors.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Contrast that to somebody who knows what a function is, in the math sense. The machinery of a &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Transistor&quot;&gt;transistor&lt;&#x2F;a&gt;, of gates, sources, drains, and &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Transistor%E2%80%93transistor_logic&quot;&gt;TTL&lt;&#x2F;a&gt; will be an irritating detail, like multiplying matrices by hand.&lt;&#x2F;p&gt;
&lt;p&gt;So in the dichotomy between introducing FP and IP first, the answer might depend on where the learner is coming from. I learned IP and OOP first because that&#x27;s what material was available. I was first exposed to FP in college in the form of Scheme. It was disorienting. I couldn&#x27;t count all the parentheses, let alone grok tail recursion. I wish it could have been presented to me grounded in terms of what I was already comfortable with, for example high school algebra.&lt;&#x2F;p&gt;
&lt;p&gt;I say, introduce multiple programming paradigms early, and ground it in what the learner knows. A fundamental programming skill is to think at &lt;a href=&quot;https:&#x2F;&#x2F;www.joelonsoftware.com&#x2F;2002&#x2F;11&#x2F;11&#x2F;the-law-of-leaky-abstractions&#x2F;&quot;&gt;multiple levels of abstraction&lt;&#x2F;a&gt;. The Haskell programmer needs to be aware that even monads at some point are just bits in a memory hierarchy, just as it&#x27;s important for an assembly programmer to know that while register allocation is critical to performance, registers are not really what the program is about.&lt;&#x2F;p&gt;
&lt;p&gt;To close, let&#x27;s ground this discussion in something we all know. To design a cathedral, the architect needs to know what bricks will be used. To build a cathedral, the bricklayer needs to envision the noble end to which each brick is set down.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>A Design is a Mold for Code</title>
        <published>2024-01-15T00:00:00+00:00</published>
        <updated>2024-01-15T00:00:00+00:00</updated>
        
        <author>
          <name>Doug</name>
        </author>
        <link rel="alternate" type="text/html" href="https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;01&#x2F;a-design-is-a-mold-for-code&#x2F;"/>
        <id>https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;01&#x2F;a-design-is-a-mold-for-code&#x2F;</id>
        <summary type="html">&lt;p&gt;I&#x27;m always in search of good metaphors for software design. Good or not, here&#x27;s one:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;A Design is a Mold for Code&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;In manufacturing, a mold is a hollow shape that fills with fluid material which expands into the space and sets to form a casting.&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: center; width: 60%; margin: 0 auto;&quot;&gt;
  &lt;img src=&quot;.&#x2F;dall-e-muffin-pan.png&quot;&#x2F;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;Image: A useful mold. Generated by Dall-E&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Like in manufacturing, code fills the &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Negative_space&quot;&gt;negative space&lt;&#x2F;a&gt; of a software design. Over time, code sets and becomes harder to change.&lt;&#x2F;p&gt;
&lt;p&gt;Imagine two engineering teams who independently &quot;fill&quot; (implement) a design, and the design is the set of standards for a web browser. The two implementations are Chrome and Firefox. The two browsers have independent codebases&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;01&#x2F;a-design-is-a-mold-for-code&#x2F;#notes&quot;&gt;1&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt; which take vastly different shapes, but as far as web standards are concerned, the two are equal. You could switch from Chrome to Firefox (which I &lt;a href=&quot;https:&#x2F;&#x2F;www.eff.org&#x2F;deeplinks&#x2F;2021&#x2F;12&#x2F;chrome-users-beware-manifest-v3-deceitful-and-threatening&quot;&gt;recommend&lt;&#x2F;a&gt;) and still browse compliant web pages with no discernible change.&lt;&#x2F;p&gt;
&lt;p&gt;Programmers who also like math sometimes call two pieces of code which can be swapped &lt;a href=&quot;https:&#x2F;&#x2F;blog.ploeh.dk&#x2F;2018&#x2F;01&#x2F;08&#x2F;software-design-isomorphisms&#x2F;&quot;&gt;isomorphic&lt;&#x2F;a&gt; with respect to the spec.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s important not to reverse the causality: a design causes the work product, not the converse. A mold causes a casting, and a software design causes code. Nevertheless, to some extent, one can go in reverse, i.e. reconstruct a mold from a casting or infer a design from code.&lt;&#x2F;p&gt;
&lt;p&gt;The reconstructed mold might lose some fidelity, like sharp edges or precise dimensions, but it&#x27;s far worse for code. Looking at code without supplemental information, a new dev can only infer a dim, vague notion of its design. She might even sense the mind(s) behind the design. However, it would be costly if even possible to losslessly reconstruct the design, i.e. to such a fidelity that it could be the basis for an isomorphic implementation.&lt;&#x2F;p&gt;
&lt;p&gt;In pseudocode:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;[Test]
&lt;&#x2F;span&gt;&lt;span&gt;fn Reverse_ProducesIsomorphicDesign()
&lt;&#x2F;span&gt;&lt;span&gt;    let design1 : ...
&lt;&#x2F;span&gt;&lt;span&gt;    let code1 = implement(design1)
&lt;&#x2F;span&gt;&lt;span&gt;    let design2 = reverse(code1)
&lt;&#x2F;span&gt;&lt;span&gt;    let code2 = implement(design2)
&lt;&#x2F;span&gt;&lt;span&gt;    assert(isomorphic(code1, code2)) &#x2F;&#x2F; Fails
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Above: The roundtrip from a design to code back to design is lossy.&lt;&#x2F;p&gt;
&lt;p&gt;There are a few reasons for this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A codebase maybe too large to fit into a dev&#x27;s head. The codebases for Chrome and Firefox are huge. Like the limited context window of ChatGPT, a human has limited working memory and forgets. Though with time and repetition, knowledge transitions to long-term memory.&lt;&#x2F;li&gt;
&lt;li&gt;It&#x27;s hard to infer high-level concepts from low-level details. For example, decompiling assembly back to C.&lt;&#x2F;li&gt;
&lt;li&gt;Design and code have a many-to-many relationship.
&lt;ul&gt;
&lt;li&gt;There can be many implementations that satisfy a design.&lt;&#x2F;li&gt;
&lt;li&gt;There can be many designs that result in the same code.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is a problem for software that outlives its creator(s). The software will languish unless knowledge is &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Organizational_memory&quot;&gt;retained&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bus_factor&quot;&gt;replicated&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There are some things developers can do to keep their software alive:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Write down the design. Use &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Literate_programming&quot;&gt;natural language&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Make the &lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2018&#x2F;01&#x2F;the-design-of-software-is-thing-apart.html&quot;&gt;design apparent in the code&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Use &lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2022&#x2F;03&#x2F;abstraction-not-what-you-think-it-is.html&quot;&gt;precise abstractions&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Use &lt;a href=&quot;https:&#x2F;&#x2F;argumatronic.com&#x2F;posts&#x2F;2018-09-02-effective-metaphor.html&quot;&gt;effective&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;onlurking&#x2F;fc5c81d18cfce9ff81bc968a7f342fb1#tacit-knowledge-and-documentation&quot;&gt;metaphors&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Make the code &lt;a href=&quot;https:&#x2F;&#x2F;www.oreilly.com&#x2F;library&#x2F;view&#x2F;code-that-fits&#x2F;9780137464302&#x2F;&quot;&gt;fit in your head&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Firefox and Chrome are not truly independent by this definition. Plenty of people who have worked on one browser have also worked on the other. Moreover, as open source projects, both teams can see the other&#x27;s code. &lt;a href=&quot;https:&#x2F;&#x2F;source.chromium.org&#x2F;chromium&#x2F;chromium&#x2F;src&#x2F;+&#x2F;main:&quot;&gt;Chromium source&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;searchfox.org&#x2F;mozilla-central&#x2F;source&quot;&gt;Firefox source&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        <content type="html" xml:base="https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;01&#x2F;a-design-is-a-mold-for-code&#x2F;">&lt;p&gt;I&#x27;m always in search of good metaphors for software design. Good or not, here&#x27;s one:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;A Design is a Mold for Code&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;In manufacturing, a mold is a hollow shape that fills with fluid material which expands into the space and sets to form a casting.&lt;&#x2F;p&gt;
&lt;div style=&quot;text-align: center; width: 60%; margin: 0 auto;&quot;&gt;
  &lt;img src=&quot;.&#x2F;dall-e-muffin-pan.png&quot;&#x2F;&gt;
  &lt;p style=&quot;font-style: italic&quot;&gt;Image: A useful mold. Generated by Dall-E&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Like in manufacturing, code fills the &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Negative_space&quot;&gt;negative space&lt;&#x2F;a&gt; of a software design. Over time, code sets and becomes harder to change.&lt;&#x2F;p&gt;
&lt;p&gt;Imagine two engineering teams who independently &quot;fill&quot; (implement) a design, and the design is the set of standards for a web browser. The two implementations are Chrome and Firefox. The two browsers have independent codebases&lt;sup&gt;[&lt;a href=&quot;https:&#x2F;&#x2F;www.slater.dev&#x2F;2024&#x2F;01&#x2F;a-design-is-a-mold-for-code&#x2F;#notes&quot;&gt;1&lt;&#x2F;a&gt;]&lt;&#x2F;sup&gt; which take vastly different shapes, but as far as web standards are concerned, the two are equal. You could switch from Chrome to Firefox (which I &lt;a href=&quot;https:&#x2F;&#x2F;www.eff.org&#x2F;deeplinks&#x2F;2021&#x2F;12&#x2F;chrome-users-beware-manifest-v3-deceitful-and-threatening&quot;&gt;recommend&lt;&#x2F;a&gt;) and still browse compliant web pages with no discernible change.&lt;&#x2F;p&gt;
&lt;p&gt;Programmers who also like math sometimes call two pieces of code which can be swapped &lt;a href=&quot;https:&#x2F;&#x2F;blog.ploeh.dk&#x2F;2018&#x2F;01&#x2F;08&#x2F;software-design-isomorphisms&#x2F;&quot;&gt;isomorphic&lt;&#x2F;a&gt; with respect to the spec.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s important not to reverse the causality: a design causes the work product, not the converse. A mold causes a casting, and a software design causes code. Nevertheless, to some extent, one can go in reverse, i.e. reconstruct a mold from a casting or infer a design from code.&lt;&#x2F;p&gt;
&lt;p&gt;The reconstructed mold might lose some fidelity, like sharp edges or precise dimensions, but it&#x27;s far worse for code. Looking at code without supplemental information, a new dev can only infer a dim, vague notion of its design. She might even sense the mind(s) behind the design. However, it would be costly if even possible to losslessly reconstruct the design, i.e. to such a fidelity that it could be the basis for an isomorphic implementation.&lt;&#x2F;p&gt;
&lt;p&gt;In pseudocode:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;[Test]
&lt;&#x2F;span&gt;&lt;span&gt;fn Reverse_ProducesIsomorphicDesign()
&lt;&#x2F;span&gt;&lt;span&gt;    let design1 : ...
&lt;&#x2F;span&gt;&lt;span&gt;    let code1 = implement(design1)
&lt;&#x2F;span&gt;&lt;span&gt;    let design2 = reverse(code1)
&lt;&#x2F;span&gt;&lt;span&gt;    let code2 = implement(design2)
&lt;&#x2F;span&gt;&lt;span&gt;    assert(isomorphic(code1, code2)) &#x2F;&#x2F; Fails
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Above: The roundtrip from a design to code back to design is lossy.&lt;&#x2F;p&gt;
&lt;p&gt;There are a few reasons for this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A codebase maybe too large to fit into a dev&#x27;s head. The codebases for Chrome and Firefox are huge. Like the limited context window of ChatGPT, a human has limited working memory and forgets. Though with time and repetition, knowledge transitions to long-term memory.&lt;&#x2F;li&gt;
&lt;li&gt;It&#x27;s hard to infer high-level concepts from low-level details. For example, decompiling assembly back to C.&lt;&#x2F;li&gt;
&lt;li&gt;Design and code have a many-to-many relationship.
&lt;ul&gt;
&lt;li&gt;There can be many implementations that satisfy a design.&lt;&#x2F;li&gt;
&lt;li&gt;There can be many designs that result in the same code.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is a problem for software that outlives its creator(s). The software will languish unless knowledge is &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Organizational_memory&quot;&gt;retained&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bus_factor&quot;&gt;replicated&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There are some things developers can do to keep their software alive:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Write down the design. Use &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Literate_programming&quot;&gt;natural language&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Make the &lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2018&#x2F;01&#x2F;the-design-of-software-is-thing-apart.html&quot;&gt;design apparent in the code&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Use &lt;a href=&quot;https:&#x2F;&#x2F;www.pathsensitive.com&#x2F;2022&#x2F;03&#x2F;abstraction-not-what-you-think-it-is.html&quot;&gt;precise abstractions&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Use &lt;a href=&quot;https:&#x2F;&#x2F;argumatronic.com&#x2F;posts&#x2F;2018-09-02-effective-metaphor.html&quot;&gt;effective&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;onlurking&#x2F;fc5c81d18cfce9ff81bc968a7f342fb1#tacit-knowledge-and-documentation&quot;&gt;metaphors&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Make the code &lt;a href=&quot;https:&#x2F;&#x2F;www.oreilly.com&#x2F;library&#x2F;view&#x2F;code-that-fits&#x2F;9780137464302&#x2F;&quot;&gt;fit in your head&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;notes&quot;&gt;Notes&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Firefox and Chrome are not truly independent by this definition. Plenty of people who have worked on one browser have also worked on the other. Moreover, as open source projects, both teams can see the other&#x27;s code. &lt;a href=&quot;https:&#x2F;&#x2F;source.chromium.org&#x2F;chromium&#x2F;chromium&#x2F;src&#x2F;+&#x2F;main:&quot;&gt;Chromium source&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;searchfox.org&#x2F;mozilla-central&#x2F;source&quot;&gt;Firefox source&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
    </entry>
</feed>
