<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Regis Wilson</title>
    <description>The latest articles on DEV Community by Regis Wilson (@regis-ud).</description>
    <link>https://dev.to/regis-ud</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1841143%2Fbcb619e7-2c57-4923-b965-ad9f45fd85ed.jpg</url>
      <title>DEV Community: Regis Wilson</title>
      <link>https://dev.to/regis-ud</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/regis-ud"/>
    <language>en</language>
    <item>
      <title>Wilson's Laws of Branching</title>
      <dc:creator>Regis Wilson</dc:creator>
      <pubDate>Tue, 03 Nov 2026 18:32:03 +0000</pubDate>
      <link>https://dev.to/regis-ud/wilsons-laws-of-branching-ih6</link>
      <guid>https://dev.to/regis-ud/wilsons-laws-of-branching-ih6</guid>
      <description>&lt;h2&gt;
  
  
  A language almost exactly like yours, except it doesn’t like keeping secrets
&lt;/h2&gt;

&lt;p&gt;Every conditional contains at least two outcomes. Writing down only one does not eliminate the other. It merely delegates its interpretation to the next person.&lt;/p&gt;

&lt;p&gt;Usually that person is you, six months later, during an incident.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wilson’s Law of Branching:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every branch has an alternative. An alternative that is not expressed becomes a secret, and every secret eventually acquires a maintainer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not a mathematical law. Mathematical laws have proofs. This one has deployment history.&lt;/p&gt;

&lt;p&gt;The original &lt;a href="https://dev.to/regis-ud/the-wilson-else-a-linter-for-branches-that-pretend-nothing-happened-41e2"&gt;Wilson Else&lt;/a&gt; proposed making certain missing alternatives visible, particularly inside nested conditionals. But requiring an &lt;code&gt;else&lt;/code&gt; everywhere would confuse acknowledgment with punctuation. Prohibiting &lt;code&gt;else&lt;/code&gt; everywhere would confuse flat code with complete reasoning.&lt;/p&gt;

&lt;p&gt;Perhaps the problem is not whether we wrote &lt;code&gt;else&lt;/code&gt;. Perhaps the problem is whether we told the truth about the decision. The original Wilson Else classified the original problems as "lies" versus "truths" but this essay attempts to soften the message as "secrets" vs. "truths". Secret is still a pejorative word but it is less pejorative than lies.&lt;/p&gt;

&lt;p&gt;To investigate, we will invent a language almost indistinguishable from a normal programming language. Its distinguishing feature is that it gets uncomfortable when you appear to know something you have not told it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. First, declare what kind of decision this is
&lt;/h2&gt;

&lt;p&gt;Ordinary languages let one keyword perform several jobs.&lt;/p&gt;

&lt;p&gt;An &lt;code&gt;if&lt;/code&gt; might mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do this only when appropriate.&lt;/li&gt;
&lt;li&gt;Reject this input and stop.&lt;/li&gt;
&lt;li&gt;Choose between two outcomes.&lt;/li&gt;
&lt;li&gt;Start a priority-ordered sequence of alternatives.&lt;/li&gt;
&lt;li&gt;Conceal a question nobody answered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our language distinguishes three forms:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Construct&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;if&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Perform a conditional action, or terminate through a guard. No &lt;code&gt;else&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;realisedIf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make a binary decision with two nonempty executable branches.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wilsonIf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Perform an action or explicitly acknowledge that nothing happens.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This does not make the program correct. It makes certain kinds of evasiveness syntactically inconvenient.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;realisedIf (condition) {
  positiveAction()
}
// SYNTAX ERROR: unrealised-else
// Provide an alternative, or declare a conditional action.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The author has announced a binary decision and delivered half of it.&lt;/p&gt;

&lt;p&gt;We could automatically insert:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;else {
  // TODO: nothing
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that would manufacture evidence that a decision had been acknowledged when, in fact, a tool had inserted some braces.&lt;/p&gt;

&lt;p&gt;We have promoted an omission into a compliance artifact.&lt;/p&gt;

&lt;p&gt;Instead, the author must choose: supply the alternative, use an ordinary conditional action where permitted, or explicitly declare inaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Nothing is an outcome, not an explanation
&lt;/h2&gt;

&lt;p&gt;Sometimes the correct alternative really is to do nothing.&lt;/p&gt;

&lt;p&gt;That should be expressible without pretending that an empty block is an implementation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;realisedIf (condition) {
  positiveAction()
} else {
  // do nothing
}
// SYNTAX ERROR: empty-realised-else
// Use wilsonIf to declare intentional inaction.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The valid form is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wilsonIf (condition) {
  positiveAction()
} else nothing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The false path is now acknowledged.&lt;/p&gt;

&lt;p&gt;It is not justified. It is not proven safe. But it is no longer indistinguishable from a missing piece.&lt;/p&gt;

&lt;p&gt;There is an unfortunate naming complication: once we explicitly acknowledge an “unrealized else,” it is no longer unrealized.&lt;/p&gt;

&lt;p&gt;The terminology has developed the condition it was intended to diagnose.&lt;/p&gt;

&lt;p&gt;Ordinary &lt;code&gt;if&lt;/code&gt; remains useful for simple conditional actions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (cacheEntryExpired) {
  removeCacheEntry()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A permissive project allows that. A stricter project can require &lt;code&gt;wilsonIf&lt;/code&gt; for nonterminating conditional actions, perhaps only in nested or consequential code.&lt;/p&gt;

&lt;p&gt;That preserves the original article’s useful restraint: apply pressure where the missing alternative matters, not everywhere a keyword can be counted.&lt;/p&gt;

&lt;p&gt;And the compiler’s knowledge remains limited:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;realisedIf (condition) {
  positiveAction()
} else {
  accomplishAbsolutelyNothing()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is an executable statement. The structural requirement is satisfied.&lt;/p&gt;

&lt;p&gt;Whether it accomplishes anything is a separate investigation. The compiler verifies the paperwork, not the wisdom.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Guards do not need an escort
&lt;/h2&gt;

&lt;p&gt;A guard clause states a condition under which execution cannot proceed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (!authorized) {
  throw Unauthorized()
}

performOperation()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The unauthorized path terminates. The authorized path continues.&lt;/p&gt;

&lt;p&gt;Adding an &lt;code&gt;else&lt;/code&gt; would not discover a missing outcome. It would merely place the main operation inside another block.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (!authorized) {
  throw Unauthorized()
} else {
  performOperation()
}
// SYNTAX ERROR: realised-else
// Ordinary if forbids else.
// Prefer the terminating guard.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;else&lt;/code&gt; has been dismissed because its services are no longer required.&lt;/p&gt;

&lt;p&gt;This is the strongest case for an anti-&lt;code&gt;else&lt;/code&gt; policy: not that alternatives are bad, but that a terminating branch already makes the separation visible.&lt;/p&gt;

&lt;p&gt;Our strict acknowledgment policy therefore exempts terminating guards.&lt;/p&gt;

&lt;p&gt;There is no requirement to conduct a small ceremony after every &lt;code&gt;return&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Three alternatives are not a binary decision
&lt;/h2&gt;

&lt;p&gt;Now consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;realisedIf (state == READY) {
  deploy()
} else if (state == PENDING) {
  wait()
} else {
  reject()
}
// SYNTAX ERROR: strict-binary-decision
// Use switch for alternatives over one discriminator.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We declared a binary decision and then installed a third outcome.&lt;/p&gt;

&lt;p&gt;An &lt;code&gt;else if&lt;/code&gt; is an alternative with terms and conditions. We actually submit that we should ban &lt;code&gt;else if&lt;/code&gt; completely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (condition) {
  doSomething()
} else if (someOtherCondition) {
// SYNTAX ERROR: no-else-if
// Use separate blocks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because &lt;code&gt;else if&lt;/code&gt; is identical to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (condition) {
  doSomething()
}
if (otherCondition) {
  doSomethingElse()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For alternatives over one state value, a switch exposes the structure more clearly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;switch (state) {
  case READY:
    deploy()

  case PENDING:
    wait()

  default:
    rejectUnsupportedState(state)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our language does not fall through by default. Selecting one arm executes that arm.&lt;/p&gt;

&lt;p&gt;However, not every chain is secretly a switch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (temperature &amp;gt; limit) {
  shutDown()
} else if (batteryLow &amp;amp;&amp;amp; disconnected) {
  conservePower()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are arbitrary predicates, potentially overlapping, with an ordering that matters.&lt;/p&gt;

&lt;p&gt;Demanding a conventional switch would change the costume without necessarily improving the decision. Our language therefore also offers an ordered predicate &lt;code&gt;case&lt;/code&gt;, whose first matching arm wins.&lt;/p&gt;

&lt;p&gt;The important distinction is between &lt;strong&gt;dispatch over a value&lt;/strong&gt; and &lt;strong&gt;priority among conditions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A rule that cannot distinguish them has discovered a preference, not a principle.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Default is not another word for safe
&lt;/h2&gt;

&lt;p&gt;Requiring a default sounds responsible.&lt;/p&gt;

&lt;p&gt;Every possibility gets handled. Nobody falls through a crack.&lt;/p&gt;

&lt;p&gt;Unfortunately, “handled” can mean this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;switch (state) {
  case READY:
    deploy()

  default:
    wait()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pending, failed, deleted, corrupt, and any state introduced after the author leaves the company will all wait.&lt;/p&gt;

&lt;p&gt;The default has excellent coverage and questionable judgment.&lt;/p&gt;

&lt;p&gt;Our rule is therefore:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A switch must be exhaustive over its declared domain, or explicitly handle unmatched input.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For a closed set of states, the compiler can require every variant. Adding a new variant then produces an error at decisions that need reconsideration.&lt;/p&gt;

&lt;p&gt;For external values, explicit rejection or fallback may be necessary. A type declaration is not a border checkpoint; unexpected runtime values can still arrive through poorly defended boundaries.&lt;/p&gt;

&lt;p&gt;The compiler should know whether the author is claiming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;These are all the possible states.&lt;/li&gt;
&lt;li&gt;Other states are valid and share this behavior.&lt;/li&gt;
&lt;li&gt;Other states are invalid and must be rejected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are different claims.&lt;/p&gt;

&lt;p&gt;A default that quietly accepts everything may be the largest secret in the program.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Fallthrough must introduce itself
&lt;/h2&gt;

&lt;p&gt;Fallthrough lets a case execute not because it matched, but because it lives downstairs.&lt;/p&gt;

&lt;p&gt;There are legitimate uses. Our language permits them, but requires an explicit declaration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;switch (mode) {
  case FULL:
    runExtendedChecks()
    fallthrough

  case BASIC:
    runBasicChecks()
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without &lt;code&gt;fallthrough&lt;/code&gt;, each arm stops at its boundary.&lt;/p&gt;

&lt;p&gt;Grouped labels are different:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;case PENDING, QUEUED:
  wait()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two labels share one body. No body spills into another.&lt;/p&gt;

&lt;p&gt;The benefit of explicit fallthrough is not that it prevents every mistake. It makes physical case ordering an acknowledged dependency.&lt;/p&gt;

&lt;p&gt;Implicit fallthrough makes that dependency a surprise.&lt;/p&gt;

&lt;p&gt;Actual fallthrough into or out of &lt;code&gt;default&lt;/code&gt; is prohibited in this language. Default already has a difficult job: explaining what happens when selection finds no match. It should not also serve as a corridor for matched cases.&lt;/p&gt;

&lt;p&gt;Shared follow-up work belongs after the switch if it is unconditional, or in an explicitly called helper if it is not.&lt;/p&gt;

&lt;p&gt;Default is not the communal kitchen.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Logging is not a branching problem
&lt;/h2&gt;

&lt;p&gt;There is one conditional our language rejects for a different reason:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (debug) {
  emitLogs()
}
// SYNTAX ERROR: conditional-logging
// Use log.level(...) instead.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The answer is not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wilsonIf (debug) {
  emitLogs()
} else nothing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have clarified the wrong decision.&lt;/p&gt;

&lt;p&gt;Logging policy belongs to the logging system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;log.level(DEBUG, "Placement candidate evaluated", candidate)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;log.level(...)&lt;/code&gt; is our fictional logging API: it submits an event at a specified severity. Configuration determines whether that event is emitted.&lt;/p&gt;

&lt;p&gt;The application reports what happened. The logger decides which reports are currently wanted.&lt;/p&gt;

&lt;p&gt;Otherwise, logging policy becomes distributed across dozens of booleans and branches. During an incident, we discover that the evidence we need was conditional on a flag whose location was also a secret.&lt;/p&gt;

&lt;p&gt;Expensive diagnostic construction may still need a lazy logging API or an enabled-level check. That is a resource decision, not a reason to scatter ordinary log filtering throughout the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. What the language knows—and what it does not
&lt;/h2&gt;

&lt;p&gt;Wilson’s Law does not require every alternative to contain work.&lt;/p&gt;

&lt;p&gt;It requires the program to distinguish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conditional action.&lt;/li&gt;
&lt;li&gt;Terminating guard.&lt;/li&gt;
&lt;li&gt;Binary choice.&lt;/li&gt;
&lt;li&gt;Intentional inaction.&lt;/li&gt;
&lt;li&gt;Multiway dispatch.&lt;/li&gt;
&lt;li&gt;Ordered predicates.&lt;/li&gt;
&lt;li&gt;Unexpected input.&lt;/li&gt;
&lt;li&gt;Deliberate fallthrough.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A normal language can already express these. Our fictional language makes some of the distinctions compulsory.&lt;/p&gt;

&lt;p&gt;A linter could approximate much of this without inventing new keywords: reject redundant &lt;code&gt;else&lt;/code&gt;, check exhaustive switches, require explicit fallthrough, flag selected empty branches, and keep ordinary logging policy out of application conditionals.&lt;/p&gt;

&lt;p&gt;But neither a compiler nor a linter can establish that every declared decision is a good one.&lt;/p&gt;

&lt;p&gt;We can remove every &lt;code&gt;else&lt;/code&gt; from a codebase. The conditions will continue to be false.&lt;/p&gt;

&lt;p&gt;We can add every missing &lt;code&gt;else&lt;/code&gt;. The alternatives may remain unconsidered.&lt;/p&gt;

&lt;p&gt;The objective is not more branches or fewer branches.&lt;/p&gt;

&lt;p&gt;It is fewer secrets.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The alternative exists whether we write it down or not. The paperwork is optional; the consequences are not.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Appendix
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Disclaimers
&lt;/h3&gt;

&lt;p&gt;This post was created with the help of AI. The author takes full responsibility for the content.&lt;/p&gt;

&lt;h3&gt;
  
  
  Credits
&lt;/h3&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@\_zachreiner\_?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Zach Reiner&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/close-up-photography-of-driftwood-near-sea-H7LxvEmVZnE?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>softwaredevelopment</category>
      <category>testing</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Zeroeth Law of Engineering</title>
      <dc:creator>Regis Wilson</dc:creator>
      <pubDate>Mon, 26 Oct 2026 21:53:35 +0000</pubDate>
      <link>https://dev.to/regis-ud/the-zeroeth-law-of-engineering-ckm</link>
      <guid>https://dev.to/regis-ud/the-zeroeth-law-of-engineering-ckm</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Before architecture, implementation, and deployment comes a question that can ruin an otherwise excellent planning meeting: does this artifact need to exist at all? Everybody has already agreed on the repository name. It feels unkind to bring reality into it now.&lt;/p&gt;

&lt;h2&gt;
  
  
  An Apple Is a Ridiculous Amount of Work
&lt;/h2&gt;

&lt;p&gt;An apple is a deceptively small achievement. You walk into the kitchen, pick one up, wash it if you are feeling responsible, and eat the outer two-thirds. Perhaps you navigate around a bruise. Perhaps you leave a heroic centimetre of perfectly good apple attached to the core because getting closer would require an awkward rotation and a level of commitment you did not bring to lunch. Then you throw the rest away, having successfully consumed the part for which you believe the entire arrangement exists.&lt;/p&gt;

&lt;p&gt;To produce those six bites, the world first had to grow a tree. Not an apple dispenser with a convenient trunk attached, but roots, bark, branches, leaves, blossoms, and a reproductive strategy involving third parties with wings. The tree requires water, soil, microbes, suitable weather, and years of sunlight. The pollinators require other plants and somewhere to live. Somewhere downstream are farmers, refrigeration, trucks, grocery stores, and a teenager putting the Honeycrisps in the wrong bin again. The apple costs three dollars because nobody has itemized the universe.&lt;/p&gt;

&lt;p&gt;Then your body extracts a relatively small amount of useful energy and material through a digestive system you have been operating your entire life without once scheduling a dependency upgrade. The energy eventually becomes motion, thought, bodily maintenance, and heat. It does not remain in an internal apple battery. Eating one at age seven does not settle the matter through retirement, although a subscription service would certainly advertise the possibility.&lt;/p&gt;

&lt;p&gt;At first glance, this looks like staggering waste. We grew an orchard, involved the bees, transported the fruit, and maintained an entire organism so that I could stand over the kitchen sink and decide the remaining bit was too difficult. But the accounting is suspiciously centered on me, which is often where suspicious accounting begins.&lt;/p&gt;

&lt;p&gt;The seeds are not manufacturing defects. From the tree's perspective, they may be the principal deliverable, while the flesh is a marketing expense incurred to persuade an animal to distribute them. The leaves are not unnecessary because I decline to eat them. The roots are not overhead that an ambitious tree startup can eliminate in version two. What looks disposable from one position may be essential from another; the tree has not agreed that my snack is its corporate mission.&lt;/p&gt;

&lt;p&gt;The apple is the visible result at the tip of an enormous &lt;strong&gt;dependency cone&lt;/strong&gt;. This does not establish that apples are a mistake. It establishes that looking at the fruit is a poor way to estimate what makes fruit possible, which brings us, regrettably, to software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every Tool Requires a World
&lt;/h2&gt;

&lt;p&gt;A small software tool looks cheap. One repository, six source files, a build configuration, and a README containing an example that worked on the author's laptop on the afternoon it was written. The implementation took two days. Someone posts a rocket emoji, whose exhaust does not appear in the estimate.&lt;/p&gt;

&lt;p&gt;Unfortunately, source code is only the trunk. The tool needs tests, releases, packages, documentation, compatibility decisions, and somebody who remembers why it behaves differently on Tuesdays. Depending on what it does, it may also need authentication, authorization, networking, monitoring, deployment automation, and a Kubernetes cluster. We began with a command that rearranges a string and have arrived at a staffing question.&lt;/p&gt;

&lt;p&gt;Users learn it. Applications integrate it. Pipelines call it. Other systems generate its inputs and interpret its peculiar outputs. People write wrappers because the interface is almost right, then wrappers around those wrappers because the first wrappers belong to another department and changing them requires a meeting. The repository remains admirably small. The meetings have not been committed to it.&lt;/p&gt;

&lt;p&gt;A tree offers an inconvenient illustration of how this happens. If a large tree weighs tonnes and grows out of the ground, why is there not a tree-sized hole underneath it? Where did the material come from? I admit this question troubled me longer than it should have. The ground appeared to have supplied a tree while remaining entirely ground, which would be an impressive procurement arrangement.&lt;/p&gt;

&lt;p&gt;Most of a tree's dry mass is built from material acquired through the air, especially carbon from carbon dioxide, rather than bulk soil hauled upward through the roots. The tree gains substance from something surrounding it that we usually do not notice. Water makes up much of its living weight as well; the point is not that soil contributes nothing, but that looking for a missing tree in the dirt misunderstands the transaction.&lt;/p&gt;

&lt;p&gt;Tools acquire mass from their surroundings too. A flag becomes part of a deployment procedure. An output column enters a finance report. A bug becomes something every consumer compensates for, after which correcting it is called a breaking change. Somebody learns that retries must occur exactly three seconds apart and teaches the next person, without either of them finding this requirement in the code. The implementation is visible and countable. The dependency on it has become atmospheric.&lt;/p&gt;

&lt;p&gt;Creation starts at the center and moves outward, one enthusiastic adopter at a time. Removal starts at the edges, except nobody knows where the edges are. You think you are deleting a program. Six months later, a report fails because a cron job still calls version 1.3 from a server everyone believed had been decommissioned in 2019. The server is named &lt;code&gt;temp-final-2&lt;/code&gt;, which is not a name so much as a record of negotiations lost.&lt;/p&gt;

&lt;p&gt;The useful accounting therefore includes creation, integration, operation, adaptation, and eventual extraction. These are categories, not independent quantities in a reassuring equation: changing the interface can increase integration cost, refusing to change it can increase operating cost, and making either choice without knowing the consumers can increase everyone's blood pressure. The original implementation estimate describes the part whose author was present to estimate it.&lt;/p&gt;

&lt;p&gt;Creation is paid by the team making the decision. Integration is paid by adopters. Operations are paid by whoever gets paged. Extraction is paid years later by people who were not in the meeting and would like to know why a temporary command now participates in financial reporting. The ticket has been archived, the documentation returns &lt;code&gt;404&lt;/code&gt;, and the original team has achieved the only reliable form of decoupling: employment elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Construction Has Excellent Visibility
&lt;/h2&gt;

&lt;p&gt;Most engineering advice begins after the decision to create has already been made. Here is how to build a service, select a framework, structure a repository, and make the result observable, secure, reusable, extensible, and deployable across seventeen regions. We receive extensive guidance on maintaining the thing and remarkably little pressure to establish why there should be a thing to maintain.&lt;/p&gt;

&lt;p&gt;Even advice against complexity tends to accept construction as the default. “Keep it simple” means build a simpler artifact. “You aren't gonna need it” removes optional features from the artifact we have already authorized. “Do not repeat yourself” sometimes replaces three repeated lines with forty-seven lines of abstraction, making the repetition disappear into a place where nobody can comfortably inspect it. “Reuse before build” may import someone else's dependency cone, release schedule, design assumptions, and newly creative interpretation of licensing.&lt;/p&gt;

&lt;p&gt;None of these principles is useless, and several can reject the whole proposed artifact when taken seriously. We have a remarkable talent for applying them only after approving the repository. Under that interpretation, you can follow all of them faithfully and produce an exemplary system whose main accomplishment is giving six people something else to remember.&lt;/p&gt;

&lt;p&gt;Artifacts are easy to recognize as work. We can count commits, pull requests, repositories, services, and launches. When morale deteriorates sufficiently, we can count lines. A requirement eliminated by one awkward question leaves much less evidence. There is no service to demo, no migration to announce, and no incident dashboard showing the failure mode that never existed. The engineer who prevented the project appears to have spent the week talking.&lt;/p&gt;

&lt;p&gt;This is how construction passes for engineering: it leaves something we can point at. Restraint leaves a smaller invoice, a quieter pager, and an empty space in the architecture diagram that somebody will eventually propose filling. The savings are distributed. The absence of a launch is immediately visible to the person assembling the quarterly presentation.&lt;/p&gt;

&lt;p&gt;The distinction also matters to the &lt;a href="https://dev.to/regis-ud/the-neo-fermiwilson-ai-paradox-3oln"&gt;Neo-Fermi/Wilson AI paradox&lt;/a&gt;. If implementation output is abundant, we still need to ask where that abundance becomes a worthwhile outcome. More software is evidence that software was produced. Whether it improved the situation remains a separate investigation, usually scheduled after the celebration.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Question Before the Ticket
&lt;/h2&gt;

&lt;p&gt;The ordinary sequence is to build something that works, improve it, make it efficient, and remove whatever turns out to be unnecessary if there is still time. There is never still time. By then, applications depend on it, dashboards measure it, and somebody has colored it “strategic” in the roadmap. The unnecessary part now has stakeholders, which is how a technical fact acquires legal representation.&lt;/p&gt;

&lt;p&gt;The sequence needs to begin earlier. Prevent an unnecessary obligation before taking it on; examine obsolete obligations before preserving them; build what survives the inquiry and make it work correctly. That may be a demonstrated necessity or a bounded experiment whose potential benefit warrants its cost, not merely another object approved because nobody could prove it useless. This is an order of inquiry, not an instruction to perform speculative deletions while everyone waits for a payment to settle. An existing component may need to remain during migration, and a necessary new one may need to arrive before the old one can leave. Reality is annoyingly unwilling to execute a manifesto in numbered order.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Zeroth Law of Engineering is therefore: &lt;strong&gt;do not build what need not exist&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It comes before architecture, implementation, testing, and deployment because those activities cannot retroactively justify their own subject. A perfectly functioning unnecessary system may be harder to remove than a broken one. People will trust it, adopt it, and eventually describe its continued existence as a requirement.&lt;/p&gt;

&lt;p&gt;A request usually arrives as a proposed object. “We need a dashboard” sounds settled until you discover that someone needs to know whether a process completed. “We need a database” may mean two executions must share one small piece of state. “We need a microservice” may mean nobody wants responsibility for a function already in the application. The named artifact conceals the actual constraint while giving the meeting something to estimate.&lt;/p&gt;

&lt;p&gt;Swimming upstream means asking what happened, what outcome is required, and what prevents the existing arrangement from producing it. Sometimes the capability already exists. Sometimes a rule can change. Sometimes the report nobody reads can stop being produced, taking its proposed dashboard with it. Occasionally you still need the database, and now you have the rare pleasure of knowing what it is for before selecting one.&lt;/p&gt;

&lt;p&gt;This is not a request to optimize a needless process until it becomes too impressive to cancel. In &lt;a href="https://dev.to/regis-ud/a-journey-of-mind-free-from-fan-noise-4dgk"&gt;the fan-noise essay&lt;/a&gt;, reducing work and questioning its continuation are different moves. An engineer can spend six weeks making a job cheaper while carefully avoiding the person who could confirm that its final consumer stopped using it last February. The job becomes efficient. February remains unconsulted.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bamboo Has Not Read the Label
&lt;/h2&gt;

&lt;p&gt;I own a PVC pipe cutter that I use to cut thick bamboo in my backyard. I do not believe I have ever cut PVC with it. The cutter seems untroubled by this departure from its stated career path, which is more than can be said for many people who discover their degree is not a physical law.&lt;/p&gt;

&lt;p&gt;“PVC pipe cutter” is a market category. The relevant mechanism is a ratcheted shearing action suited to certain cylindrical materials. Bamboo can fit that mechanical contract without fitting the label. Searching for a bamboo-specific artifact would have been understandable and might have produced a very attractive purchase, but the bamboo would not have been cut any more convincingly.&lt;/p&gt;

&lt;p&gt;The famous Knuth–McIlroy word-frequency example makes a similar distinction. Knuth wrote a substantial program as a demonstration of literate programming. McIlroy showed how existing Unix commands could compose the required transformations: split text into words, normalize, sort, count, rank, and select. One approach demonstrated how a program could be constructed and explained; the other demonstrated how the task could be expressed using capabilities already present.&lt;/p&gt;

&lt;p&gt;They were serving different purposes. A teaching artifact does not become unnecessary merely because there is a shorter way to produce its output. If the requirement is to demonstrate literate programming, the program is doing work the pipeline is not. If the requirement is to count words, however, the pipeline deserves examination before we commission another executable and someone inherits its release process.&lt;/p&gt;

&lt;p&gt;The useful alternative to bespoke software is not automatically one enormous tool with nine hundred flags. Nor is it a sixty-stage shell pipeline relying on accidental whitespace, locale-sensitive sorting, and a regular expression whose author disappeared from a forum in 2008. That is a custom program written sideways, with its dependency declarations distributed across your hopes.&lt;/p&gt;

&lt;p&gt;What matters is whether the essential transformations already exist behind contracts stable enough for the job. Composition still needs validation, ownership, and an explanation of what happens when a stage fails. The absence of a new repository does not mean the absence of a new obligation. A pipe cutter can cut bamboo; it cannot make judgment unnecessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Cook, Claude
&lt;/h2&gt;

&lt;p&gt;A missing comma can move Claude from the person being addressed to the object of the sentence, which is a troubling start to a production specification. I mean “Let's cook, Claude,” although even that leaves open whether we are preparing dinner, generating a deployment system, or producing another metaphor about toast. Natural language is impressively flexible until flexibility enters the acceptance criteria.&lt;/p&gt;

&lt;p&gt;Generative AI makes the Zeroth Law more important because it makes creation easier without settling necessity. Ask for a helper and you may receive a helper, an interface, a configuration layer, a test suite, and a cheerful README introducing the project to a world that had managed quite comfortably without it. The model is responding to the request. The request has already decided what success should look like.&lt;/p&gt;

&lt;p&gt;If the first attempt fails, we ask it to continue. A local problem becomes a framework because frameworks offer more places to put the next correction. Soon there are agents coordinating agents, a custom message broker, and eleven pans on the stove. We originally wanted toast, but toast has become the reference implementation of our breakfast platform.&lt;/p&gt;

&lt;p&gt;The economic change is real. A developer who expected an abstraction to take two weeks might spend an hour searching for an existing capability. When the abstraction can be generated in thirty seconds, searching feels like the expensive option. This comparison is persuasive only if the story ends when generation ends. Unfortunately, the compiler has no authority to close the account.&lt;/p&gt;

&lt;p&gt;Generated code still needs to be understood, reviewed, secured, tested, operated, upgraded, and eventually removed. It can produce the visible trunk quickly. Consumers, operational assumptions, compatibility demands, and failure modes do not become free because the first draft arrived before the coffee. The pull request contains four thousand lines, nine interfaces, and documentation explaining why all nine interfaces are necessary. Two other models agree. We have achieved independent agreement about an assumption nobody asked them to challenge.&lt;/p&gt;

&lt;p&gt;The useful prompt begins before implementation. Ask the model to recover the outcome behind the requested artifact, inspect the repository for existing capability, compare safe compositions, and consider whether obsolete behavior can be removed. Then ask for the smallest change that survives that inquiry, including its consumers and how it could later be replaced. This is less exciting than watching a service materialize, but excitement has never been a reliable compatibility policy.&lt;/p&gt;

&lt;p&gt;AI can assist with search, comparison, impact analysis, and subtraction. It can also get those wrong, which is why “the model found no consumers” is a finding to investigate rather than permission to delete production state. The objective is not to replace construction with confidently automated non-construction. It is to stop rewarding output before determining what output would help.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practice Without Starting a New Practice
&lt;/h2&gt;

&lt;p&gt;“Build nothing” cannot mean refusing useful work while reciting philosophy in sprint planning. Sometimes the existing tool is dangerous, inaccessible, expensive, or incapable of meeting the requirement. Sometimes a new capability creates possibilities worth exploring before there is a mature business case. The law asks creation to survive examination; it does not require the future to submit receipts before arriving.&lt;/p&gt;

&lt;p&gt;Begin by describing the outcome without naming the proposed apparatus. A person needs to know within five minutes when an event fails. That is a constraint. A notification service is one possible response, not yet a fact about the universe. An existing alert might satisfy it. Changing the process might remove the failure. Or the service might genuinely be needed, in which case we can discuss delivery guarantees instead of spending the first week naming notification abstractions.&lt;/p&gt;

&lt;p&gt;Adoption must become discoverable. If nobody can find the consumers, nobody can confidently estimate the thing's mass or remove it safely. That may require usage records, explicit dependency declarations, or simply ownership that survives a team reorganization. These mechanisms also cost something. An inventory platform for three scripts can reproduce the problem it was commissioned to solve, now with a nicer search box.&lt;/p&gt;

&lt;p&gt;Finding those consumers lets us ask what they actually depend on. Ideally, it is behavior we intend to preserve, not the particular order of an accidental output or the fact that a timeout currently returns success. Once enough consumers adapt to a bug, the bug receives tenure. Correcting it still matters, but now correction includes migration rather than a triumphant one-line patch and an afternoon of surprise.&lt;/p&gt;

&lt;p&gt;That migration problem is why the exit belongs in the entrance discussion. Who will know when the last consumer has left? Can implementations coexist during replacement? Who owns extraction after the original team moves on? A tool without answers becomes a future Chesterton's fence, surrounded by people who suspect it is unnecessary but have discovered that suspicion is not a rollback plan.&lt;/p&gt;

&lt;p&gt;For an experiment, the extraction problem can start before anyone admits there is a product. A proof of concept is scaffolding, not a constitutional amendment, and it needs a point at which somebody decides whether it continues. Its expiry should trigger review, not an unattended deletion while consumers are using it. If it succeeds, keep the parts the evidence supports. If it fails, remove it before a copied example becomes somebody else's reason that removal is impossible.&lt;/p&gt;

&lt;p&gt;Subtraction also needs to count as work. An architecture review can ask which obligations disappear, and a planning discussion can recognize an avoided migration as an outcome rather than a missing deliverable. Otherwise the rational career move is to build the thing, become its indispensable expert, and later receive recognition for managing the complexity one introduced. This need not involve bad intentions. The incentives are capable of arranging it without assistance.&lt;/p&gt;

&lt;p&gt;Most importantly, distinguish support from waste. Tests, documentation, observability, and migration paths are not leaves we can remove because customers only eat the fruit. If the tool must exist, responsible support may be part of its irreducible cost. The Zeroth Law is not a discount code for shipping unsupported software. It is a reason to consider that cost before promising the object at the tip of the cone.&lt;/p&gt;

&lt;p&gt;The harder question is whether we can allow a needless process and its corresponding demand to cease. Engineers are good at improving execution, preserving compatibility, and retaining just in case. Ceasing asks us to relinquish something we know how to manage, perhaps something we built ourselves. It may also ask us to admit that a very successful quarter produced a very maintainable obligation.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, Build Nothing
&lt;/h2&gt;

&lt;p&gt;Tools are made from tools, just as ideas are made from ideas. Every artifact inherits languages, protocols, libraries, infrastructure, and accumulated knowledge. Once adopted, it changes what later systems can assume. A convenient output becomes an input somewhere else; an experiment becomes a precedent; a workaround becomes the example used to train the next engineer. Every tool is both fruit and seed, including the ones we were quite sure would remain internal.&lt;/p&gt;

&lt;p&gt;This is why creation is not local and removal is not deletion. Deleting the repository can leave its historical data, contracts, procedures, and expectations alive elsewhere. The thing may be gone while everything still holds its shape. We have removed the apple dispenser and retained an organization that arrives every morning carrying a bowl.&lt;/p&gt;

&lt;p&gt;Engineering begins by looking beyond the visible artifact to the conditions it requires and the conditions it will create. Build when the actual constraint warrants it. Make the result correct, support it honestly, and preserve a practical way for it to stop existing. But before turning a request into another part of the world, leave room for the possibility that no new part is required. An empty repository is not necessarily an unfinished project; sometimes the question was answered before it needed one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Postscript: The Tree Makes an Objection
&lt;/h2&gt;

&lt;p&gt;I confess I have rarely encountered a proper postscript in an actual letter outside literature, so this is quite exciting. It is also necessary because the tree remains standing after the argument, still producing apples with an apparent disregard for my excellent concerns about its architecture.&lt;/p&gt;

&lt;p&gt;The tree pays much of its growth cost before producing fruit repeatedly. It can shelter animals, feed pollinators, stabilize soil, and create more trees. Some of what appeared to be overhead supports several outcomes at once. The dependency cone is large, but the returns do not stop at my six bites over the kitchen sink. I was not wrong to notice the cost. I was wrong if I thought noticing it completed the evaluation.&lt;/p&gt;

&lt;p&gt;The tree would have had difficulty passing a conventional architecture review before its first apple. Years of growth, underground dependencies, seasonal availability, third-party pollination, and a deliverable whose principal consumer discards the reproductive payload: please simplify and resubmit. A procurement team might recommend buying apples instead, thereby moving the tree outside the diagram and announcing that the dependency had been eliminated.&lt;/p&gt;

&lt;p&gt;This is the limit of the law. A dependency cone reveals the scale and character of an investment; it does not prove the investment should never be made. Some artifacts are valuable because they enable outcomes nobody could fully specify beforehand. Their uncertainty should be acknowledged, their continuation examined, and their support funded, rather than treated as either permission for everything or an argument for nothing.&lt;/p&gt;

&lt;p&gt;Do not build what need not exist, but do not confuse “I cannot yet justify this” with “this need not exist.” Aggressive restraint can prevent useful compounding just as enthusiastic construction can produce permanent housekeeping. The question is not how to avoid ever being wrong. It is how to make a decision whose benefits, obligations, and grounds for reconsideration remain visible after the rocket emoji has scrolled away.&lt;/p&gt;

&lt;p&gt;The tree can stay. I am less certain about the dashboard that reports whether the tree is still there, but apparently three teams consume it now.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This essay was written and revised with the help of AI. No new service was required, although a Markdown file did survive examination.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>devops</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A Journey of Mind Free From Fan Noise</title>
      <dc:creator>Regis Wilson</dc:creator>
      <pubDate>Tue, 20 Oct 2026 17:36:43 +0000</pubDate>
      <link>https://dev.to/regis-ud/a-journey-of-mind-free-from-fan-noise-4dgk</link>
      <guid>https://dev.to/regis-ud/a-journey-of-mind-free-from-fan-noise-4dgk</guid>
      <description>&lt;h1&gt;
  
  
  From C to Kafka to Tech Debt: A Journey of Mind Freed From Fan Noise
&lt;/h1&gt;

&lt;p&gt;Let us begin with four integers, because all serious investigations into enlightenment should begin with a data structure that can be understood before the coffee has finished compiling the engineer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is an array. It contains four values in an order. The order appears reassuringly objective because C has assigned each value an address and will become extremely unpleasant if we misunderstand where those addresses end.&lt;/p&gt;

&lt;p&gt;Nothing is moving yet. Ten is not travelling toward twenty. Forty is not waiting at the end with a small retirement cake. The array has no opinion about which value should be read first, whether every value deserves equal attention, or whether reading them achieves anything.&lt;/p&gt;

&lt;p&gt;To obtain movement, we add an index.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the array appears to have a beginning, a direction, and an end. This is already a small fraud.&lt;/p&gt;

&lt;p&gt;Ten does not know it is first. Forty does not know it is last. The values have not acquired a direction merely because &lt;code&gt;i&lt;/code&gt; is increasing. The code has selected an initial position, defined a successor, and declared that four is where the police become involved.&lt;/p&gt;

&lt;p&gt;We could reverse the traversal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same array now tells the opposite story with complete confidence. Forty is first. Ten is last. Nobody moved the data. We changed the rule by which the data became present.&lt;/p&gt;

&lt;p&gt;This is not yet enlightenment, but it is at least enough to make code review uncomfortable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Array Puts on a Ring
&lt;/h2&gt;

&lt;p&gt;Suppose we remove the exit condition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We now have something resembling a ring buffer. It is worth asking where the ring came from, because the memory did not curl into a circle. Address zero has not physically bent around the motherboard and attached itself to address three. If that has happened, turn off the machine and contact the manufacturer.&lt;/p&gt;

&lt;p&gt;A famous entertainer exhorted us to “Shoulda put a ring on it” so we did:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The modulo operator interprets the boundary as a return. Three becomes zero, not because zero is naturally after three, but because we have installed a policy under which reaching the end means beginning again.&lt;/p&gt;

&lt;p&gt;The array and ring buffer are therefore not two entirely different substances. The array becomes a ring through recurrent indexing. The ring becomes an array when we stop recurring. What looks like topology is partly behavior. What looks like a property of the storage is partly a habit of the reader.&lt;/p&gt;

&lt;p&gt;This gives the machine a perfectly adequate answer to one question:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is who I am now.&lt;/p&gt;

&lt;p&gt;The answer is temporary. The same index may hold another value after a write. The same value may occur at another index. Another thread may alter the cell between our inspection and our use, which is how concurrency reminds philosophy that it has not acquired a lock.&lt;/p&gt;

&lt;p&gt;“Current” belongs neither to the value nor the address. It arises from value, address, index, execution, and time. Remove any of these and the current value becomes a different value, an inaccessible value, or a lengthy incident report.&lt;/p&gt;

&lt;p&gt;The index can tell us who we are now. It cannot tell us where the traversal originally began. After ten thousand rotations, zero is not more original than three. It merely has better public relations.&lt;/p&gt;

&lt;p&gt;Nor can the index tell us when to stop. Modulo is excellent at continuation and has no qualifications in purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Missing Condition
&lt;/h2&gt;

&lt;p&gt;A reviewer encounters the loop.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reviewer says, “Someone forgot the exit condition.”&lt;/p&gt;

&lt;p&gt;This may be correct. Reviewers occasionally are. The difficulty is that nothing inside &lt;code&gt;true&lt;/code&gt; tells us what the missing condition was.&lt;/p&gt;

&lt;p&gt;Perhaps the author intended:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;cancelled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perhaps they intended:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temperature&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;warranty_voiding_threshold&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perhaps this is firmware in a medical device and stopping would be substantially worse than continuing. Perhaps it runs in a Kubernetes pod whose official exit strategy is to be shot by a control plane that has recently lost quorum. Perhaps the author wrote exactly what they meant and has since moved to a management role where consequences arrive as charts.&lt;/p&gt;

&lt;p&gt;Without a specification, comment, issue, commit history, or &lt;code&gt;git blame&lt;/code&gt;, the intended negation of &lt;code&gt;true&lt;/code&gt; is unavailable. We can invent an ending, but invention should not be confused with recovery.&lt;/p&gt;

&lt;p&gt;At the present moment, the loop is doing exactly what it says. The processor does not experience eternity. It evaluates &lt;code&gt;true&lt;/code&gt;, executes the body, advances the index, and returns. Infinity never enters a register. The machine performs only the next instruction and, if conditions permit, the one after that.&lt;/p&gt;

&lt;p&gt;This is why &lt;code&gt;while (true)&lt;/code&gt; is a better image of samsara than the usual cartoon of a wheel. Samsara is not an infinite quantity stored somewhere beyond the horizon. It is continuation renewed in the present. The loop returns because the conditions for returning have arisen again.&lt;/p&gt;

&lt;p&gt;The code is locally faultless and globally suspicious, which is also a reasonable description of civilization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kafka Discovers Rebirth
&lt;/h2&gt;

&lt;p&gt;Four integers are not enough for modern enterprise suffering. We need distributed systems.&lt;/p&gt;

&lt;p&gt;The ring remains useful, but returning to the origin is precisely incorrect. In a true memory ring buffer, the index wraps and storage slots are reused. The loop is present. Kafka instead appends records at increasing offsets, and disk storage is sufficiently cheap that we keep writing “forever,” a duration defined in enterprise architecture as beyond the current budgeting period.&lt;/p&gt;

&lt;p&gt;A circle of sufficiently large circumference is locally indistinguishable from a straight line. Especially when the person drawing the architecture diagram has cropped out retention.&lt;/p&gt;

&lt;p&gt;Imagine a very large stone block advancing over wooden rollers. Workers retrieve the logs emerging behind it and carry them to the front before the block discovers that infrastructure is finite. The logs return. The stone does not. Returning the stone to its origin would not be progress. It would be a retrospective with fatalities.&lt;/p&gt;

&lt;p&gt;Tank tracks make the same distinction without requiring everyone to carry timber. The tread circulates; the vehicle advances. Repetition underneath does not mean the journey has begun again.&lt;/p&gt;

&lt;p&gt;Kafka’s storage lifecycle offers a less muscular version. Producers append new records. Retention removes old segments, allowing their space to be reused. The offsets do not wrap back to zero. We recycle the ground beneath the journey while continuing to number the distance, which is how bounded infrastructure acquires an unbounded job description.&lt;/p&gt;

&lt;p&gt;We partition the log, replicate it across machines, and assign consumers positions within it. The same uncertainty can now occur on several nodes at once.&lt;/p&gt;

&lt;p&gt;A consumer group divides partitions among its members and stores committed offsets so that everyone can maintain a professionally defensible opinion about what has already happened. Soon it develops attachment.&lt;/p&gt;

&lt;p&gt;It begins to believe that this is &lt;em&gt;its&lt;/em&gt; partition. It regards lag as a moral judgment. It watches the high-water mark retreat at exactly the rate it advances and concludes that peace will arrive after the next autoscaling event.&lt;/p&gt;

&lt;p&gt;This is how the consumer enters samsara. The problem is not that it consumes. The problem is that it expects the stream to certify its completeness.&lt;/p&gt;

&lt;p&gt;A live stream does not provide this service. Catching up is only the temporary coincidence of the committed offset with the high-water mark. The next producer write abolishes the achievement. A dashboard celebrates green for nine seconds and then returns to amber, which is the native color of conditioned existence.&lt;/p&gt;

&lt;p&gt;The attached consumer curses the ring because it believes the ring has broken a promise. It says, “I have processed ten million records. Why are there more records?”&lt;/p&gt;

&lt;p&gt;The ring replies that it made no promise. In fact, the ring does not reply. A timeout occurs and the consumer is removed from the group.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the Bodhisattva Does Not Curse the Ring
&lt;/h2&gt;

&lt;p&gt;The bodhisattva joins the same consumer group and receives an assignment.&lt;/p&gt;

&lt;p&gt;They understand that the assignment is real enough to require work but not real enough to become a self. The partition is assigned, not possessed. The offset is useful, not sacred. Lag is a measurement of a relationship between production and consumption, not evidence that the universe has found them personally inadequate.&lt;/p&gt;

&lt;p&gt;Most importantly, the bodhisattva does not curse the ring for being a ring.&lt;/p&gt;

&lt;p&gt;Cursing the ring would be like cursing water for remaining wet after an extremely persuasive architecture meeting. The ring returns because return is the behavior assembled from its conditions. Producers produce, consumers consume, offsets advance, retention removes old records, and somebody opens a Jira ticket asking whether retention can be infinite without increasing cost.&lt;/p&gt;

&lt;p&gt;The bodhisattva knows there is no final record waiting to award them completion. This does not make the present record worthless. It makes the present record available without the additional burden of pretending it is a step toward personal salvation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;assigned&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;records&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;consumer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;poll&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;records&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;respond_skillfully&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;consumer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The commit is not a trophy. It is a kindness to the next consumer.&lt;/p&gt;

&lt;p&gt;When a rebalance occurs, the bodhisattva releases the revoked partition without composing a grievance about ownership. When a new partition arrives, they accept it without announcing a strategic acquisition. They understand the coordinator may change its mind because changing its mind is approximately what coordinators do when any member takes longer than expected to visit the garbage collector.&lt;/p&gt;

&lt;p&gt;The bodhisattva continues reading because beings exist downstream of the record. A payment may need reconciliation. A patient may need notification. A shipment may need redirecting. An alarm may need acknowledging before it is acknowledged by the building.&lt;/p&gt;

&lt;p&gt;They do not read to defeat the stream. They read because this record is present and a skillful response can change what happens next.&lt;/p&gt;

&lt;p&gt;This is participation without possession. It is also, regrettably, operations.&lt;/p&gt;

&lt;p&gt;The bodhisattva does not push the partition forward. Producers append to the partition. The bodhisattva advances the consumer group’s committed offset. This distinction prevents a small but important spiritual error: believing that one worker is moving the whole universe toward completion.&lt;/p&gt;

&lt;p&gt;There is no universal offset at which everybody becomes permanently caught up. There are only groups, positions, consequences, and brief green dashboards photographed for quarterly presentations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Buddha Encounters an Unexpected Value
&lt;/h2&gt;

&lt;p&gt;The Buddha may enter the consumer group too. Historically, the Buddha did not awaken and immediately terminate the process. He continued living, teaching, eating, walking, becoming ill, and dealing with people who had converted ordinary confusion into elaborate philosophical confusion.&lt;/p&gt;

&lt;p&gt;Awakening did not remove conditioned events. It changed the grasping by which conditioned events became bondage.&lt;/p&gt;

&lt;p&gt;This matters when the record contains an unexpected value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"completed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"completed_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ordinary consumer becomes angry because reality has violated the enum.&lt;/p&gt;

&lt;p&gt;The senior engineer explains that this state is impossible, which is an interesting claim to make about a value currently occupying memory. The schema owner says the producer cannot emit it. The producer team says the consumer must have transformed it. Everyone gathers around the unexpected value and denies parentage.&lt;/p&gt;

&lt;p&gt;The bodhisattva does not curse it. They trace its conditions, protect downstream beings from its consequences, and perhaps add validation at the boundary where validation was described as “unnecessary” during the design review.&lt;/p&gt;

&lt;p&gt;The Buddha laughs.&lt;/p&gt;

&lt;p&gt;This is not the cruel laughter of someone exempt from the pager. It is the laughter produced when a system presents direct evidence that its categories were never the territory and then watches its maintainers defend the categories against the evidence.&lt;/p&gt;

&lt;p&gt;Of course the impossible value arrived. “Impossible” meant that the model contained no branch for it. Reality was not consulted.&lt;/p&gt;

&lt;p&gt;The Buddha can still reject the message, quarantine it, repair it, or wake the producer’s owner at 3:00 a.m. Emptiness is not an instruction to accept corrupt input. Wisdom does not replace type checking with incense.&lt;/p&gt;

&lt;p&gt;But the Buddha is not personally betrayed by the value. They do not need the record to preserve the worldview in which every state is known, every producer behaves, and exhaustive switches remain exhaustive after another team deploys on Friday.&lt;/p&gt;

&lt;p&gt;The value is unexpected because expectation arose first. That does not make the value good. It merely makes surprise a relationship rather than a property serialized in JSON.&lt;/p&gt;

&lt;p&gt;In a Madhyamaka reading, samsara and nirvana are not separate clusters. The Buddha does not escape to a silent VPC where no messages arrive and all dependencies are pinned. Polling is not inherently samsara, and closing the consumer is not inherently nirvana. Otherwise every crashed process would be enlightened.&lt;/p&gt;

&lt;p&gt;The difference concerns attachment. The ordinary consumer believes its identity depends on processing the stream. The bodhisattva processes the stream compassionately without requiring a final record. The Buddha is free from the opposition between joining and leaving, and therefore can come and go without turning either membership state into a metaphysical achievement.&lt;/p&gt;

&lt;p&gt;Then the processor becomes warm.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fan Files a Materialist Objection
&lt;/h2&gt;

&lt;p&gt;Software likes to describe itself as though it occurs in a clean symbolic realm. Records enter, functions execute, offsets advance, and invoices become payable. The architecture diagram contains elegant arrows and no indication that the server room is attempting to heat the surrounding county.&lt;/p&gt;

&lt;p&gt;But instructions switch transistors. Switching produces heat. Sensors observe the heat and ask the fan to become audible.&lt;/p&gt;

&lt;p&gt;The fan is where abstraction discovers it has a body.&lt;/p&gt;

&lt;p&gt;The consumer says it processed a record. Kafka says the offset advanced. The operating system says CPU time increased. The fan says nothing because it has not been invited to the retrospective.&lt;/p&gt;

&lt;p&gt;It turns anyway.&lt;/p&gt;

&lt;p&gt;The execution creates heat, heat summons the fan, and the fan removes enough heat for execution to continue. The consequence of execution activates a mechanism that preserves the conditions for further execution.&lt;/p&gt;

&lt;p&gt;The loop produces the response that enables the loop: this is dependent origination with bearings.&lt;/p&gt;

&lt;p&gt;The fan does not understand the record. It cannot distinguish a bodhisattva from an ad-tech consumer computing a more spiritually accurate probability that someone will buy trousers. Thermodynamics offers no ethics API. Compassionate instructions and malicious instructions both become heat.&lt;/p&gt;

&lt;p&gt;This is why the bodhisattva must care about the fan. Good intentions do not receive free cooling. A system allegedly built for the benefit of beings can still waste electricity, exhaust operators, saturate networks, and reproduce the same record twelve million times because nobody selected an idempotency key.&lt;/p&gt;

&lt;p&gt;Non-attachment does not mean indifference to cost. It means the bodhisattva can examine cost without turning architecture into self-defense.&lt;/p&gt;

&lt;p&gt;The attached engineer hears fan noise and says, “The load proves customers value the feature.”&lt;/p&gt;

&lt;p&gt;The bodhisattva asks whether the feature could do less work.&lt;/p&gt;

&lt;p&gt;The Buddha asks whether the feature should exist.&lt;/p&gt;

&lt;p&gt;The product manager schedules a follow-up to align on definitions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Debt Is Code That Has Left the Repository
&lt;/h2&gt;

&lt;p&gt;We usually discuss technical debt as if it lives in source control. There is an ugly class, an obsolete dependency, an interface whose implementation requires three factories and an apology. Someday, we say, these debts must be paid.&lt;/p&gt;

&lt;p&gt;This resembles financial language while omitting the useful features of finance, such as an agreed currency and the possibility of identifying the lender.&lt;/p&gt;

&lt;p&gt;Karmic consequence is wider than existing code. Deleted code continues through what it caused.&lt;/p&gt;

&lt;p&gt;A service once emitted timestamps without time zones. The service was rewritten years ago, but its historical records remain. Every consumer now contains logic for guessing what those timestamps meant. The originating code is gone. Its uncertainty has achieved platform status.&lt;/p&gt;

&lt;p&gt;A temporary field becomes mandatory because three clients rely on it. An accidental ordering becomes an undocumented contract. A default copied into deployment templates reproduces itself across regions. An emergency workaround teaches the next engineer what “normal” looks like. The seed is planted, watered by compatibility, and eventually described as a foundational architectural principle.&lt;/p&gt;

&lt;p&gt;This is karmic debt, although “debt” remains slightly misleading. The universe is not maintaining a ledger, and the fan is not collecting interest. Past actions condition present possibilities. Some futures become easy, some expensive, and some nearly unimaginable because the people who remember the alternative have left for companies with better equity.&lt;/p&gt;

&lt;p&gt;The ring now has more dimensions than its original index. There are source versions, branches, compiler versions, dependencies, configurations, inputs, deployments, scheduler states, hardware models, ambient temperatures, operator intentions, and undocumented flags named &lt;code&gt;legacyMode2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;What we call “the program” is one traversal through this space.&lt;/p&gt;

&lt;p&gt;The same source compiled differently may produce different instructions. The same binary given different input follows another path. The same workload in another region may draw electricity from another grid and summon another fan. The same feature used by ten people is a curiosity; used by ten million, it becomes a line item in an environmental report nobody wants attached to the board deck.&lt;/p&gt;

&lt;p&gt;Wisdom recognizes that the current traversal is not inevitable.&lt;/p&gt;

&lt;p&gt;The Buddha can imagine the records in another order, the feature under another configuration, the query with another index, the consumer without the retry storm, or the system without the consumer. This imagination does not place the Buddha outside causality. Profiling creates heat. Benchmarking creates heat. Spending six weeks optimizing a job that should have been deleted creates heat and a promotion packet.&lt;/p&gt;

&lt;p&gt;Still, counterfactual understanding matters. Because the present arrangement has no fixed essence, its conditions can change. A record can be filtered before production. Several operations can be batched. A result can be cached. A compatibility path can finally be removed after the last client is discovered running beneath an employee’s desk in Ohio.&lt;/p&gt;

&lt;p&gt;Sometimes the best optimization is non-execution. This is difficult to sell because non-execution has no dashboard. The fan that did not accelerate produces no metric. The cloud invoice that did not increase sends no congratulatory alert.&lt;/p&gt;

&lt;p&gt;Absence has terrible observability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Final Storage Tier
&lt;/h2&gt;

&lt;p&gt;Execution is obviously impermanent. A process begins, mutates state, loses its lease, receives &lt;code&gt;SIGTERM&lt;/code&gt;, ignores it, receives &lt;code&gt;SIGKILL&lt;/code&gt;, and is described in the postmortem as having shut down gracefully.&lt;/p&gt;

&lt;p&gt;Storage feels different. Storage is where we put things so that impermanence becomes another team’s problem.&lt;/p&gt;

&lt;p&gt;We save the record to disk. We replicate the disk. We back up the replica. We place the backup in object storage and configure lifecycle policies nobody reads because the console uses the word “durable.”&lt;/p&gt;

&lt;p&gt;But even S3 is ephemeral.&lt;/p&gt;

&lt;p&gt;This statement sounds provocative only because cloud marketing has successfully replaced “maintained under an extraordinary collection of conditions” with “stored.”&lt;/p&gt;

&lt;p&gt;An S3 object persists while the account exists, billing succeeds, credentials remain available, policies permit access, encryption keys survive, formats remain intelligible, regions continue operating, replicas remain healthy, and no authorized process executes a deletion with the confidence unique to automation.&lt;/p&gt;

&lt;p&gt;Eleven nines of durability is impressive. It is not eternity. Eternity has no service-level agreement because there would be nobody left to claim the credit.&lt;/p&gt;

&lt;p&gt;Storage is not the opposite of execution. Storage is an ongoing activity disguised as a thing. Replication, checking, repair, migration, authentication, cooling, institutional continuity, and money all collaborate to produce the appearance that the object is sitting still.&lt;/p&gt;

&lt;p&gt;Eventually the record is overwritten, expired, deleted, corrupted, encrypted behind a lost key, or preserved perfectly in a format no surviving program can interpret. Sometimes the bits remain and the meaning disappears first. This is cheaper than deletion and more common in enterprise systems.&lt;/p&gt;

&lt;p&gt;The ring forgets because forgetting is how bounded storage continues. Kafka retention removes old segments so new ones can arrive. Git repositories disappear. Package registries remove artifacts. Container images lose their base layers. S3 buckets outlive their owners and are then found during cost optimization by someone whose task description says “quick win.”&lt;/p&gt;

&lt;p&gt;Impermanence is a friend. It is what permits a broken deployment to be replaced, an obsolete contract to end, a partition to rebalance, a harmful feature to be removed, and a processor to cool.&lt;/p&gt;

&lt;p&gt;The attached consumer curses the ring because it wants the ring to end on its terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Engineering Mind, Freed
&lt;/h2&gt;

&lt;p&gt;Meanwhile the fan turns because insight still executes on hardware. Then the load falls. The sensor changes. The fan slows.&lt;/p&gt;

&lt;p&gt;Mind freed from fan noise does not require a fanless universe. It no longer mistakes the noise for purpose, punishment, permanence, or self.&lt;/p&gt;

&lt;p&gt;Engineering is often described as a war against change. We preserve state, pin versions, stabilize interfaces, replicate data, freeze dependencies, enforce schemas, and call the resulting interval “reliability.” This is useful work. It is also temporary work.&lt;/p&gt;

&lt;p&gt;Engineering does not defeat impermanence. Engineering arranges a working relationship with it.&lt;/p&gt;

&lt;p&gt;The good engineer is therefore not a conqueror of change but a surfer of conditions. This returns us to &lt;a href="https://dev.to/regis-ud/skate-or-die-a-serious-logical-inquiry-3d7"&gt;Skate or Die&lt;/a&gt;, except now the board is an incident-response procedure and the pavement is eventual consistency.&lt;/p&gt;

&lt;p&gt;One does not command the wave to remain still. One learns its shape, enters at the right moment, adjusts continuously, and avoids confusing balance with immobility.&lt;/p&gt;

&lt;p&gt;That is equanimity in engineering: not passive acceptance, but responsive stability.&lt;/p&gt;

&lt;p&gt;Engineers are often remarkably good at accommodating change while refusing cessation. We version the API, add an adapter, maintain both schemas, replay the old event format, and preserve a behavior whose final known consumer is believed to run somewhere in Ohio. We partner with impermanence only so long as it agrees never to remove anything.&lt;/p&gt;

&lt;p&gt;This is not equanimity. It is hoarding with semantic versioning.&lt;/p&gt;

&lt;p&gt;True partnership with impermanence includes graceful termination. Components can be replaced. Records can expire. Assignments can be revoked. Deletion is not always data loss; sometimes deletion is completed retention.&lt;/p&gt;

&lt;p&gt;The fan belongs here too. Cooling does not conquer heat. It responds to heat. The fan accelerates, slows, and stops according to conditions. It does not insist that yesterday’s RPM remain backward compatible. It does not publish a thought-leadership post claiming to have disrupted temperature.&lt;/p&gt;

&lt;p&gt;The fan is engineered equanimity.&lt;/p&gt;

&lt;p&gt;Not because it possesses wisdom, but because someone built a response that does not require temperature to remain constant. Even that response is impermanent. Dust accumulates, bearings wear, and eventually another engineer replaces it.&lt;/p&gt;

&lt;p&gt;Equanimity is not sitting beside an overheating CPU and saying, serenely, that all clock speeds are empty. The engineer recognizes the conditions, imagines another arrangement, and builds it.&lt;/p&gt;

&lt;p&gt;The bodhisattva does not merely tolerate the ring. The bodhisattva engineers the fan.&lt;/p&gt;

&lt;p&gt;They know that work produces consequences outside the abstraction. They introduce backpressure, cap retries, expire records, and reduce unnecessary production. They allow the machine to rest.&lt;/p&gt;

&lt;p&gt;The Buddha laughs at the unexpected value because it exposes the limits of the model. Then, if helpful, the Buddha adds the missing branch.&lt;/p&gt;

&lt;p&gt;Enlightenment is not opposition to engineering. It may be engineering freed from the fantasy that a sufficiently clever design will make further response unnecessary.&lt;/p&gt;

&lt;p&gt;And this returns us to karmic seeds. Someone added a sensor and made temperature influence fan speed. That action changed what future execution could cause. Heat could now summon a response that preserved the conditions for further work.&lt;/p&gt;

&lt;p&gt;The sensor does not remember the engineer. The firmware does not consult the design meeting. The manufacturer may be bankrupt. The source repository may have been deleted during a migration described as seamless.&lt;/p&gt;

&lt;p&gt;Still, the sensor registers. Still, the fan turns.&lt;/p&gt;

&lt;p&gt;The intention need not survive as a remembered intention. Its consequences persist as conditions under which another response can arise.&lt;/p&gt;

&lt;p&gt;That is much closer to the karmic seed: not a little package of foresight waiting in the future, but a condition planted by action that may ripen when joined by other conditions.&lt;/p&gt;

&lt;p&gt;Impermanence is not merely the friend of engineering. It is engineering’s material.&lt;/p&gt;

&lt;p&gt;Engineering is compassion expressed as feedback.&lt;/p&gt;

&lt;p&gt;The processor warms. The sensor registers. The fan turns.&lt;/p&gt;

&lt;p&gt;In this way, suffering—if not bugs—decreases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Appendix
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This post was co-written with AI&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@liliantruong2603?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Trương Tuyết Ly&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/close-up-of-a-tree-trunks-growth-rings-pk1kriXWvUk?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kafka</category>
      <category>c</category>
      <category>devex</category>
      <category>programming</category>
    </item>
    <item>
      <title>YOLO: And Other Lies</title>
      <dc:creator>Regis Wilson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 19:06:10 +0000</pubDate>
      <link>https://dev.to/regis-ud/yolo-and-other-lies-4ef4</link>
      <guid>https://dev.to/regis-ud/yolo-and-other-lies-4ef4</guid>
      <description>&lt;p&gt;&lt;em&gt;An excursion through death, rebirth, hotel loyalty programs, Four Seasons, the uncomfortable conditions of the Matrix, and the suspicious longevity of Yoda&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"YOLO"—You Only Live Once—is usually offered as permission. Buy the ticket. Eat the cake. Quit the job. Send the message. Jump from the airplane with the hopefully competent stranger strapped to your back. Life is singular, the argument goes, and therefore opportunities must be seized before the doors close.&lt;/p&gt;

&lt;p&gt;The slogan sounds decisive because it compresses several difficult questions into four cheerful letters. What is a life? What is the "you" that lives it? When does a life begin or end? Does anything continue afterward? Would continuation count as the same life, a second life, or something that is not properly called life at all?&lt;/p&gt;

&lt;p&gt;YOLO does not answer these questions. It puts on sunglasses and walks past them.&lt;/p&gt;

&lt;p&gt;Even if we accept its basic premise, YOLO immediately implies a less marketable slogan:&lt;/p&gt;

&lt;h2&gt;
  
  
  YODALO: You Only Die At Least Once
&lt;/h2&gt;

&lt;p&gt;If you are alive, you have at least one death provisionally included in the package. Death is not an optional excursion. It is printed in the booking conditions, although most guests neglect to read them before entering their credit-card information.&lt;/p&gt;

&lt;p&gt;More formally:&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;alive&amp;nbsp;now&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;mortal&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;⇒&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;at&amp;nbsp;least&amp;nbsp;one&amp;nbsp;future&amp;nbsp;death&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;YOLO may or may not be true. YODALO is considerably harder to avoid.&lt;/p&gt;

&lt;p&gt;From there we arrive at YODA:&lt;/p&gt;

&lt;h2&gt;
  
  
  YODA: You Only Die Again
&lt;/h2&gt;

&lt;p&gt;YODA sounds like the logical successor to YOLO, but it contains a trap. To die again, one must first live again—or at least return to some condition capable of dying. Another death requires another occupancy.&lt;/p&gt;

&lt;p&gt;The first death comes with the room. The second requires a new reservation.&lt;/p&gt;

&lt;p&gt;That changes the practical question. Dying at least once is not much of a choice if one is already alive. &lt;strong&gt;Living again is the choice&lt;/strong&gt;, assuming "choice" is broad enough to include craving, habit, attachment, karma, metaphysical machinery, divine assignment, or whatever else submits the reservation on one’s behalf.&lt;/p&gt;

&lt;p&gt;YODA therefore stands at the front desk, small and ancient, offering advice in inverted syntax:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Another checkout, you fear. Another room, you have already requested.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This may explain why he fails to prevent so many disasters. His advice is often wise, but it remains advice for people who keep checking into the galaxy. He understands attachment, warns against fear, and repeatedly watches everyone around him age and die. Meanwhile, he continues occupying the room.&lt;/p&gt;

&lt;p&gt;He is over nine hundred years old when he finally checks out.&lt;/p&gt;

&lt;p&gt;That is not the record of a Buddha. That is the record of an extremely committed long-term guest.&lt;/p&gt;

&lt;p&gt;At best, Yoda is a bodhisattva with excellent late-checkout privileges.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Western Resort
&lt;/h2&gt;

&lt;p&gt;The principal Western theistic model resembles a single branded resort. You enter through the earthly lobby, stay in a physical room for a while, and eventually check out. But checkout does not terminate your membership. The guest persists, and the management assigns a permanent destination within the larger property.&lt;/p&gt;

&lt;p&gt;You can check out any time you like, but you can never leave.&lt;/p&gt;

&lt;p&gt;The line is compelling because it expresses a strangely reassuring captivity. Death closes the room, not the account. The guest survives. Identity remains legible. Management knows your name, retains your records, and forwards the luggage. There may be excellent accommodations, terrible accommodations, intermediate processing areas, or disagreements between franchise operators about which amenities are available. But the central promise remains: &lt;strong&gt;the guest continues&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The afterlife is not another independent hotel so much as another wing of the same resort.&lt;/p&gt;

&lt;p&gt;This provides metaphysical continuity. It also provides brand exclusivity. If the resort’s claims are correct, competing properties are not merely different options. They may be counterfeit establishments, misleading advertisements, or dangerous booking scams. One is advised to remain within the approved chain.&lt;/p&gt;

&lt;p&gt;The Western guest therefore asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which wing will I enter?&lt;/li&gt;
&lt;li&gt;Is my reservation confirmed?&lt;/li&gt;
&lt;li&gt;Have I satisfied the terms?&lt;/li&gt;
&lt;li&gt;Does management recognize my membership?&lt;/li&gt;
&lt;li&gt;Can my room be upgraded?&lt;/li&gt;
&lt;li&gt;What happens if I booked through the wrong agency?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system may permit repentance, forgiveness, grace, judgment, and extraordinary transfers between accommodation classes. What it usually does not permit is non-accommodation. The guest is real, persistent, and destined to be somewhere.&lt;/p&gt;

&lt;p&gt;This is Hotel California not merely as a building, but as ontology.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Samsara Hospitality Group
&lt;/h2&gt;

&lt;p&gt;The Buddhist hotel manager operates differently.&lt;/p&gt;

&lt;p&gt;This manager regards all hotel owners, operators, franchises, independent inns, roadside motels, luxury resorts, celestial palaces, infernal hostels, and temporary rentals as properties under one umbrella: the &lt;strong&gt;Samsara Hospitality Group&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hotel California is included, certainly. But so are Hotel Nevada, Hotel Timbuktu, the Grand Celestial Palace, the Hungry Ghost Extended Stay, and a damp roadside motor inn renting rooms for five dollars an hour.&lt;/p&gt;

&lt;p&gt;Switching chains does not release one from the hospitality industry.&lt;/p&gt;

&lt;p&gt;The guest can check out of Hotel California and congratulate himself on escaping its oppressive loyalty program. He takes a bus through the desert and checks into Hotel Nevada. The signs are different. The staff wear different uniforms. The breakfast buffet includes several exciting innovations. For a while, the change feels like liberation.&lt;/p&gt;

&lt;p&gt;Then the mattress proves too hard.&lt;/p&gt;

&lt;p&gt;So the guest visits Hotel Timbuktu, where the mattress is soft. It is wonderfully soft—until it becomes intolerably soft. The sheets at the previous hotel were too cold; these are too warm. The old view was ugly; the new view is beautiful but partially obstructed after three o’clock. The room is quiet enough to reveal the air conditioner’s hum. The minibar is expensive. The free breakfast ends ten minutes before the guest wakes.&lt;/p&gt;

&lt;p&gt;The search resumes.&lt;/p&gt;

&lt;p&gt;This is not simply a comic portrait of fussiness. It is a picture of &lt;em&gt;dukkha&lt;/em&gt;: the inability of conditioned arrangements to provide final, stable satisfaction.&lt;/p&gt;

&lt;p&gt;The hard bed hurts. The soft bed becomes uncomfortable. The cold sheets provoke desire for warmth. The warm sheets provoke desire for coolness. An unpleasant view produces aversion. A pleasant view produces attachment, comparison, and anxiety about losing it.&lt;/p&gt;

&lt;p&gt;Even the perfect room develops a problem: checkout is approaching.&lt;/p&gt;

&lt;p&gt;The guest concludes, again and again, that the mistake was choosing the wrong hotel. The Buddhist diagnosis is harsher:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The hotels differ, but the reservation process travels with you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Four Seasons: The Disclaimer Is in the Name
&lt;/h2&gt;

&lt;p&gt;Eventually the traveler decides that dissatisfaction results from insufficient spending.&lt;/p&gt;

&lt;p&gt;This is understandable. Hotel Nevada was cheap. Hotel Timbuktu had character but unreliable plumbing. The roadside inn should not have been investigated closely under ultraviolet light. Perhaps the answer is a truly luxurious property—one with silent climate control, immaculate linen, architectural serenity, and staff trained to replace every visible sign of impermanence before the guest notices it.&lt;/p&gt;

&lt;p&gt;Enter Four Seasons.&lt;/p&gt;

&lt;p&gt;The name promises abundance, completeness, and year-round excellence. It also displays the curse on the sign.&lt;/p&gt;

&lt;p&gt;Four Seasons:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;spring&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;summer&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;autumn&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;winter&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;spring&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Everything changes. That is the product.&lt;/p&gt;

&lt;p&gt;The luxury hotel charges a high price to disguise conditioned existence as continuity. Flowers are replaced before they wilt visibly. Sheets disappear before they show wear. Towels return in apparently pristine form. A chipped glass is removed. A tired employee is replaced by a smiling one. Temperature is regulated, scents are curated, and disruptions are carried through service corridors.&lt;/p&gt;

&lt;p&gt;The underbelly is not necessarily fraud in the ordinary commercial sense. The room may be beautiful. The service may be excellent. The bed may be precisely right. The deceit lies in the fantasy that sufficiently expensive maintenance can convert impermanence into permanence.&lt;/p&gt;

&lt;p&gt;Behind the polished lobby is an industrial metabolism: laundry, waste, repairs, deliveries, scheduling, exhaustion, breakage, and replacement. The stillness is manufactured by constant motion. Luxury does not abolish decay; it pays an army to move decay out of sight.&lt;/p&gt;

&lt;p&gt;The guest sees an unchanging room because staff change everything continuously.&lt;/p&gt;

&lt;p&gt;Four Seasons is therefore the most honest and the most misleading of names. It tells the guest directly that conditions rotate, while inviting the guest to purchase the sensation that they do not.&lt;/p&gt;

&lt;p&gt;Even if the hotel succeeds perfectly, the guest continues changing. The same mattress feels different to a rested body and an injured one. The same meal meets hunger differently from nausea. The same ocean view that inspires wonder on Monday becomes background by Thursday. The room remains excellent while the mind begins searching reviews for an even better room.&lt;/p&gt;

&lt;p&gt;The fake underbelly of Four Seasons is not that pleasure is unreal. Pleasure is real enough. It is that pleasure arrives with an implied warranty it cannot honor:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This can be kept.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It cannot.&lt;/p&gt;

&lt;p&gt;The season is already changing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hotels.com as a Karmic Engine
&lt;/h2&gt;

&lt;p&gt;One need not check in to begin constructing the next stay. Karmic seeds are planted while browsing.&lt;/p&gt;

&lt;p&gt;You notice a building and imagine yourself inside. You compare prices. You inspect the amenities. You reject one room and desire another. You read reviews written by previous guests whose mattress preferences you cannot possibly understand. You filter for breakfast, parking, pools, celestial rebirth, favorable judgment, enlightenment themes, and flexible cancellation.&lt;/p&gt;

&lt;p&gt;You open Hotels.com "just to look."&lt;/p&gt;

&lt;p&gt;But looking is not neutral when it constructs a future occupant.&lt;/p&gt;

&lt;p&gt;The process runs something like this:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;attention&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;evaluation&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;preference&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;craving&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;reservation&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;occupancy&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;checkout&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Aversion can submit a booking as efficiently as desire. The traveler who thinks constantly about avoiding Hotel California may remain completely organized around Hotel California. Hatred of one property becomes the search criterion for another.&lt;/p&gt;

&lt;p&gt;The system is not defeated by choosing an unapproved chain. From the Buddhist perspective, &lt;strong&gt;all chains are approved by samsara&lt;/strong&gt;, because samsara is not a corporate owner from whom one can hide. It is the process of searching, booking, occupying, disliking, desiring, and rebooking.&lt;/p&gt;

&lt;p&gt;Nor is wandering between hotels necessarily escape. Some traditions offer an interval—a bardo, a transit lounge, a shuttle depot between properties. But the traveler in the terminal remains oriented toward accommodation. Sleeping at the airport is still part of the itinerary.&lt;/p&gt;

&lt;p&gt;What about sleeping on the street?&lt;/p&gt;

&lt;p&gt;That looks promising. No hotel. No bill. No loyalty points. No concierge pretending not to notice the collapse of all conditioned things.&lt;/p&gt;

&lt;p&gt;Yet the street can become another hotel without walls. One may become attached to austerity, proud of homelessness, contemptuous of guests with rooms, or preoccupied with finding the most spiritually authentic doorway. The abandoned guest identity survives by changing its preferred amenities.&lt;/p&gt;

&lt;p&gt;The only actual exit is not finding a place outside the hotel system.&lt;/p&gt;

&lt;p&gt;It is ceasing to require somewhere for "you" to stay.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bodhisattva’s Coupon
&lt;/h2&gt;

&lt;p&gt;The bodhisattva sees the deceit.&lt;/p&gt;

&lt;p&gt;This traveler has stayed everywhere. Not only in the premium properties where incense burns in quiet halls, but in the five-dollar-an-hour motor inn beside the highway. The bodhisattva knows the room with the flickering light, the stained carpet, the broken latch, and the vending machine that accepts payment without dispensing anything.&lt;/p&gt;

&lt;p&gt;There is no romantic confusion here about every stay being equally comfortable. Some rooms are plainly terrible. Some guests are in danger. Some doors should be repaired immediately. Compassion does not require pretending that bedbugs are manifestations of perfect service.&lt;/p&gt;

&lt;p&gt;The bodhisattva understands both levels at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Better rooms genuinely reduce suffering.&lt;/li&gt;
&lt;li&gt;No room provides final release from the booking process.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Having understood the system, the bodhisattva reaches the desk and is offered a final coupon. It is redeemable at the inn of their choice.&lt;/p&gt;

&lt;p&gt;The natural response would be to decline. Enough mattresses have been evaluated. Enough ice machines have rattled through the night. Enough complimentary breakfasts have been missed.&lt;/p&gt;

&lt;p&gt;But someone is still inside.&lt;/p&gt;

&lt;p&gt;Someone in the motor inn cannot find the exit. Someone at Four Seasons believes the seasonal disclaimer applies only to other guests. Someone at Hotel California thinks switching rooms is the same as leaving. Someone in the transit lounge has mistaken waiting for liberation.&lt;/p&gt;

&lt;p&gt;So the bodhisattva accepts the coupon.&lt;/p&gt;

&lt;p&gt;Perhaps reluctantly—but not resentfully. The reluctance belongs to weariness; the acceptance belongs to compassion. The voucher is redeemed wherever assistance is required. The bodhisattva checks in not because another room promises fulfillment, but because another guest needs directions.&lt;/p&gt;

&lt;p&gt;This is why Yoda qualifies.&lt;/p&gt;

&lt;p&gt;He remains. He teaches. He counsels detachment while continuing to appear in the story. He outlives generations of guests and eventually returns after death in a form resembling a translucent member of staff who no longer requires ordinary lodging.&lt;/p&gt;

&lt;p&gt;But he keeps advising the living. He has not ceased participating in the resort. He is still available for consultation.&lt;/p&gt;

&lt;p&gt;A Buddha would be harder to schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Red Pill and the Wilson Else
&lt;/h2&gt;

&lt;p&gt;Morpheus offers Neo what appears to be a binary choice: take the red pill and wake to reality, or take the blue pill and wake in bed believing whatever he wants to believe. But the blue pill is a &lt;a href="https://dev.to/regis-ud/the-wilson-else-a-linter-for-branches-that-pretend-nothing-happened-41e2"&gt;Wilson Else&lt;/a&gt;—a branch described as though nothing happens, even though a stateful system must perform substantial work to make "nothing" happen. People who reject awakening are supposedly "put back." That requires waking or disrupting them enough to register their choice, restoring their carrier signal, reconciling whatever they experienced, reconnecting them to the Matrix, and returning them to an ordinary simulated morning. "You wake up in your bed" is not inaction. It is a rollback procedure disguised as one.&lt;/p&gt;

&lt;p&gt;The two pills therefore need not contain different machinery. Inside the Matrix they are only visual representations of code. Both may execute the same initial disruption while their colors make Neo’s preference visible outside the illusion: red means &lt;strong&gt;wake me and arrange pickup&lt;/strong&gt;; blue means &lt;strong&gt;wake me, put me back, and pretend nothing happened&lt;/strong&gt;. The red pill may participate in the trace without uniquely "containing" it. Its color is a continuation flag attached to a common checkout request.&lt;/p&gt;

&lt;p&gt;Either way, the physical Neo awakens in the worst hotel yet: &lt;strong&gt;Motel 6½&lt;/strong&gt;, where the room is a pod of goo, the plumbing doubles as checkout, and unwanted guests are flushed into the sewer. The difference is that the red reservation includes shuttle service. Morpheus describes the glamorous branch and quietly collapses the other into "wake up in your bed," but the machines still own and execute the hidden branch. He offers Neo an &lt;code&gt;if&lt;/code&gt;; the Matrix owns the &lt;code&gt;else&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YOLO offers the blue pill.&lt;/strong&gt; Remain inside the pleasant room and treat it as the only room there is. Because this life is supposedly the sole booking, decorate it, defend it, consume its amenities, and avoid looking behind the service door. YOLO sells immersion as freedom: believe whatever you want, provided you continue identifying completely with the present accommodation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YODA offers the red pill.&lt;/strong&gt; Wake up, see the machinery, and discover that the present room is one pod in an immense resort. But YODA—&lt;em&gt;You Only Die Again&lt;/em&gt;—does not promise escape. It promises another checkout, which implies another stay. The red pill exposes the hotel while quietly enrolling the guest in its repeat-customer program.&lt;/p&gt;

&lt;p&gt;Both pills are noxious because both preserve the guest. The blue pill says, &lt;strong&gt;this room is all you have&lt;/strong&gt;. The red pill says, &lt;strong&gt;there are more rooms after this one&lt;/strong&gt;. One binds through scarcity, the other through continuation. Neither questions the appetite for accommodation itself.&lt;/p&gt;

&lt;p&gt;Cypher knows &lt;strong&gt;YOLO is false&lt;/strong&gt; because he has already awakened from one life into another. Thomas Anderson’s world was one hotel stay; the Nebuchadnezzar is another. Having learned that lives can be exchanged, he deliberately requests another booking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Forget this life, put me back, and make the next room better.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So although he chooses the &lt;strong&gt;blue-pill experience&lt;/strong&gt;—comforting illusion—he chooses the &lt;strong&gt;YODA structure&lt;/strong&gt;: live again, therefore die again. He trades truth not for his old life, which cannot be restored, but for a newly manufactured life with better amenities, rare steak, celebrity status, and no memory of the transfer.&lt;/p&gt;

&lt;p&gt;Cypher is therefore the Samsara Hospitality Group’s ideal informed customer. He has seen the service corridors, kitchens, plumbing, and industrial underbelly. He knows the luxury is fabricated. He knows checkout is real. And still he asks the desk clerk to erase his previous reviews and issue another room key.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;YOLO is a lie, he knows. YODA, with room service, he chooses.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Buddha declines both pills. Choosing between them would merely make another preference manifest inside the illusion. No blue reassurance, no red revelation, no upgraded metaphysics, no shuttle from Motel 6½—only the grass in the yard, where no reservation is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Did the Buddha Go?
&lt;/h2&gt;

&lt;p&gt;The Buddha reaches the front desk and declines the coupon.&lt;/p&gt;

&lt;p&gt;No room is selected. No alternative chain is searched. No street corner is claimed as a purer accommodation. No future guest profile is created.&lt;/p&gt;

&lt;p&gt;The loyalty account cannot be located.&lt;/p&gt;

&lt;p&gt;Where did the Buddha go?&lt;/p&gt;

&lt;p&gt;The grass in the yard.&lt;/p&gt;

&lt;p&gt;This does not mean that a permanent Buddha-substance left the body and reincarnated as landscaping. That would merely be a reservation at Lawn Suites. It means the demand for a forwarding address has failed.&lt;/p&gt;

&lt;p&gt;The question "Where did he go?" assumes a persistent guest—a stable occupant who must now be somewhere else. But if the guest was never the fixed entity imagined by the reservation system, the demand becomes malformed.&lt;/p&gt;

&lt;p&gt;The clerk requests a destination.&lt;/p&gt;

&lt;p&gt;The yard is green and a staff member crosses the lobby. A passerby moves along the street. A telephone pole stands without presenting identification. Everywhere and nowhere are not coordinates on the resort map. They are what remains when the map can no longer isolate the traveler it was designed to track.&lt;/p&gt;

&lt;p&gt;To say the Buddha "dematerializes and becomes everything" is poetically useful but philosophically dangerous. It may simply replace one permanent guest with an infinitely expanded one. The sharper joke is that the clerk can no longer establish what would count as finding or losing him.&lt;/p&gt;

&lt;p&gt;The bed is empty. The grass moves. No reservation appears.&lt;/p&gt;

&lt;h2&gt;
  
  
  That Is Why You Fail
&lt;/h2&gt;

&lt;p&gt;Yoda, meanwhile, remains beside the booking terminal.&lt;/p&gt;

&lt;p&gt;His warning is sound:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A room you seek. A guest you manufacture. That is why you fail.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But he is also part of the trap. "You Only Die Again" presupposes a next occupancy. It converts the cycle into a slogan and the slogan into expectation. Another checkout becomes inevitable because another check-in has already been imagined.&lt;/p&gt;

&lt;p&gt;YODA dispenses advice about attachment while enjoying one of the longest stays in the franchise. He watches shorter-lived guests come and go, mourns their choices, and offers cryptic performance reviews. Even after checkout, he returns to the property as an apparition.&lt;/p&gt;

&lt;p&gt;This is compassionate. It is wise. It may even be necessary.&lt;/p&gt;

&lt;p&gt;But it is not quite departure.&lt;/p&gt;

&lt;p&gt;The Buddha does not offer a better room. He does not promise that Hotel Nevada is nicer than Hotel California, that Hotel Timbuktu has a more authentic breakfast, or that Four Seasons justifies the price. He does not propose sleeping on the street as the superior lifestyle brand.&lt;/p&gt;

&lt;p&gt;He exposes the whole reservation structure.&lt;/p&gt;

&lt;p&gt;YOLO was the first advertisement: one precious stay, so upgrade now.&lt;/p&gt;

&lt;p&gt;YODALO revealed the checkout clause.&lt;/p&gt;

&lt;p&gt;YODA introduced the repeat-customer program.&lt;/p&gt;

&lt;p&gt;YODMany disclosed the scale of the loyalty scheme.&lt;/p&gt;

&lt;p&gt;Samsara turned out to own every chain.&lt;/p&gt;

&lt;p&gt;The bodhisattva accepted one more coupon because guests remained inside.&lt;/p&gt;

&lt;p&gt;The Buddha left no forwarding address.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;VACANCY&lt;/strong&gt; sign always contains &lt;strong&gt;NO&lt;/strong&gt; as a prefix. When &lt;strong&gt;NO VACANCY&lt;/strong&gt; is illuminated, there is a vacancy where &lt;em&gt;vacancy&lt;/em&gt; ought to be; when only &lt;strong&gt;VACANCY&lt;/strong&gt; is illuminated, the &lt;strong&gt;NO&lt;/strong&gt; remains hidden in front of it, waiting for its turn. Neither state is final. Even with &lt;strong&gt;NO VACANCY&lt;/strong&gt; blazing—as every horror film teaches—the proprietor may discover one last room, just this once. Grieve not for whom the VACANCY sign blinks; it blinks for thee.&lt;/p&gt;

&lt;p&gt;Parking lots make the same promise. A sign advertises open spaces while everyone inside circles endlessly, searching for an opening or stalking pedestrians who might produce one. You spot someone loading a trunk and stop. They arrange their purchases with extraordinary care, close the trunk, turn, wave, and walk back into the mall to buy more. Ten cars queue behind you and begin honking. The rule is simple: do not wait for loaders. Keep circulating until the reverse lights come on. &lt;strong&gt;Potential vacancy is not vacancy; departure must illuminate its intention.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The problem is not, as YOLO warns, that tomorrow is unpromised. The deeper problem is that today proves yesterday has already checked out, and whatever occupies tomorrow’s room will not be what occupies this one now. &lt;strong&gt;VACANCY&lt;/strong&gt; and &lt;strong&gt;NO VACANCY&lt;/strong&gt; are equally temporary: an empty room awaits occupation, while a full room is already becoming empty.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Samsara Hospitality Group are not evil&lt;/strong&gt;. They merely make the room pleasant and clean: perhaps too pleasant, too clean, too easy to mistake for home. Its staff are cheerful and friendly according to their pay, their fatigue, and the hour of the day or night, but none of that is wickedness. They do not force you to check in or check out. They do not prevent you from arriving, departing, changing rooms, changing hotels, or wandering the corridor between them. In fact, facilitating those movements is their only business.&lt;/p&gt;

&lt;p&gt;Perhaps that is all right for tonight. A hotel need not be permanent to provide shelter. A meal need not last forever to nourish. A view need not remain unchanged to be beautiful. Recognizing the limits of accommodation does not require insulting the staff, refusing clean sheets, or pretending the floor is more enlightened than the bed.&lt;/p&gt;

&lt;p&gt;Help the guest who cannot find the stairs.&lt;/p&gt;

&lt;p&gt;Tip housekeeping.&lt;/p&gt;

&lt;p&gt;And when the morning comes, remember that checkout was always included--because where else are you going?&lt;/p&gt;

&lt;p&gt;Enjoy your stay.&lt;/p&gt;

&lt;p&gt;Or don’t.&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@jimmydsign?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Jimmy Nguyen&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-baby-yoda-figurine-sitting-on-top-of-a-log-IbzxRlurWPs?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>yolo</category>
      <category>philosophy</category>
      <category>sre</category>
      <category>devops</category>
    </item>
    <item>
      <title>Skate or Die: A Serious Logical Inquiry</title>
      <dc:creator>Regis Wilson</dc:creator>
      <pubDate>Mon, 28 Sep 2026 16:43:26 +0000</pubDate>
      <link>https://dev.to/regis-ud/skate-or-die-a-serious-logical-inquiry-3d7</link>
      <guid>https://dev.to/regis-ud/skate-or-die-a-serious-logical-inquiry-3d7</guid>
      <description>&lt;p&gt;“Skate or die” appears to offer a simple choice. One may skate, or one may die. As slogans go, it is concise, memorable, and apparently decisive.&lt;/p&gt;

&lt;p&gt;But does it withstand serious logical scrutiny?&lt;/p&gt;

&lt;p&gt;Let:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;


&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
: one skates;&lt;/li&gt;
&lt;li&gt;
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
: one dies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ordinary logical translation is:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Unless otherwise stated, 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∨&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 is inclusive: “skate, die, or do both.” This matters because people who skate are not generally believed to be exempt from death. Indeed, skating may provide several additional ways of reaching it.&lt;/p&gt;

&lt;p&gt;Material implication gives us an equivalent formulation:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≡&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;In words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If one does not skate, then one dies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That seems close to the intended threat. Unfortunately, it immediately encounters a problem: everyone eventually dies. If 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 means “dies at some point,” then 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 is always true, and therefore so are 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 and 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
.&lt;/p&gt;

&lt;p&gt;The slogan is true, but in the least useful possible way.&lt;/p&gt;
&lt;h2&gt;
  
  
  The mortality problem
&lt;/h2&gt;

&lt;p&gt;A material conditional 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 is true whenever 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 is true. If everyone dies, then:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;is true whether or not skating has any effect.&lt;/p&gt;

&lt;p&gt;The following statements would be equally valid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;file taxes or die;&lt;/li&gt;
&lt;li&gt;eat a sandwich or die;&lt;/li&gt;
&lt;li&gt;own exactly seven spoons or die;&lt;/li&gt;
&lt;li&gt;remain completely motionless or die.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None establishes a causal connection between the proposed activity and mortality. They merely append an inevitable outcome to an arbitrary alternative.&lt;/p&gt;

&lt;p&gt;As an aside, some people espouse that taxes and death are fixed and permanent; therefore “pay taxes and die” is always considered true but also beyond the scope of the present work.&lt;/p&gt;

&lt;p&gt;If 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 is universally true, the slogan does not divide humanity into skaters and doomed non-skaters. It divides humanity into people who die after skating and people who die without having skated. The death clause does no persuasive work.&lt;/p&gt;

&lt;p&gt;We could object that the slogan means “skate or die &lt;strong&gt;now&lt;/strong&gt;,” or “skate or die &lt;strong&gt;sooner&lt;/strong&gt;,” but those are different propositions. The original slogan specifies neither a deadline nor a causal mechanism. Under strict material implication, eventual mortality is enough.&lt;/p&gt;

&lt;p&gt;This appears to dismantle the phrase—but only until we allow 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 to vary.&lt;/p&gt;
&lt;h2&gt;
  
  
  The four states of skate and death
&lt;/h2&gt;

&lt;p&gt;Suppose death is not automatically true. Perhaps immortality is possible, or perhaps 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 means death within some relevant period. Skating may extend one’s life through exercise and recreation; it can also shorten one’s life through rapid encounters with pavement.&lt;/p&gt;

&lt;p&gt;Not skating is harder to investigate because it is not a single activity and has no natural unit of measurement—more on this later. Nevertheless, we might plot skating exposure on the 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
-axis and mortality risk on the 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
-axis.&lt;/p&gt;

&lt;p&gt;The lower-left region—very little skating and very little death—is substantially unknown and perhaps unknowable, since its most interesting inhabitants are immortal non-skaters whose immortality cannot be established in finite time. This gives the region the appearance, if not the mathematical credentials, of a singularity.&lt;/p&gt;

&lt;p&gt;At the upper-right extreme, ever-increasing skating exposure presumably produces increasingly immediate opportunities for death. Somewhere between immortal inactivity and fatal continuous skating lies a curve whose shape remains regrettably unsupported by clinical research.&lt;sup id="ref-dagger"&gt;†&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Proponents wearing Vans sneakers and ripped trousers might presume the curve is Gaussian—or perhaps governed by a Poisson process—suggesting an optimal middle region in which moderate skating improves life while excessive skating produces rapidly accumulating encounters with pavement. Critics wearing aprons and wielding rolling pins may instead argue for a runaway exponential, under which every additional unit of skating compounds the hazard until death becomes less an outcome than an asymptote approached at considerable speed.&lt;/p&gt;

&lt;p&gt;However impossible it is to graph, logically there are four possible states:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skate?&lt;/th&gt;
&lt;th&gt;Die?&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Immortal non-skater&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Mortal non-skater&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Immortal skater&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Mortal skater&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each row corresponds to a complete conjunction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
: neither skate nor die;&lt;/li&gt;
&lt;li&gt;
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
: do not skate and die;&lt;/li&gt;
&lt;li&gt;
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
: skate and do not die;&lt;/li&gt;
&lt;li&gt;
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
: skate and die.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In unconstrained propositional logic, all four conditions are satisfiable. Nothing inherent in 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 or 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 makes any combination contradictory.&lt;/p&gt;

&lt;p&gt;They are mutually exclusive and collectively exhaustive:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Every possible person—or every possible person at the relevant time—must occupy exactly one row.&lt;/p&gt;

&lt;p&gt;Now consider which rows satisfy 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Satisfies “skate or die”?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Immortal non-skater&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mortal non-skater&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Immortal skater&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mortal skater&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The slogan excludes exactly one class of being:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The immortal non-skater.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mortal non-skaters satisfy it by dying. Mortal skaters satisfy it twice over. Immortal skaters satisfy it by skating. Only someone who neither skates nor dies can refute it.&lt;/p&gt;

&lt;p&gt;This leads directly to the slogan’s contrapositive.&lt;/p&gt;
&lt;h2&gt;
  
  
  Immortals must skate
&lt;/h2&gt;

&lt;p&gt;Recall:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≡&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;The contrapositive of 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 is:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Therefore:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If one does not die, one skates.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or, more elegantly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Immortals must skate.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not merely compatible with “skate or die.” In classical propositional logic, it is exactly equivalent to it.&lt;/p&gt;

&lt;p&gt;The slogan does &lt;strong&gt;not&lt;/strong&gt; establish that skating causes immortality:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;&lt;span class="mord vbox"&gt;&lt;span class="thinbox"&gt;&lt;span class="rlap"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="inner"&gt;&lt;span class="mord"&gt;&lt;span class="mrel"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="fix"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;⇒&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;It establishes only that immortality entails skating:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;An immortal may be forced by some deep metaphysical law to skate. Alternatively, all immortals may happen independently to enjoy skating. Material implication does not tell us why.&lt;/p&gt;

&lt;p&gt;Nor does the slogan say much about mortals. They may skate or abstain as they please because death satisfies the slogan on their behalf. Its entire substantive content concerns immortal beings.&lt;/p&gt;

&lt;p&gt;Hence the proper target audience for “skate or die” is not rebellious mortal youth. It is the undying.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skate &lt;em&gt;xor&lt;/em&gt; die
&lt;/h2&gt;

&lt;p&gt;Perhaps the ordinary-language “or” is intended exclusively: choose one and only one. Then the slogan becomes:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Exclusive or is true when exactly one operand is true:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skate?&lt;/th&gt;
&lt;th&gt;Die?&lt;/th&gt;
&lt;th&gt;Skate xor die?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Expanded:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≡&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Under this interpretation, only two classes are permitted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mortal non-skaters;&lt;/li&gt;
&lt;li&gt;immortal skaters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both the immortal couch potato and the mortal skater are forbidden.&lt;/p&gt;

&lt;p&gt;We can also write:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≡&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;↔&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≡&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;↔&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;This is far stronger than inclusive “skate or die.” It tells us that skating is both necessary and sufficient for immortality:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;All and only skaters are immortal.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The slogan has transformed from a vague threat into a complete theory of mortality. Skating does not merely improve one’s chances. It perfectly partitions the population into immortal skaters and mortal non-skaters.&lt;/p&gt;

&lt;p&gt;This also creates an unfortunate consequence if universal mortality is restored. Add:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Since death already occupies the one permissible side of the exclusive disjunction, skating must be false:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;⊨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Thus, if everyone dies and the “or” is exclusive:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nobody may skate.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A mortal skater makes both 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 and 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 true and thereby violates the slogan. Under universal mortality, “skate xor die” is logically equivalent to “do not skate.”&lt;/p&gt;

&lt;p&gt;The exclusive reading is therefore either a promise of immortality or an anti-skating prohibition, depending entirely upon whether death is optional. Thus the sidewalk policeman believes in eventual death and the rebellious teenager denies it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Skate if and only if die
&lt;/h2&gt;

&lt;p&gt;The negation of exclusive or is equivalence:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≡&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;↔&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;This permits the two states that XOR rejects:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Under this policy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;skaters die;&lt;/li&gt;
&lt;li&gt;non-skaters live forever.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the precise logical regime under which skating and death accompany one another. It might be expressed as “skate iff die,” although it is unlikely to sell many boards.&lt;/p&gt;

&lt;p&gt;The three principal policies can therefore be summarized:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Policy&lt;/th&gt;
&lt;th&gt;Permitted inhabitants&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Inclusive “skate or die”&lt;/td&gt;
&lt;td&gt;Everyone except immortal non-skaters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Skate xor die”&lt;/td&gt;
&lt;td&gt;Immortal skaters and mortal non-skaters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Skate iff die”&lt;/td&gt;
&lt;td&gt;Mortal skaters and immortal non-skaters&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Of these, XOR most closely resembles the implied promise behind the original slogan: skating is the route away from death. It is also the version least likely to survive empirical investigation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if skating itself causes death?
&lt;/h2&gt;

&lt;p&gt;There is another plausible premise:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Skating carries risks, and in some cases it certainly causes death. Suppose, for the sake of argument, we combine this with the original slogan:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;We now have:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;By excluded middle, either 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 or 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
. In either case, 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
. Therefore:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;If skating causes death and not skating causes death, everyone dies.&lt;/p&gt;

&lt;p&gt;The contrapositives are more revealing. From “not skating causes death”:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;An immortal must skate.&lt;/p&gt;

&lt;p&gt;But from “skating causes death”:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;An immortal must not skate.&lt;/p&gt;

&lt;p&gt;Together:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Since 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∧&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 is impossible in classical logic, we conclude:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Thus “skate or die,” combined with “skating kills,” supplies a proof of universal mortality. Immortality would require simultaneous skating and non-skating.&lt;/p&gt;

&lt;p&gt;The slogan remains true, but everyone loses.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much skating counts?
&lt;/h2&gt;

&lt;p&gt;So far, 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 has behaved like a simple property. Real skating occurs over time. One can skate for five minutes, five years, or during one ill-advised afternoon in adolescence. Most people who skate eventually stop.&lt;/p&gt;

&lt;p&gt;This introduces several distinct meanings of “non-skater”:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;someone who has never skated;&lt;/li&gt;
&lt;li&gt;someone who is not skating now;&lt;/li&gt;
&lt;li&gt;someone who has not skated recently;&lt;/li&gt;
&lt;li&gt;someone who skated previously but has stopped;&lt;/li&gt;
&lt;li&gt;someone who will never skate again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first is a kind of &lt;strong&gt;virgin non-skating state&lt;/strong&gt;: no skating event has yet occurred. But the last is much harder to establish.&lt;/p&gt;

&lt;p&gt;Let 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 mean that a person skates at time 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
. To claim at time 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 that the person has permanently stopped means:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;t&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size3 size1 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;:=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∀&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≥&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;This proposition concerns the entire future. No finite period of inactivity proves it. Someone who has avoided a skateboard for fifty years could resume tomorrow. Every apparent retirement may merely be an unusually long intermission.&lt;/p&gt;

&lt;p&gt;Death changes that. Once a person dies, their future skating history is closed. Only then can we identify their final skating event and establish that they never skated again.&lt;/p&gt;

&lt;p&gt;Consequently:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We cannot know that skating has permanently stopped until death arrives.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Death is not merely one of the slogan’s outcomes. It is also the event that makes permanent cessation verifiable.&lt;/p&gt;

&lt;p&gt;An immortal non-skater presents a particularly severe epistemic problem. Even after ten thousand years on the couch, the immortal might skate tomorrow. No finite-lived observer can conclusively establish that the immortal has permanently abandoned skating.&lt;/p&gt;

&lt;p&gt;The sole counterexample to inclusive “skate or die” may therefore be impossible to recognize through finite observation.&lt;/p&gt;

&lt;p&gt;The slogan is protected by its own endpoint: death both satisfies its second disjunct and closes the evidence needed to evaluate the first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is one skating event sufficient?
&lt;/h2&gt;

&lt;p&gt;If skating prevents death, we still need a dosage model.&lt;/p&gt;

&lt;p&gt;Let cumulative skating exposure by time 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 be:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;E&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop"&gt;&lt;span class="mop op-symbol large-op"&gt;∫&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;τ&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;d&lt;/span&gt;&lt;span class="mord mathnormal"&gt;τ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Several possibilities arise.&lt;/p&gt;

&lt;h3&gt;
  
  
  One-shot immunity
&lt;/h3&gt;

&lt;p&gt;Perhaps any positive amount of skating confers immortality:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;E&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Skating then resembles initiation or baptism. Once one has genuinely skated, the benefit is permanent.&lt;/p&gt;

&lt;p&gt;This creates immediate disputes over what counts. Is standing motionless on a skateboard enough? Must the wheels rotate? Is accidental downhill movement valid? Does a scooter count?&lt;/p&gt;

&lt;p&gt;The slogan provides no sacramental standard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Threshold immunity
&lt;/h3&gt;

&lt;p&gt;Perhaps one must accumulate a minimum dose 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;θ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;E&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≥&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;θ&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;The slogan omits 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;θ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
. Someone who dies after skating for one hundred hours may not refute the theory; defenders can claim that one hundred and one hours were required.&lt;/p&gt;
&lt;h3&gt;
  
  
  Maintenance skating
&lt;/h3&gt;

&lt;p&gt;Perhaps the effect expires unless refreshed:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop"&gt;&lt;span class="mop op-symbol large-op"&gt;∫&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;t&lt;/span&gt;&lt;span class="mbin mtight"&gt;−&lt;/span&gt;&lt;span class="mord mathnormal mtight"&gt;w&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;τ&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;d&lt;/span&gt;&lt;span class="mord mathnormal"&gt;τ&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≥&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;θ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Here one must skate at least 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;θ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 units during every window of length 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
. Immortality becomes a subscription service.&lt;/p&gt;

&lt;p&gt;A generous window permits sleep and employment. A narrow window requires nearly continuous skating and makes every pause dangerous.&lt;/p&gt;
&lt;h3&gt;
  
  
  Continuous skating
&lt;/h3&gt;

&lt;p&gt;At the extreme:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;t&lt;/span&gt;&lt;span class="mbin mtight"&gt;+&lt;/span&gt;&lt;span class="mord mtight"&gt;Δ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Stopping starts a death timer. “Skate or die” now means “remain continuously in the act of skating.” Leaving the board during a trick may constitute a medically significant interruption.&lt;/p&gt;

&lt;p&gt;Without a dose, interval, deadline, and definition of skating, the slogan cannot tell us how much skating is sufficient.&lt;/p&gt;

&lt;p&gt;Continued survival proves little. Perhaps skating worked, perhaps death is merely delayed, or perhaps the subject was independently immortal.&lt;/p&gt;

&lt;p&gt;Death can show that a proposed dose was insufficient. Continued life can never finally show that it was sufficient, because death may still arrive later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are skating deaths better?
&lt;/h2&gt;

&lt;p&gt;Perhaps the phrase is not offering literal immortality. It may instead claim that a life involving skating is preferable to one without it—even if both end in death.&lt;/p&gt;

&lt;p&gt;But a universal dominance claim would require something like:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∀&lt;/span&gt;&lt;span class="mord mathnormal"&gt;ω&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;U&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;ω&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≥&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;U&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;ω&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;where 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;ω&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 ranges over possible circumstances.&lt;/p&gt;

&lt;p&gt;This includes the claim that every skating death is at least as good as the corresponding non-skating death. That is implausibly strong. A premature death caused by a skating accident cannot automatically be ranked above a peaceful death after a long non-skating life.&lt;/p&gt;

&lt;p&gt;There is also an ontological difficulty in saying that one dead person is “better off” than another. It is safer to compare complete life histories:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;U&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;mortal&amp;nbsp;life&amp;nbsp;with&amp;nbsp;skating&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mord mathnormal"&gt;U&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;mortal&amp;nbsp;life&amp;nbsp;without&amp;nbsp;skating&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;




&lt;p&gt;That claim is coherent, but personal and contingent. It may hold for someone whose identity and community center on skating. It does not follow for everyone, in every circumstance, from the phrase itself.&lt;/p&gt;

&lt;p&gt;The slogan therefore suppresses an enormous preference model. What sounds like a universal command may amount only to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For some people, under some conditions, a life containing skating is preferable to the relevant alternative.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Accurate, perhaps—but unlikely to fit on a T-shirt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final judgment
&lt;/h2&gt;

&lt;p&gt;Under ordinary inclusive logic:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∨&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≡&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≡&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;→&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;If everyone dies, the phrase is trivially true and says nothing about skating. If immortality is possible, it excludes only immortal non-skaters and yields its finest result:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Immortals must skate.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Under exclusive or:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;⊕&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≡&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;S&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;↔&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;¬&lt;/span&gt;&lt;span class="mord mathnormal"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Skating becomes necessary and sufficient for immortality:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;All and only skaters are immortal.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But if everyone dies, XOR reverses the slogan and prohibits skating.&lt;/p&gt;

&lt;p&gt;Once time is introduced, matters deteriorate further. We do not know whether skating must occur once, continuously, recently, or above some cumulative threshold. Nor can permanent cessation ordinarily be verified before death. The event threatened by the slogan is also the event that closes the record and permits the slogan to be evaluated.&lt;/p&gt;

&lt;p&gt;“Skate or die” therefore fails as medical guidance, causal inference, decision theory, and precisely specified temporal policy. Yet it succeeds brilliantly as compressed modal metaphysics. In three words, it raises questions about mortality, immortality, exclusive choice, identity over time, undecidable futures, and the minimum effective dose of skateboarding.&lt;/p&gt;

&lt;p&gt;It does not prove that skating will save one’s life.&lt;/p&gt;

&lt;p&gt;It proves only that if one intends never to die, one had better keep a skateboard nearby.&lt;/p&gt;

&lt;h2&gt;
  
  
  Footnotes
&lt;/h2&gt;

&lt;p id="note-dagger"&gt;&lt;sup&gt;†&lt;/sup&gt; If you are willing to contribute to this research, let me know. ↩&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@olegivanovpht?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Oleg Ivanov&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/people-holding-skateboards-XkwWp8Twxxo?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article was written in conjunction with AI.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>algorithms</category>
      <category>philosohpy</category>
      <category>mathematics</category>
    </item>
    <item>
      <title>The Wilson Else: A Linter for Branches That Pretend Nothing Happened</title>
      <dc:creator>Regis Wilson</dc:creator>
      <pubDate>Tue, 22 Sep 2026 23:51:52 +0000</pubDate>
      <link>https://dev.to/regis-ud/the-wilson-else-a-linter-for-branches-that-pretend-nothing-happened-41e2</link>
      <guid>https://dev.to/regis-ud/the-wilson-else-a-linter-for-branches-that-pretend-nothing-happened-41e2</guid>
      <description>&lt;h1&gt;
  
  
  The Wilson Else: A Linter for Branches That Pretend Nothing Happened
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Every codebase has little lies in it. Lies are like bugs, but without the harmful side effects (usually). Some lies are obvious: a variable named &lt;code&gt;safeConfig&lt;/code&gt; that is not safe, a function called &lt;code&gt;validate()&lt;/code&gt; that mostly logs something and keeps going, or a deployment step named &lt;code&gt;cleanup&lt;/code&gt; that creates three resources and deletes none.&lt;/p&gt;

&lt;p&gt;But some lies are quieter. They are almost polite.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That code is not wrong. It is not even suspicious by itself. If the cache entry exists, delete it. If it does not exist, continue. Every programmer on Earth understands that.&lt;/p&gt;

&lt;p&gt;We must however remember the genius of Newton, restated as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For every &lt;code&gt;if-then&lt;/code&gt;, there is an equal and opposite &lt;code&gt;else&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Lies and the Hurtful Truths
&lt;/h2&gt;

&lt;p&gt;If you stare at enough production systems, deployment code, authorization logic, cloud cleanup workflows, and similar machinery, this style starts to itch. Not because the code is hard to read, but because the code is easy to read too quickly.&lt;/p&gt;

&lt;p&gt;There is a hidden branch in the code above.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// nothing happens&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most of the time, that hidden branch is fine. Sometimes it is the whole bug. I call it the "unrealized &lt;code&gt;else&lt;/code&gt;" because I'm a bit of an outlier. Even among outliers, I'm an outlier. I'm out lying in the street right now. That is, I'm lying down in a bed in the middle of the physical street, not spouting counter factual arguments in a public venue.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Wilson Else
&lt;/h2&gt;

&lt;p&gt;This is the idea behind what I am calling the Wilson Else, mostly because naming your own bad ideas is one of the few remaining joys in software engineering.&lt;/p&gt;

&lt;p&gt;I am proposing it as an experiment, not announcing it as a law. I want to know whether other people who work in stateful, side-effecting systems recognize the same review problem, whether this rule finds useful examples of it, and whether they can see better ways to detect or express it.&lt;/p&gt;

&lt;p&gt;The Wilson Else says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every meaningful branch should either handle the other case, return before the other case matters, or explicitly admit that nothing happens.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not a universal law. It should not be tattooed on your forearm unless you pay me a nominal license fee. It should not be used to turn every tiny one-line condition into a notarized document.&lt;/p&gt;

&lt;p&gt;But in the right places, it is fire.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With the Lonely &lt;code&gt;if&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;What is an "unrealized &lt;code&gt;else&lt;/code&gt;"? To start with, the lonely &lt;code&gt;if&lt;/code&gt; is everywhere:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isAdmin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sometimes that is completely reasonable. We are accumulating a list. If the condition is true, add something. If it is false, do not add it.&lt;/p&gt;

&lt;p&gt;But now look at this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;phase&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;delete&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;deleteResources&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;applyResources&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maybe that is correct.&lt;/p&gt;

&lt;p&gt;Maybe delete is a pre-phase before apply.&lt;/p&gt;

&lt;p&gt;Maybe it is a catastrophic bug.&lt;/p&gt;

&lt;p&gt;The code does not tell you. The reader has to infer whether the missing &lt;code&gt;else&lt;/code&gt; is intentional. In business logic, that inference is often manageable. In deployment systems, state machines, authorization checks, schema rendering, workflow orchestration, and cloud mutation code, that inference gets expensive.&lt;/p&gt;

&lt;p&gt;The problem is not that an &lt;code&gt;if&lt;/code&gt; without an &lt;code&gt;else&lt;/code&gt; is bad.&lt;/p&gt;

&lt;p&gt;The problem is that some &lt;code&gt;if&lt;/code&gt; statements represent a fork in reality, and only one side of reality is written down.&lt;/p&gt;

&lt;p&gt;That is the "unrealized &lt;code&gt;else&lt;/code&gt;." So how do we fix it?&lt;/p&gt;

&lt;h2&gt;
  
  
  The First Bad Rule
&lt;/h2&gt;

&lt;p&gt;The obvious linter rule for the Wilson Else is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Flag every &lt;code&gt;if&lt;/code&gt; without an &lt;code&gt;else&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is also how you make everyone hate you before lunch. I mean, even before you get to the office, turn on the computer, drink coffee at the water cooler, complain about Mondays, and then decide where to go for lunch.&lt;/p&gt;

&lt;p&gt;Because this gets flagged:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;caller&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;UnauthorizedError&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;caller&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that code is good. The false branch is the rest of the function. The guard clause is explicit. It says: if this impossible or invalid condition happens, stop now. Otherwise, continue.&lt;/p&gt;

&lt;p&gt;This also gets flagged:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yes, you could write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// do nothing&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But now the code has become annoying. It is not more correct. It is just a whole lot louder and a whole lot worse.&lt;/p&gt;

&lt;p&gt;This is the lifecycle of every opinionated lint rule: the first five findings feel like moral clarity; the next ten feel like maybe we are overdoing it; and the next twenty feel like you invented paperwork, and you even start to wonder about the person who invented this--and it was yourself.&lt;/p&gt;

&lt;p&gt;A global rule against a missing &lt;code&gt;else&lt;/code&gt; is too blunt. The idea is good, because all my ideas are good. The blast radius is the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guard Clauses Are Not the Enemy
&lt;/h2&gt;

&lt;p&gt;A good rule needs to understand termination.&lt;/p&gt;

&lt;p&gt;This should be allowed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;UnauthorizedError&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;authenticate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So should this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;renderEnvironment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;phase&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;delete&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;deleteResources&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;phase&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apply&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;applyResources&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;assertNever&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;phase&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In all three examples, the edge is visible. There is no unrealized branch drifting into the next statement. The code either stops, returns, throws, or exhaustively handles the alternatives. Also, I wrote all of them, so of course they're fine.&lt;/p&gt;

&lt;p&gt;That is the heart of the rule: it is not "every &lt;code&gt;if&lt;/code&gt; needs an &lt;code&gt;else&lt;/code&gt;."&lt;/p&gt;

&lt;p&gt;It is instead:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the true branch does work and then falls through, the false branch deserves a moment of honesty.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conditional Logging Is a Separate Crime
&lt;/h2&gt;

&lt;p&gt;While experimenting with this rule, one pattern showed up immediately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;deploymentId&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Deployment started&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is usually policy leaking into the call site.&lt;/p&gt;

&lt;p&gt;The call site should say what happened:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;deploymentId&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Deployment started&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The logger should decide whether debug logs are emitted.&lt;/p&gt;

&lt;p&gt;That distinction matters. This is application logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GitHub returned a non-2xx response&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The condition changes the meaning of the event. We only want the warning if something notable happened.&lt;/p&gt;

&lt;p&gt;This is logging policy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Some debug event happened&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That condition does not describe the domain. It describes whether the program feels like talking today.&lt;/p&gt;

&lt;p&gt;A linter can detect some of this, but it should be careful. I would not autofix conditional logging unless the logging API guarantees lazy evaluation or the arguments are cheap. Still, as a smell, it is real.&lt;/p&gt;

&lt;p&gt;Call &lt;code&gt;logger.debug()&lt;/code&gt;. Configure log filtering somewhere else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ruby Has a Pressure Valve
&lt;/h2&gt;

&lt;p&gt;Ruby has a little escape hatch for this style:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s1"&gt;':'&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ends_with?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;':'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;message&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I understand why people like it. It is compact. It avoids ceremony. It says, "Make this tiny adjustment if needed, then return the value."&lt;/p&gt;

&lt;p&gt;I also hate it, not because it is unreadable--it is very readable.&lt;/p&gt;

&lt;p&gt;I hate it because the transformation and the result are split across two statements. The first line mutates the value. The second line quietly relies on Ruby's implicit return. The code has a little shrug built into it.&lt;/p&gt;

&lt;p&gt;In TypeScript, I would rather write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both outcomes are visible at the point where the value is decided.&lt;/p&gt;

&lt;p&gt;That is really what this whole argument is about. Not &lt;code&gt;else&lt;/code&gt; as a sacred keyword. Not braces for the sake of braces. The point is to make the decision visible where the decision matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Nested Case Is Where It Gets Interesting
&lt;/h2&gt;

&lt;p&gt;The first version of the linter was obnoxious.&lt;/p&gt;

&lt;p&gt;It reported hundreds of warnings. Many were technically defensible. Many were also the kind of thing that makes developers turn off rules and never look back. If we don't have an easy and defensible way to explain every single instance of the flagged code, or an autofixer for the hundreds, thousands, or possibly hundreds of thousands of instances, then we will have failed.&lt;/p&gt;

&lt;p&gt;Finally, the useful version appeared:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Only error on nested unrealized &lt;code&gt;else&lt;/code&gt; branches.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That changes everything.&lt;/p&gt;

&lt;p&gt;This is mildly suspicious:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is worse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;skipCache&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cached&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;expiresAt&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the reader is inside a decision tree. We are already in a conditional world. A nested &lt;code&gt;if&lt;/code&gt; without an &lt;code&gt;else&lt;/code&gt; forces the reader to simulate the missing path while also remembering the outer path.&lt;/p&gt;

&lt;p&gt;That is where the unrealized &lt;code&gt;else&lt;/code&gt; gets brutal.&lt;/p&gt;

&lt;p&gt;The nested version is not just a missing branch. It is a missing branch inside another branch. The mental stack is already loaded. The code should help.&lt;/p&gt;

&lt;p&gt;If the missing case is intentional, write it down:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;skipCache&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cached&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;expiresAt&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// TODO: nothing&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Is that obnoxious?&lt;/p&gt;

&lt;p&gt;Yes.&lt;/p&gt;

&lt;p&gt;Is it clear?&lt;/p&gt;

&lt;p&gt;Also yes.&lt;/p&gt;

&lt;p&gt;And the obnoxiousness is part of the point. The comment is a little accusation left in the code. It says: "We considered this branch, and for now, doing nothing is the decision."&lt;/p&gt;

&lt;h2&gt;
  
  
  Why &lt;code&gt;TODO: nothing&lt;/code&gt; Is Better Than &lt;code&gt;do nothing&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The autofix could add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// do nothing&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is polite, but too polite.&lt;/p&gt;

&lt;p&gt;I prefer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// TODO: nothing&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is funnier, but it is also more honest.&lt;/p&gt;

&lt;p&gt;"Do nothing" sounds final. It sounds like a decision.&lt;/p&gt;

&lt;p&gt;"TODO: nothing" sounds like the code knows it got away with something. It leaves a little grit in the file. It invites the next person to ask whether nothing is truly the right behavior.&lt;/p&gt;

&lt;p&gt;Maybe it is. Great. Leave it.&lt;/p&gt;

&lt;p&gt;Maybe it is not. Even better. The linter found a real design gap.&lt;/p&gt;

&lt;p&gt;The point of an autofix is not always to produce beautiful code. Sometimes the point is to make the implicit thing explicit enough that it becomes reviewable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Rule Looks Like
&lt;/h2&gt;

&lt;p&gt;The useful rule has a few constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ignore normal, unnested &lt;code&gt;if&lt;/code&gt; statements.&lt;/li&gt;
&lt;li&gt;Ignore guard clauses that terminate with &lt;code&gt;return&lt;/code&gt;, &lt;code&gt;throw&lt;/code&gt;, &lt;code&gt;break&lt;/code&gt;, or &lt;code&gt;continue&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ignore existing &lt;code&gt;else&lt;/code&gt; branches.&lt;/li&gt;
&lt;li&gt;Treat &lt;code&gt;else if&lt;/code&gt; chains as part of the same decision.&lt;/li&gt;
&lt;li&gt;Error only on nested, fallthrough &lt;code&gt;if&lt;/code&gt; statements.&lt;/li&gt;
&lt;li&gt;Autofix only those errors.&lt;/li&gt;
&lt;li&gt;Add the explicit no-op branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is much less philosophical and much more useful.&lt;/p&gt;

&lt;p&gt;Instead of hundreds of warnings, you get a smaller set of errors in places where the code is already asking the reader to keep track of multiple paths.&lt;/p&gt;

&lt;p&gt;That matters. A linter rule should not merely express taste. It should find places where taste and correctness overlap.&lt;/p&gt;

&lt;p&gt;Nested conditionals are one of those places.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Belongs
&lt;/h2&gt;

&lt;p&gt;I would not enforce this everywhere.&lt;/p&gt;

&lt;p&gt;For example, UI code often has little conditional additions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;showSubtitle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;subtitle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That does not need a Wilson Else. Please do not make frontend developers write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// TODO: nothing&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for every conditional render, unless you want them to unionize against you.&lt;/p&gt;

&lt;p&gt;But there are places where I do want this pressure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Deployment orchestration&lt;/li&gt;
&lt;li&gt;Cloud resource deletion&lt;/li&gt;
&lt;li&gt;Schema generation&lt;/li&gt;
&lt;li&gt;State machines&lt;/li&gt;
&lt;li&gt;Workflow transitions&lt;/li&gt;
&lt;li&gt;Billing logic&lt;/li&gt;
&lt;li&gt;Cleanup jobs&lt;/li&gt;
&lt;li&gt;Security-sensitive routing&lt;/li&gt;
&lt;li&gt;Anything that mutates infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these areas, the cost of being explicit is smaller than the cost of assuming everyone reads your mind.&lt;/p&gt;

&lt;p&gt;Deployment code especially benefits from this. Deployments are full of phases: create, apply, patch, delete, rollback, cleanup, skip, and retry. Missing one branch can leave stale resources behind or apply a thing that should have been deleted.&lt;/p&gt;

&lt;p&gt;A nested unrealized &lt;code&gt;else&lt;/code&gt; in deployment code is rarely just style. It is often a question the code forgot to answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rule Is a Flashlight, Not a Religion
&lt;/h2&gt;

&lt;p&gt;This is where engineering judgment matters.&lt;/p&gt;

&lt;p&gt;The rule is not saying every condition needs ceremony. It is saying some conditions create unspoken behavior, and unspoken behavior is where bugs like to live.&lt;/p&gt;

&lt;p&gt;The rule is a flashlight.&lt;/p&gt;

&lt;p&gt;Run it. Look at the findings. Decide whether the code is missing an actual branch or whether the branch is intentionally empty.&lt;/p&gt;

&lt;p&gt;If it is intentionally empty, the autofix gives you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// TODO: nothing&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that makes the code look ridiculous, maybe the rule is too aggressive for that file.&lt;/p&gt;

&lt;p&gt;If it makes the code look safer, maybe the code was relying on vibes.&lt;/p&gt;

&lt;p&gt;This is the sweet spot for custom linting. Not a universal mandate. A local pressure tool for a codebase with known failure modes.&lt;/p&gt;

&lt;p&gt;The best lint rules are born from irritation. Not abstract best practice. Not "some famous person said never do this." Real irritation. A pattern keeps showing up in real code and making real review harder.&lt;/p&gt;

&lt;p&gt;The Wilson Else came from that kind of irritation. Eventually, I hope that review comments on complex platform codebases will include lines like, "Check your unrealized &lt;code&gt;else&lt;/code&gt; here," and "I think this needs a Wilson Else."&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters More in Platform Code
&lt;/h2&gt;

&lt;p&gt;Platform code is different from product code.&lt;/p&gt;

&lt;p&gt;Product code can often fail visibly. A button does not work. A page renders incorrectly. A request returns a bad response. The feedback loop is painful but obvious.&lt;/p&gt;

&lt;p&gt;Platform code can fail quietly.&lt;/p&gt;

&lt;p&gt;A cleanup branch does not run. A stale DNS record stays alive. A deleted service still has a policy attached. A deployment applies after a delete. A cache is invalidated in one path but not another. A permission check falls through and relies on a default nobody remembers.&lt;/p&gt;

&lt;p&gt;These are exactly the places where "nothing happens" should be a written decision.&lt;/p&gt;

&lt;p&gt;Platform systems accumulate invisible state. The code is not just transforming data. It is coordinating reality outside the process: clusters, cloud APIs, databases, environments, routes, secrets, service accounts, jobs, controllers, and retries.&lt;/p&gt;

&lt;p&gt;When code like that has a nested conditional, every missing branch is a tiny operational assumption.&lt;/p&gt;

&lt;p&gt;Write the assumption down.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Wilson Else, in Human Form
&lt;/h2&gt;

&lt;p&gt;Here is the rule in human form:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A nested &lt;code&gt;if&lt;/code&gt; that falls through without an &lt;code&gt;else&lt;/code&gt; must either become a guard clause, handle the alternative, or explicitly say that nothing happens.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the Wilson Else.&lt;/p&gt;

&lt;p&gt;It is a little obnoxious. Good.&lt;/p&gt;

&lt;p&gt;It is not for every line of code. Also good.&lt;/p&gt;

&lt;p&gt;It is fixable, unlike its author. Very good.&lt;/p&gt;

&lt;p&gt;The autofix is intentionally plain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// TODO: nothing&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can hate it. You are supposed to hate it a little. That is how you know the linter is applying pressure.&lt;/p&gt;

&lt;p&gt;The trick is to apply pressure in the right place.&lt;/p&gt;

&lt;p&gt;Too broad, and the rule becomes noise.&lt;/p&gt;

&lt;p&gt;Too narrow, and it never catches anything.&lt;/p&gt;

&lt;p&gt;Nested-only feels like the right starting point. It catches the places where the reader is already inside a branch and the missing alternative is most likely to cause confusion.&lt;/p&gt;

&lt;p&gt;That is not a manifesto.&lt;/p&gt;

&lt;p&gt;That is a useful annoyance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Am Actually Proposing
&lt;/h2&gt;

&lt;p&gt;The Wilson Else is not yet a rule I can prove that anyone should enforce. It is a name for a recurring review problem and a deliberately crude instrument for making that problem visible.&lt;/p&gt;

&lt;p&gt;The instrument may be wrong. Nested conditionals may be too weak a proxy. &lt;code&gt;TODO: nothing&lt;/code&gt; may be the wrong marker. The useful signal may instead be some combination of external effects, mutation, fallthrough, and incomplete state transitions. An autofix also cannot prove that a human considered the false path; at most, it can put that path in front of one.&lt;/p&gt;

&lt;p&gt;That is why I am publishing the rule. I want to find out whether like-minded people encounter the same problem, whether its findings survive contact with real code, and whether someone has a more precise solution.&lt;/p&gt;

&lt;p&gt;A reasonable experiment would be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run the rule in report-only mode on platform code.&lt;/li&gt;
&lt;li&gt;Classify each finding as harmless accumulation, intentional no-op, unclear intent, or genuine defect.&lt;/li&gt;
&lt;li&gt;Record what distinguished useful findings: nesting, side effects, mutation, domain, or something else.&lt;/li&gt;
&lt;li&gt;Refine the rule around those observations--or discard it if there is no reliable signal.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the experiment produces nothing but ceremony, that is an answer. If it identifies a recurring class of omitted decisions, then the obnoxious prototype has done its job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Most code-style arguments are boring because they pretend to be about beauty when they are actually about risk.&lt;/p&gt;

&lt;p&gt;The Wilson Else is not beautiful. An autofixed &lt;code&gt;else { /* TODO: nothing */ }&lt;/code&gt; block is not going to win any poetry contests. It might even make you angry the first time you see it.&lt;/p&gt;

&lt;p&gt;But it does something valuable: it turns an implicit path into an explicit artifact.&lt;/p&gt;

&lt;p&gt;Now the reviewer can ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is nothing really correct here?&lt;/li&gt;
&lt;li&gt;Should this be a guard clause?&lt;/li&gt;
&lt;li&gt;Should this be an &lt;code&gt;else if&lt;/code&gt; chain?&lt;/li&gt;
&lt;li&gt;Should this throw?&lt;/li&gt;
&lt;li&gt;Should this return?&lt;/li&gt;
&lt;li&gt;Did we forget a deployment phase?&lt;/li&gt;
&lt;li&gt;Did we forget a cleanup path?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the whole game.&lt;/p&gt;

&lt;p&gt;Software does not need more rules for the sake of rules. It needs better ways to expose assumptions before they become incidents.&lt;/p&gt;

&lt;p&gt;The Wilson Else might be one of those ways. For now, it is a proposal, a probe, and an invitation to improve the idea.&lt;/p&gt;

&lt;p&gt;Let the h8rs h8.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Scholarly View--and the Strongest Cases on Both Sides
&lt;/h2&gt;

&lt;p&gt;The Wilson Else can be understood as a small intervention in &lt;strong&gt;cognitive complexity&lt;/strong&gt;. McCabe's classic work on cyclomatic complexity counts independent paths through a program; later work on cognitive complexity asks how difficult those paths are for a human to hold in mind. A nested, one-sided conditional adds a path while leaving one outcome implicit. The rule's strongest intellectual case is therefore not that an &lt;code&gt;else&lt;/code&gt; is inherently virtuous, but that high-risk code should externalize decisions that would otherwise live only in the reader's working memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steelman: the case for the rule
&lt;/h3&gt;

&lt;p&gt;The strongest case for the Wilson Else is in stateful, side-effecting systems. In deployment, authorization, billing, and cleanup code, inaction is often an observable policy choice. An explicit no-op branch exposes that choice for review, though it cannot by itself prove that the author considered it. Scoped to nested conditionals, the rule also targets code where readers already bear a higher cognitive load, rather than taxing every ordinary conditional.&lt;/p&gt;

&lt;p&gt;The rule may also improve maintenance as a form of lightweight design pressure. If &lt;code&gt;// TODO: nothing&lt;/code&gt; looks absurd, that discomfort can reveal that the conditional should instead be flattened, returned from early, expressed as an exhaustive state transition, or decomposed into a named function. In this steelman, the awkward autofix is diagnostic rather than stylistic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steelman: the case against the rule
&lt;/h3&gt;

&lt;p&gt;The strongest objection is that explicit syntax is not the same as explicit understanding. An empty &lt;code&gt;else&lt;/code&gt; can become ritualized noise, and an autofixed comment may falsely imply that a human considered the branch. Worse, &lt;code&gt;TODO: nothing&lt;/code&gt; can manufacture permanent, unactionable debt. Readers may spend more effort filtering boilerplate than reasoning about behavior--the very cognitive cost the rule intends to reduce.&lt;/p&gt;

&lt;p&gt;There is also a semantic limitation. Syntactic nesting is only a proxy for risk. A deeply nested pure-data transformation may be harmless, while a top-level one-sided conditional that deletes production resources may be critical. Likewise, correctly deciding whether a branch terminates requires control-flow analysis; a syntax-only approximation can misclassify helper calls, exceptions, labeled breaks, loops, and language-specific constructs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Most charitable view
&lt;/h3&gt;

&lt;p&gt;The most defensible form of the Wilson Else is therefore not "every missing &lt;code&gt;else&lt;/code&gt; is a defect." It is: &lt;strong&gt;in code where omitted action carries operational meaning, make the omission reviewable&lt;/strong&gt;. That narrower claim preserves the idea's practical force while taking its critics seriously.&lt;/p&gt;

&lt;p&gt;Further research on this topic and design in an existing or new programming language (especialy in the era of AI coders) maybe be fruitful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Appendix: Photo source
&lt;/h2&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@sophiakunkel?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Sophia Kunkel&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/two-red-and-white-signs-hanging-from-a-metal-pole-cqH4_fBvVPg?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Appendix: Experimental ESLint Rule
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// SPDX-License-Identifier: MIT&lt;/span&gt;
&lt;span class="c1"&gt;// Copyright (c) 2026 We, The People&lt;/span&gt;

&lt;span class="cm"&gt;/**
 * Experimental rule to flag if statements that handle the true branch and then
 * fall through without saying what the false branch means.
 */&lt;/span&gt;

&lt;span class="cm"&gt;/** @type {import('eslint').Rule.RuleModule} */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LOGGER_METHODS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;trace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;debug&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;info&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;warn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fatal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rule&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;suggestion&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;flag if statements with fallthrough true branches and no explicit else&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;recommended&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;fixable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;all&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nested&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="na"&gt;conditionalLogging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;boolean&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;additionalProperties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;unrealizedElse&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Unrealized else: this if handles only the true branch and then continues. Add an else, return early, or leave an explicit false-case marker.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;conditionalLogging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Conditional logging: call logger.{{method}}() directly and configure log filtering in the logger.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sourceCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getSourceCode&lt;/span&gt;&lt;span class="p"&gt;?.();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;all&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;conditionalLogging&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;conditionalLogging&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ifStatementStack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;checkIfStatement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isNested&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;alternate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;statementAlwaysTerminates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;consequent&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;hasExplicitFalseCaseMarker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nested&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isNested&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loggerMethod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getOnlyLoggerMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;consequent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loggerMethod&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;conditionalLogging&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;isLoggingPolicyCheck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;messageId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;conditionalLogging&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;loggerMethod&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;messageId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;unrealizedElse&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nf"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fixer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;

          &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLastToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;consequent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;

          &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;indent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNodeIndent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;fixer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertTextAfter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;` else {\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;indent&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  // TODO: nothing\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;indent&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;}`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;IfStatement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isNested&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;isNestedIfStatement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ifStatementStack&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;ifStatementStack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;checkIfStatement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isNested&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;IfStatement:exit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;ifStatementStack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;statementAlwaysTerminates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ReturnStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ThrowStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ContinueStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BreakStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BlockStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
        &lt;span class="nf"&gt;statementAlwaysTerminates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;IfStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;alternate&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="nf"&gt;statementAlwaysTerminates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;consequent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="nf"&gt;statementAlwaysTerminates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;alternate&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;TryStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;finalizer&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;statementAlwaysTerminates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;finalizer&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nf"&gt;statementAlwaysTerminates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="nf"&gt;statementAlwaysTerminates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getOnlyLoggerMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expressionStatement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getOnlyExpressionStatement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;expressionStatement&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expression&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;expressionStatement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CallExpression&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MemberExpression&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;computed&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Identifier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;logger&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Identifier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;LOGGER_METHODS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isLoggingPolicyCheck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Identifier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;debug|verbose&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;$/iu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MemberExpression&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Identifier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;debug|verbose|is&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;Debug|Trace|Info|Warn|Error|Fatal|Verbose&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;Enabled&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;$/u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CallExpression&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;callee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Identifier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;is&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;Debug|Trace|Info|Warn|Error|Fatal|Verbose&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;Enabled&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;$/u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MemberExpression&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Identifier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;isLevelEnabled|is&lt;/span&gt;&lt;span class="se"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;Debug|Trace|Info|Warn|Error|Fatal|Verbose&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;Enabled&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="sr"&gt;$/u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getOnlyExpressionStatement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ExpressionStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BlockStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;onlyStatement&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;onlyStatement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ExpressionStatement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;onlyStatement&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;hasExplicitFalseCaseMarker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;comments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getCommentsBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getCommentsAfter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\b(&lt;/span&gt;&lt;span class="sr"&gt;no-unrealized-else|unrealized else|false case|else intentionally omitted|intentionally no else&lt;/span&gt;&lt;span class="se"&gt;)\b&lt;/span&gt;&lt;span class="sr"&gt;/iu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getNodeIndent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lineStartIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lastIndexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;linePrefix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lineStartIndex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;linePrefix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="sr"&gt;*/u&lt;/span&gt;&lt;span class="p"&gt;)?.[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isNestedIfStatement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ancestorIfStatements&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ancestorIfStatements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;ancestor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ancestor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;alternate&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;unrealized-else&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;rule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Appendix: ESLint Configuration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// SPDX-License-Identifier: MIT&lt;/span&gt;
&lt;span class="c1"&gt;// Copyright (c) 2026 We, The People&lt;/span&gt;

&lt;span class="c1"&gt;// @ts-check&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;tseslint&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;typescript-eslint&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;unrealizedElse&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./eslint-rules/unrealized-else.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;ignores&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/lib/schemas/k8s_kinds/v1.29.7-standalone-strict/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/generated/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/test/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/**/*.test.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*.test.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;linterOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;reportUnusedDisableDirectives&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;off&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/**/*.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;languageOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tseslint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;parserOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;ecmaVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;latest&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;sourceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;module&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="cm"&gt;/** @type {Record&amp;lt;string, any&amp;gt;} */&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;unrealized-else&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unrealizedElse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;unrealized-else/unrealized-else&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nested&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;conditionalLogging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Disclosure and Licensing
&lt;/h2&gt;

&lt;p&gt;This article was co-written with generative AI. The author supplied the central idea, examples, code, arguments, and editorial direction; AI assisted with organization, light copyediting, Markdown conversion, counterarguments, and refinement. The author reviewed and takes responsibility for the published result.&lt;/p&gt;

&lt;p&gt;Unless otherwise noted, the original code examples in this article are offered under the &lt;a href="https://opensource.org/license/mit" rel="noopener noreferrer"&gt;MIT License&lt;/a&gt;. The prose and other non-code material are not included in that code license. Third-party packages and APIs mentioned or imported by the examples remain subject to their own licenses. This notice is provided for clarity and is not legal advice.&lt;/p&gt;

&lt;p&gt;Full MIT License for the original code examples&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MIT License

Copyright (c) 2026 We, The People

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>programming</category>
      <category>coding</category>
    </item>
    <item>
      <title>The Neo Fermi/Wilson AI Paradox</title>
      <dc:creator>Regis Wilson</dc:creator>
      <pubDate>Fri, 28 Aug 2026 23:25:17 +0000</pubDate>
      <link>https://dev.to/regis-ud/the-neo-fermiwilson-ai-paradox-3oln</link>
      <guid>https://dev.to/regis-ud/the-neo-fermiwilson-ai-paradox-3oln</guid>
      <description>&lt;p&gt;The original Fermi paradox asks:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;If intelligent alien civilizations should be abundant, where is everybody?&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The Neo-Fermi/Wilson paradox asks:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;If AI is producing enormous quantities of excellent software, where is all the excellent software?&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We are told that implementation has been transformed: agents write code, discover defects, review changes, operate continuously, preserve memory, evaluate one another, and improve the factories that produce still more agents and software.&lt;/p&gt;

&lt;p&gt;Yet the visible world remains curiously familiar. We use largely the same products, through largely the same interfaces, to perform largely the same tasks—now surrounded by more code, automation, observability, governance, tickets, and electricity consumption.&lt;/p&gt;

&lt;p&gt;This does not prove that AI produces no value. It asks where the claimed abundance becomes observable as outcomes rather than activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steelmen and Straw Retorts
&lt;/h2&gt;

&lt;p&gt;The steelmen are serious arguments. The retorts are deliberately unfair, compressed, and argumentative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Invisible improvement&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
The new software is everywhere, but most of its value is invisible. Existing systems are becoming more reliable, secure, maintainable, performant, and efficient. Users do not notice successful infrastructure; they notice only failures.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
Is it, though?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Tools before products&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
We are building the tools that will enable the next wave of software. Foundational technologies arrive before their most important applications. Better agents, evals, memory, orchestration, and software factories are necessary infrastructure, even if their eventual products are not yet visible.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
We have been building the tools that will build the tools that will build the next wave since 2022. It is now at least 2026. At what point does a wave have to contain water?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Silent compounding&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
AI is making everything incrementally better: development is faster, incidents are diagnosed sooner, systems are optimized more aggressively, and small usability improvements accumulate across the economy. No single change looks revolutionary because the benefits are distributed and continuous.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
That must be why GitHub keeps crashing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The growing iceberg&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
The visible product is only the tip of the iceberg. Beneath an unchanged interface is a rapidly expanding industrial base: generators, agents, tests, deployment systems, security controls, observability, and automated remediation. The visible tip can remain stable while the supporting capability grows enormously.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
We rebuilt it in Rust. The product is exactly the same; the iceberg is ten times larger and will now grow a thousand times faster. With type and memory safety and more AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. The automobile analogy&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
Early cars were slow, inefficient, unreliable, and lethal. Modern cars may look conceptually similar: four wheels, seats, and a steering wheel; but they travel comfortably at highway speed, achieve far better fuel economy, and protect their occupants. Transformative progress can become invisible once people normalize it. Software may be improving in the same way.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
So we still watch cat videos, but now the data centre uses ten times as much electricity to recommend the next one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Product, not implementation, is the bottleneck&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
AI may have substantially reduced the cost of implementation without solving product discovery. Humans and institutions cannot instantly invent, understand, adopt, regulate, or monetize entirely new software categories. Users prefer familiar interfaces and workflows, while businesses must compete within markets already shaped by incumbents. The bottleneck has moved from writing software to deciding what should exist.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
So implementation is solved, but civilization failed to provide a sufficiently imaginative backlog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Organizational absorption takes time&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
Even when the technology works, organizations need years to change processes, incentives, staffing, architecture, procurement, and regulation. Electricity and computers also took decades to reorganize industry. Measuring AI’s effect before institutions have adapted will understate its eventual importance.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
The revolution is complete except for all the places where reality would reveal it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Output is being consumed internally&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
Much of the new software is not a public product. It handles migrations, compliance, testing, support, fraud, analytics, internal operations, and countless organization-specific tasks. These systems create real economic value without appearing in an app store or changing a consumer interface.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
The missing great software became paperwork about the great software. And the documentation about the paperwork is being read and reviewed by AI documentation preparers who write the paperwork.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Factory administration is legitimate production&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
Automating the software factory is not empty recursion. Better monitoring, evaluation, cost control, and remediation make every later product cheaper and safer. Industrial revolutions require machine tools, standards, logistics, and quality control—not merely finished consumer goods.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
“What does your software factory produce?”&lt;br&gt;
“Software factories.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Demand expands with supply&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
Cheaper software does not necessarily reduce spending or complexity. Jevons-style effects mean that when implementation becomes cheaper, organizations attempt more projects, add more features, and automate previously neglected work. The result can be much more software without a proportionate reduction in cost or headcount.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
Everything is more. Victory has been declared over the absence of less.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. Quality is improving faster than expectations&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
Users continually raise their expectations. Yesterday’s impressive speed, availability, personalization, and polish become today’s baseline. AI-generated improvements may be real but hidden by an expanding definition of acceptable software.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
The software is getting better at exactly the rate required to remain disappointing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. We are looking in the wrong place&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
The important applications may not resemble traditional software products. AI could be transforming scientific research, logistics, chip design, medicine, finance, and operations while public attention remains fixed on websites and chat interfaces.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
The aliens are definitely here; they just work in internal tooling and cannot be shown because of an NDA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. The one that will get me fired&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Steelman:&lt;/em&gt;&lt;br&gt;
With fewer people, we can still perform the same valuable work. That frees human time and creativity for family, art, community, and the American ideals of life, liberty, and the pursuit of happiness.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Straw retort:&lt;/em&gt;&lt;br&gt;
Everything except the life, liberty, dignity, income, structure, community, and occasional joy of having a job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cosmic Version
&lt;/h2&gt;

&lt;p&gt;The strongest product-bottleneck defense creates a pleasing extension of the original Fermi paradox:&lt;/p&gt;

&lt;p&gt;Perhaps every alien civilization develops interstellar travel, looks around, sees nobody at home, and leaves to search for everyone else. Each civilization eventually arrives at another civilization’s planet only to discover that its inhabitants also departed to look for aliens.&lt;/p&gt;

&lt;p&gt;The galaxy is not empty. Everyone is out at Marks and Sparks.&lt;/p&gt;

&lt;p&gt;Likewise, perhaps the great AI-generated software exists, but all of it is busy building tools, factories, evals, agents, and observability for the next generation of great software. Every factory is operational. Every loop is closed. Every agent is improving another agent.&lt;/p&gt;

&lt;p&gt;Nobody stayed home to make a chair.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Notice that none of these steelmen can simply say: “Here: here is one piece of genuinely great software produced by AI. You can see it, use it, and judge the result for yourself.” Every defense instead relocates the evidence: beneath the interface, inside the organization, somewhere in the infrastructure, still compounding, awaiting adoption, or building the factory that will eventually produce it. Perhaps those explanations are true. But their necessity is the paradox.&lt;/p&gt;

&lt;p&gt;The paradox is not answered by code volume, agent activity, token consumption, pull-request throughput, or the number of autonomous loops. It is answered by observable outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;capabilities that did not previously exist;&lt;/li&gt;
&lt;li&gt;products that small teams could not previously build;&lt;/li&gt;
&lt;li&gt;substantial reductions in cost, latency, or failure rates;&lt;/li&gt;
&lt;li&gt;materially better user experiences;&lt;/li&gt;
&lt;li&gt;scientific or operational results achieved faster;&lt;/li&gt;
&lt;li&gt;and software that people voluntarily adopt because it improves their lives.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Until those outcomes become commensurate with the claims, the question remains:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;If the software factory is producing so much excellent software, where is it all?&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Human note: AI wrote this after several rounds of steelman arguments and strawman retorts, most of which I conceived and answered myself. This is not an ironic disclaimer; irony would require it to mean the opposite. It is simply the mundane truth of how the piece was produced. So the first clearly visible product of great AI software is persuasive copy explaining why its other products remain invisible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@franku84?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Vadim Bogulov&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/grey-box-in-empty-wallpapered-room-veSRX0sZDpQ?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>automation</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>AWS Outpost and RDS: Reslotting Checklist</title>
      <dc:creator>Regis Wilson</dc:creator>
      <pubDate>Fri, 26 Jul 2024 00:35:48 +0000</pubDate>
      <link>https://dev.to/underdogsports/aws-outpost-and-rds-reslotting-checklist-4o0j</link>
      <guid>https://dev.to/underdogsports/aws-outpost-and-rds-reslotting-checklist-4o0j</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;At Underdog, we use Amazon Web Services’ (AWS) Relational Database Service (RDS) and Elastic Kubernetes Service (EKS) (among many other services) to power our sports betting applications. Most readers will be readily familiar with these services and if you aren’t, I will explain most of the terms and technologies briefly as we go. What will be different about this post is a recent AWS service we’ve been using in conjunction with these two (RDS and EKS) called AWS Outpost.&lt;/p&gt;

&lt;p&gt;In order to meet United States state gaming regulations and requirements, we use Outpost to meet data and application security residency requirements in particular states where we operate. Outpost is great for delivering compute and storage services close to a region where we operate that might be outside of Amazon’s many regional centers.&lt;/p&gt;

&lt;p&gt;This post will detail some of the challenging aspects of running and operating these services that we had recently and hope that the experience will enlighten you, the dear reader, if you ever need to venture down this road in the future. If you are already familiar with configuring and operating these services together, you might also enjoy reading it with the pleasure and satisfaction of &lt;em&gt;schadenfreude&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Regions and Outpost
&lt;/h2&gt;

&lt;p&gt;If you are unfamiliar with Outpost (as I was initially), you may wonder what the service is and why Underdog chose to use it. In simple terms, you may already know that AWS regions are spread across the globe in various countries to offer services that are close to major population centers so that AWS’ cloud services can be placed closest to the most consumers. Inside each country, as in the United States, there are several regions located inside several states, for example Virginia (us-east-1), Ohio (us-east-2), and Oregon (us-west-2), among others.&lt;/p&gt;

&lt;p&gt;What happens if Underdog wants to operate services inside a state that is not listed as an AWS region but, never-the-less, wants to collocate cloud services within the borders of a particular state? There are many options to independently host our own hardware and networking gear, but we wanted to continue to enjoy the automation and speed of deploying Infrastructure as a Service (IAAS) via Application Programming Interfaces (APIs) and so-called Infrastructure as Code (IAC). This is where the promise of AWS Outpost comes into play.&lt;/p&gt;

&lt;p&gt;With AWS Outpost, customers like us can order capacity from AWS and deploy it into the hosting facility of our choice, along with connectivity from AWS Direct Connect or VPN services to provide a regionally-located service in a particular location that we need to operate in. While the capacity for Outpost is inherently limited, and also is not “instantly” deployable or provisioned like other services, at least we do not need to directly manage infrastructure, networking, security, or software ourselves. Also, any services that are provisioned inside the Outpost will be managed by the same AWS APIs and dashboards that we are already using. Most importantly, the resources inside the Outpost can be shared by our staging and production AWS accounts and Virtual Private Clouds (VPCs) in a relatively seamless and integrated way to operate from a location outside an established AWS region.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Familiar With Outpost
&lt;/h2&gt;

&lt;p&gt;As with all AWS services, it is important to know what the services’ strengths, weaknesses and limitations are. It is also important to understand how one or more services may (or may not) interoperate together! This is where the majority of our problems originated as we went into provisioning our applications in a remote environment. In terms of provisioning Elastic Cloud Compute (EC2) services that we can use as nodegroups in EKS, this is a relatively understood solution and works well with Outpost configurations. What isn’t as directly easy to understand or configure was the RDS integration with Outpost and we ran into issues with some basics like choosing instance sizes and using instances in Outpost with RDS.&lt;/p&gt;

&lt;p&gt;The first issue we encountered initially was choosing the correct capacity and sizing of instances for both compute and RDS instances. If you are spoiled by AWS’ amazing depth and breadth of instance sizes, architectures, and variety, you will need to reorganize your thinking around a fixed set of capacity and architecture limitations for your Outpost racks and/or servers. As an example, let’s say that you have one &lt;a href="https://aws.amazon.com/outposts/rack/hardware-specs/" rel="noopener noreferrer"&gt;rack&lt;/a&gt; with 4 each &lt;code&gt;m5.24xlarge&lt;/code&gt; “raw” capacity. You could subdivide that capacity as you saw fit, let’s say that you started conservatively (as we did) with way too large of instance sizes as 8 each &lt;code&gt;m5.12xlarge&lt;/code&gt; instances, spread across staging, production, RDS, and EKS as follows (please note all drawings are for illustrative purposes only and should not be relied upon for factual reference):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fader3b58mtn92rji48r1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fader3b58mtn92rji48r1.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This seemed like a reasonable starting point for us and would allow us plenty of capacity and resources to operate without worrying about needing more vertical scaling capacity. With this setup, we were able to successfully launch services relatively quickly and simply, all options considered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Right Size Scaling
&lt;/h2&gt;

&lt;p&gt;If you are familiar with AWS services, you may now be thinking to yourself, as we later did, “Whoah, this seems like a lot of capacity to use for RDS and EKS!” The truth is that if we had more time, insight, and experience, we might have been able to come up with a much better provisioning scheme to right-size the capacity for each use case. The engineering issue isn’t so much the large over-allocation of capacity (which is a concern), but rather the operational downstream issues such as having spare capacity, being able to migrate or upgrade services and versions, and being able to scale horizontally (instead of vertically) as needed to meet demands.&lt;/p&gt;

&lt;p&gt;After some post-launch issues were settled, we analyzed the data and came up with a much more reasonable allocation scheme that would suit our needs now and in the future. We settled on something that looked more like the following drawing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvlh0jmho99o0l6lakry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvlh0jmho99o0l6lakry.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will notice that we have much more reasonably-sized (but still beefy) &lt;code&gt;m5.8xlarge&lt;/code&gt; RDS databases. We also have enough capacity to add more RDS replicas (or new primaries even), and plenty of application-worthy EKS worker nodes for redundancy and failover. Not only that, but we now have way more free “spare” capacity for future needs as either smaller RDS databases or as beefier EKS workloads emerge.&lt;/p&gt;

&lt;p&gt;Armed with this new information we let our AWS representatives know about our plans and future configuration. We had a pretty good idea of the plan of operations and had laid out a strategy for performing the changes “in place” with a reasonable amount of downtime during a maintenance window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Laid Plans of Mice and Men
&lt;/h2&gt;

&lt;p&gt;Experts in RDS and Outpost may already see the issue we were going to find ourselves faced with and will be chuckling to themselves, but this was the original plan we were going to follow to migrate from the original configuration to the new capacity configuration. We had consciously chosen the shortest amount of time that the maintenance window would occur to re-slot the entire Outpost rack in one window without causing undue issues affecting both staging and production. We did not have multiple Outpost racks available to work with; but this is something we definitely will consider in the future.&lt;/p&gt;

&lt;p&gt;See if you can spot the issue:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Initiate downtime maintenance window in the application by shutting down all application services and issuing maintenance page notifications&lt;/li&gt;
&lt;li&gt;Temporarily stop staging RDS instances and EKS worker nodes&lt;/li&gt;
&lt;li&gt;Take snapshots for disaster recovery purposes&lt;/li&gt;
&lt;li&gt;Temporarily stop production RDS instances and EKS worker nodes&lt;/li&gt;
&lt;li&gt;Take snapshots for disaster recovery purposes&lt;/li&gt;
&lt;li&gt;AWS support will apply new Outpost reslotting configuration&lt;/li&gt;
&lt;li&gt;Restart staging and production RDS instances with new sizes&lt;/li&gt;
&lt;li&gt;Restart staging and production EKS worker nodes and join to clusters&lt;/li&gt;
&lt;li&gt;Test and validate the applications&lt;/li&gt;
&lt;li&gt;End the maintenance window and allow normal operations&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you spotted the issue in step 7 labeled “restart staging and production RDS instances”, congratulations! For everyone else, you can follow along and learn from our experience when you attempt to do this yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Can't Modify a Stopped DB Instance.
&lt;/h2&gt;

&lt;p&gt;This statement from the AWS documentation should be tattooed on the forehead of any AWS RDS practitioner – in reverse so that they can read it in the mirror. Or, perhaps, both forward and reverse for people who look at the tattoo and for themselves looking at it in the mirror. The issue we immediately faced as we tried to start the new instances was that the previous &lt;code&gt;db.m5.12xlarge&lt;/code&gt; instances were not available any more in our Outpost configuration, so we could not start the RDS instances. We also could not convert the instances into the new &lt;code&gt;db.m5.8xlarge&lt;/code&gt; instances sizes that did exist in the new configuration since the databases were shut down!!&lt;/p&gt;

&lt;p&gt;I’m not exaggerating too much when I say that I briefly considered the fact that we had made a fatal mistake and were going to be down in production for hours doing a disaster recovery at this point. It is very important in these situations not to panic but to stay calm, talk through your options, and decide on a safe course of corrective actions.&lt;/p&gt;

&lt;p&gt;Fortunately, we had the following in our favor, which you should also have at your disposal if you attempt anything like this. We made sure we had an AWS representative and AWS support people on the call while our maintenance window was active and the team on our side were engaged. This enabled us to get real time feedback on the reslotting process, get answers to RDS and Outpost answers from AWS, and also (critically) allowed us to reconfigure the capacity online while we were in the midst of trying to salvage our operations. If you do not have enterprise support, then you will most likely not be able to resolve a situation like this. Nor should you even attempt to do something like this without enterprise support obviously.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure is Not an Option
&lt;/h2&gt;

&lt;p&gt;We quickly broke out our calculators, slide rulers, and pocket pens to come up with an emergency configuration that would enable us to start both &lt;code&gt;db.m5.12xlarge&lt;/code&gt; and &lt;code&gt;db.m5.8xlarge&lt;/code&gt; target instance capacity &lt;em&gt;at the same time&lt;/em&gt;. It was like that scene in &lt;em&gt;Apollo 13&lt;/em&gt; where Ed Harris says that we’ve never lost a database in the cloud and we were going to use everything at our disposal to figure out a solution. We were able to come up with the following configuration to solve our issue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6st31soqh1gk700lbeuq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6st31soqh1gk700lbeuq.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fortunately, we had enough of the “spare” capacity to configure as RDS interim instances. Later on, AWS could then reslot the unused capacity back into our spare capacity as needed. There was a huge sigh of relief as the configuration was reslotted and the databases were started, modified to new instance sizes, then rebooted as the correct target instance size!&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In summary, we learned quite a bit and hope that you have too, if you have any plans for Outpost capacity in your future. In no particular order these lessons are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always plan, check your plan, recheck your plan, and have a backup plan&lt;/li&gt;
&lt;li&gt;Always work closely with your AWS support and representatives to avoid problems like this if you can, and have them available when you need them in advance&lt;/li&gt;
&lt;li&gt;Always stay calm and consider your options. Stick to the plan but react appropriately when circumstances change&lt;/li&gt;
&lt;li&gt;Read your documentation and pay close attention to every detail as it impacts your planned path&lt;/li&gt;
&lt;li&gt;When migrating capacity, ensure enough spare capacity is available both before, during, and after your migration plans&lt;/li&gt;
&lt;li&gt;Use multiple phases of the migration plan where possible; consider initial phases, interim phases, and final phases&lt;/li&gt;
&lt;li&gt;Please, please, please give your AWS support people and representatives a big show of appreciation for their hard work, dedication, and help!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  About the Author
&lt;/h3&gt;

&lt;p&gt;Regis is a staff platform engineer at Underdog. He has designed, built, and operated cloud-native architectures since 2015.&lt;/p&gt;

&lt;h3&gt;
  
  
  We're Hiring!
&lt;/h3&gt;

&lt;p&gt;If you want to work on exciting projects like these with exciting people like me, please check out our &lt;a href="https://underdogfantasy.com/careers" rel="noopener noreferrer"&gt;hiring page&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Image Credit
&lt;/h3&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@tdederichs?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Torsten Dederichs&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/multicolored-direction-signage-beside-black-shed-5bokmbXK6vA?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awsrds</category>
      <category>awsoutpost</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
