<?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>Forem: Duplessis van Aswegen</title>
    <description>The latest articles on Forem by Duplessis van Aswegen (@duplessisvanaswegen).</description>
    <link>https://forem.com/duplessisvanaswegen</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1422438%2F16255537-b055-4f71-a97f-351635ba1462.jpeg</url>
      <title>Forem: Duplessis van Aswegen</title>
      <link>https://forem.com/duplessisvanaswegen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/duplessisvanaswegen"/>
    <language>en</language>
    <item>
      <title>Don’t Worship the Toaster (and Other Rules for Using AI Without Losing Agency)</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Mon, 29 Dec 2025 17:26:04 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/dont-worship-the-toaster-and-other-rules-for-using-ai-without-losing-agency-42al</link>
      <guid>https://forem.com/duplessisvanaswegen/dont-worship-the-toaster-and-other-rules-for-using-ai-without-losing-agency-42al</guid>
      <description>&lt;p&gt;We now live in a world where an absurd amount of stuff can be generated on demand. Text, images, music, plans, arguments, mockups, and enough “options” to make the concept of a single coherent identity feel like a premium feature you forgot to renew.&lt;/p&gt;

&lt;p&gt;The cost of producing a thing has collapsed. That part is no longer controversial. The only people still arguing about it are either selling something, regulating something, or trapped in a meeting where everyone says “paradigm shift” like it’s a prayer.&lt;/p&gt;

&lt;p&gt;The obvious conclusion is that creation no longer matters.&lt;/p&gt;

&lt;p&gt;That conclusion is wrong, in the way it’s wrong to conclude that because bread is cheap, sandwiches are meaningless. Bread isn’t the problem. The problem is the horrifying number of sandwiches that now exist, many of which are trying to be your personality.&lt;/p&gt;

&lt;p&gt;When supply gets close to unbounded, value doesn’t disappear. It migrates. Upstream. Into the part that decides what’s worth keeping.&lt;/p&gt;

&lt;p&gt;Generation is cheap. Judgment is still expensive. And somehow we keep trying to pay for judgment with vibes.&lt;/p&gt;

&lt;p&gt;I’ve found it useful, for my own sanity, to think about AI in two broad modes. Not because the universe demands categories, but because humans are perfectly capable of confusing themselves to death without help, and I’d like to reduce my reliance on that talent.&lt;/p&gt;

&lt;p&gt;There’s the mode where AI is a tool. Instrumental. I have a task, a constraint, an outcome. The model helps me do work. The output goes into a real process that pushes back: compilation, tests, users, production logs, budgets, deadlines, and whatever grim entity governs time estimates.&lt;/p&gt;

&lt;p&gt;Reality is the grader.&lt;/p&gt;

&lt;p&gt;Then there’s the mode where AI is an oracle. Not necessarily because I want it to be, but because I ask it questions in places where I can’t clearly test whether it’s wrong, or where “wrong” isn’t even well-defined. What should we believe. What does this mean. What will happen. What is best.&lt;/p&gt;

&lt;p&gt;This distinction isn’t moral. It’s about control. Tooling keeps agency with me. Oracle use can quietly relocate agency to something that speaks in complete sentences and never looks nervous.&lt;/p&gt;

&lt;p&gt;Most of the trouble starts when these two modes get blurred. Which, inconveniently, is the default setting.&lt;/p&gt;

&lt;p&gt;My own use leans heavily toward tooling. Not because I’m above temptation, but because I enjoy knowing when I’m being lied to.&lt;/p&gt;

&lt;p&gt;Tooling forces contact with consequence. It keeps me inside a feedback loop. If the model helps, great. If it misleads me, I pay for it quickly. That payment is information. It updates my understanding. It’s annoying, but it’s honest.&lt;/p&gt;

&lt;p&gt;In practice this looks very unromantic.&lt;/p&gt;

&lt;p&gt;I’ll use AI to sketch a refactor path or list tradeoffs, then I validate by doing the boring part: reading the code, running the tests, watching what the system does when it hits reality.&lt;/p&gt;

&lt;p&gt;I’ll use it to draft tests or enumerate edge cases, especially where business rules mutate into folklore. Then I check those cases against actual requirements, existing behavior, and whatever production logs are willing to confess.&lt;/p&gt;

&lt;p&gt;I’ll use it to explain a module back to me, but I treat it like a rubber duck with a postgraduate vocabulary. Helpful, occasionally brilliant, not legally admissible.&lt;/p&gt;

&lt;p&gt;Sometimes I’ll ask it for a few alternative implementations just to see patterns, like shaking a box to hear what rattles. The compiler becomes the lie detector. The runtime becomes the judge. Users become the jury, which is a frightening thought if you dwell on it.&lt;/p&gt;

&lt;p&gt;Tooling doesn’t make me smarter. It makes me faster at discovering where I’m wrong.&lt;/p&gt;

&lt;p&gt;That matters because speed without feedback is just acceleration, and acceleration is only impressive until you meet a wall.&lt;/p&gt;

&lt;p&gt;None of this means oracle use is useless. That would be dishonest. There are places where “correctness” isn’t the goal, because there is no stable ground truth to converge toward. You’re exploring. You’re mapping. You’re trying to see the problem from an angle you don’t naturally inhabit.&lt;/p&gt;

&lt;p&gt;Oracles make sense in ideation, in creative exploration, in speculative thinking, in philosophy, in reframing problems you already own responsibility for. They make sense when what you’re buying is perspective, not authority.&lt;/p&gt;

&lt;p&gt;The system isn’t there to be right. It’s there to widen the map. To suggest a path you didn’t see. To hand you a weird rock and insist it’s symbolic.&lt;/p&gt;

&lt;p&gt;The distinction that matters is authority. Safe oracle use is borrowing perspective, not outsourcing judgment.&lt;/p&gt;

&lt;p&gt;Which brings us to the part where people get quietly tricked, usually because the trick is comfortable.&lt;/p&gt;

&lt;p&gt;Oracle use is safest when it’s bounded, plural, and owned.&lt;/p&gt;

&lt;p&gt;Bounded means I set the frame. I remind myself, explicitly, that this is exploration, not instruction. Plural means I force it to generate multiple perspectives, including the annoying ones. Owned means I treat the output as input to my judgment, not a replacement for it.&lt;/p&gt;

&lt;p&gt;If I’m being disciplined, “safe oracle mode” looks like asking for opposing framings, counterarguments, or what would change the answer. It looks like prying assumptions into daylight. It looks like separating facts from interpretations and value claims, because mixing those is how you end up with a toaster as your spiritual advisor.&lt;/p&gt;

&lt;p&gt;Oracle use becomes unsafe when confidence replaces accountability.&lt;/p&gt;

&lt;p&gt;Especially in politics, culture, ethics, identity, and forecasting complex social systems, which are basically domains where everyone is carrying a sword made of opinions and insisting it’s a measuring instrument. These spaces contain facts, but they aren’t reducible to facts, and the gap is where fluency gets mistaken for truth.&lt;/p&gt;

&lt;p&gt;The most dangerous oracle failures aren’t dramatic. They’re quiet. People think they’re using a tool. The system behaves like an oracle. Authority slips in through tone, coherence, and the deeply human habit of mistaking “sounds plausible” for “is reliable.”&lt;/p&gt;

&lt;p&gt;A rule of thumb helps here, because humans love rules of thumb even when they fail constantly: if I can’t describe how I’d know the answer was wrong, I’m in oracle mode.&lt;/p&gt;

&lt;p&gt;That doesn’t mean don’t do it. It means don’t confuse it with tooling. Don’t install it as your internal government.&lt;/p&gt;

&lt;p&gt;This is where “accuracy” starts to mislead people. A lot of AI discourse tries to reduce everything to accuracy because accuracy is measurable, and measurable things make humans feel safe. Like seatbelts. Or quarterly reports.&lt;/p&gt;

&lt;p&gt;Accuracy makes sense when there’s a stable external referent. A bridge holds or it doesn’t. A proof is valid or it isn’t. Code compiles or it doesn’t. In those domains, accuracy is a useful metric.&lt;/p&gt;

&lt;p&gt;In art and culture, “accuracy” isn’t the metric. In politics and ethics, it’s only part of the story. These are value-laden domains. Outputs aren’t simply correct or incorrect. They’re situated, interpretive, persuasive, contested.&lt;/p&gt;

&lt;p&gt;Trying to force these into accuracy problems doesn’t make them safer. It just hides judgment behind math-flavored language.&lt;/p&gt;

&lt;p&gt;What matters more here isn’t correctness. It’s epistemic integrity: making assumptions explicit, separating fact from interpretation, and resisting the urge to launder values as facts.&lt;/p&gt;

&lt;p&gt;And when “accuracy” becomes slippery, something else becomes dangerous: fluency. Because coherent outputs can feel true even when they’re just well-formed. The model can write like a confident adult in a blazer. Reality does not care about blazers.&lt;/p&gt;

&lt;p&gt;Now we get to the part that feels like an upgrade and might secretly be a trap.&lt;/p&gt;

&lt;p&gt;GenAI introduces something new into decision-making: a cheap buffer between intent and consequence. We can simulate. Rehearse. Generate alternatives. Explore counterfactuals without immediately acting in the world. Not infinite in any literal sense, but economically unrecognizable compared to what came before. Like going from having one telescope to having a thousand telescopes and no idea which one is pointing at a bird.&lt;/p&gt;

&lt;p&gt;This buffer is powerful. In many contexts it’s genuinely beneficial.&lt;/p&gt;

&lt;p&gt;But buffers change behavior.&lt;/p&gt;

&lt;p&gt;When feedback is delayed, softened, or abstracted, people take bigger risks. Systems scale faster than understanding. Bad ideas survive longer than they should, like a vampire invited in because it looked polite on LinkedIn.&lt;/p&gt;

&lt;p&gt;Simulation doesn’t remove cause and effect. It defers it. And deferred consequences tend to arrive concentrated, like interest on a loan you forgot you took out because the app made it feel friendly.&lt;/p&gt;

&lt;p&gt;This is the meta-risk that doesn’t require sci-fi. Not “AI decides for us,” but “AI makes it easier for us to avoid feeling the cost of our decisions until the cost becomes unavoidable.”&lt;/p&gt;

&lt;p&gt;A buffer can be a safety feature. It can also become a blindfold. Humans are remarkably good at turning safety features into excuses.&lt;/p&gt;

&lt;p&gt;Tooling survives this buffer better than oracle use because reality remains the arbiter. Outputs still get graded by the world. Even if I move faster, I’m still constrained by tests, production, users, and failure. Mistakes remain informative. The loop stays intact.&lt;/p&gt;

&lt;p&gt;Oracle use erodes that connection. Not because the system lies, but because persuasion replaces validation. Coherence replaces truth-testing. Confidence replaces learning.&lt;/p&gt;

&lt;p&gt;The danger isn’t wrong answers. It’s unowned ones.&lt;/p&gt;

&lt;p&gt;“The model said so” is a modern method of responsibility diffusion. It’s not malicious. It’s just convenient. And convenience is how civilization usually gets killed, or at least how it ends up in meetings.&lt;/p&gt;

&lt;p&gt;When people talk about making AI “trustworthy,” they often mean “make it more accurate.” In many real use cases, trustworthiness is less about accuracy and more about behavior under uncertainty.&lt;/p&gt;

&lt;p&gt;A trustworthy system is one that makes clear what it knows versus what it’s guessing, that doesn’t smooth uncertainty into confident tone, that exposes assumptions, that invites verification when verification exists, and that refuses to become an oracle by accident.&lt;/p&gt;

&lt;p&gt;This is where grounding, retrieval, and evaluation loops matter. Not because they make the model perfect, but because they tether it to something outside itself when that’s possible. Trust should be earned through traceable process, not vibes.&lt;/p&gt;

&lt;p&gt;Vibes are how you end up worshipping a toaster.&lt;/p&gt;

&lt;p&gt;There’s an exception worth protecting, because humans need somewhere to be irresponsible without burning down the neighborhood: play.&lt;/p&gt;

&lt;p&gt;Using AI for creative inspiration, exploration, or fun is often safe precisely because it makes no claim on truth. Nothing depends on the output. There’s no authority granted. It’s a fountain of variation. Prompts. Seeds. Sparks.&lt;/p&gt;

&lt;p&gt;It can hallucinate all it wants in this mode because I’m not confusing it with a decision engine. It’s a toy that sometimes produces interesting artifacts, like a kaleidoscope that occasionally writes a decent paragraph.&lt;/p&gt;

&lt;p&gt;Play has boundaries. Hallucination is harmless when it’s not pretending to be instruction.&lt;/p&gt;

&lt;p&gt;Where is this heading. The honest answer is: anywhere we let it. But the trend line feels clear.&lt;/p&gt;

&lt;p&gt;Generation is trending toward commoditization. The ability to produce outputs will keep getting cheaper and more common. The premium shifts to selection and accountability: systems and practices that preserve agency, surface uncertainty, and keep humans responsible for consequences.&lt;/p&gt;

&lt;p&gt;The valuable layer won’t be “more content.” It’ll be better judgment under overload. Tools that help decide what to pay attention to, what to ignore, and when to hesitate.&lt;/p&gt;

&lt;p&gt;That’s not glamorous. It’s not oracle-shaped. But it’s load-bearing.&lt;/p&gt;

&lt;p&gt;The risk isn’t that we build powerful generators. The risk is that we build them in a way that turns feedback into a suggestion instead of a constraint.&lt;/p&gt;

&lt;p&gt;None of this is advice. It’s a constraint I’m choosing to operate under.&lt;/p&gt;

&lt;p&gt;I don’t want systems that decide for me. I want systems that help me decide faster while being honest about what they know, what they assume, and what they can’t possibly know.&lt;/p&gt;

&lt;p&gt;I want feedback, not reassurance. Friction where it matters. Play where it’s safe.&lt;/p&gt;

&lt;p&gt;In a world where almost anything can be generated, preserving responsibility might be the only truly scarce thing left.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Silence Can Be Golden (If You Learn How To Paint)</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Thu, 09 Oct 2025 20:55:55 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/silence-can-be-golden-if-you-learn-how-to-paint-4eb4</link>
      <guid>https://forem.com/duplessisvanaswegen/silence-can-be-golden-if-you-learn-how-to-paint-4eb4</guid>
      <description>&lt;p&gt;At some point in my career I realised something about myself that I found odd:&lt;br&gt;
I don’t really have an &lt;strong&gt;internal monologue&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;There’s no running commentary in my head.&lt;br&gt;
And when I’m working on code, I don’t talk myself through it - I just sort of &lt;em&gt;see&lt;/em&gt; how things fit together.&lt;/p&gt;

&lt;p&gt;My brain turns problems into little diagrams - modules, data flows, relationships - and I shuffle them around until it makes sense.&lt;br&gt;
If something feels off, I can’t always explain why right away; it just doesn’t “sit right” in the picture.&lt;/p&gt;

&lt;p&gt;It’s not deep or mystical. It’s just how my brain decided to handle logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How That Plays Out When I Code&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When I open a project, my brain starts sketching connections on autopilot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functions become dots.
&lt;/li&gt;
&lt;li&gt;Data flows become arrows.
&lt;/li&gt;
&lt;li&gt;Layers stack themselves.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I’m debugging, I mentally “run” the system and watch where it snags.&lt;br&gt;
If I’m refactoring, I move those shapes around until the structure feels cleaner.&lt;/p&gt;

&lt;p&gt;It doesn’t make me smarter than anyone else - it’s just a different way of keeping track of what’s going on.&lt;br&gt;
But it &lt;strong&gt;does&lt;/strong&gt; make me fast. (Mostly.)&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What’s Good About It&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This way of thinking has a few handy upsides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I notice messy structures early, even if I can’t explain them yet.
&lt;/li&gt;
&lt;li&gt;I don’t mind big or complicated codebases - I can zoom out and see how they hang together.
&lt;/li&gt;
&lt;li&gt;Refactoring feels natural once the mental diagram stops wobbling.
&lt;/li&gt;
&lt;li&gt;I remember how things work pretty well.
&lt;/li&gt;
&lt;li&gt;I’m decent at solving certain kinds of problems quickly.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it’s not exactly a superpower - just a quirk that happens to line up nicely with how software behaves.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Where It Trips Me Up&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The same brain that can juggle abstract systems will absolutely forget to do the dishes.&lt;/p&gt;

&lt;p&gt;When I’m lost in a mental model, everything else drops out - messages, chores, meetings, time.&lt;br&gt;
And when I try to explain what’s in my head, it can sound like I’m skipping steps.&lt;br&gt;
To me it’s obvious; to others it looks like I jumped from A to D with no B or C.&lt;/p&gt;

&lt;p&gt;For a while I thought that meant communication just wasn’t my strength - or maybe that I have ADHD (and maybe I do).&lt;br&gt;
Turns out it was more like &lt;em&gt;no one else can see the imaginary flowchart you’re looking at, dude.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Figuring Out How to Collaborate&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s what helped me stop confusing my teammates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Draw before explaining.&lt;/strong&gt;
Even the worst napkin sketch gets everyone on the same page faster than words.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Describe what you &lt;em&gt;see&lt;/em&gt;, not what you feel.&lt;/strong&gt;
Saying “this flow feels tangled” is vague; saying “these two layers depend on each other” makes sense to everyone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pair with talkers.&lt;/strong&gt;
Verbal thinkers slow me down in a good way. They help me translate my diagrams into normal sentences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write short “why” notes.&lt;/strong&gt;
One or two lines about why I changed something saves future me (and others) from guessing my logic.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this came naturally.&lt;br&gt;
I had to treat communication as part of the engineering work, not an optional extra.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Making Peace With It&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now I see this less as a quirk and more as &lt;em&gt;my user manual&lt;/em&gt;.&lt;br&gt;
I think in shapes. Most people think in words.&lt;br&gt;
The job isn’t to change that - it’s to make sure the two can meet in the middle.&lt;/p&gt;

&lt;p&gt;It’s still weird sometimes. I can’t narrate my thoughts the way some folks can.&lt;br&gt;
But once I stopped trying to “think normally” and focused on explaining better, work (and teamwork) got a lot smoother.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A Hitchhiker’s Guide&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is one of the stories behind my ongoing series, &lt;a href="https://dev.to/duplessisvanaswegen/series/31442"&gt;&lt;strong&gt;&lt;em&gt;The Hitchhiker’s Guide to Software Sanity&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; - little lessons about staying sane in the chaos of tech.&lt;/p&gt;

&lt;p&gt;Because sanity in software isn’t always about frameworks or productivity hacks - it’s also about understanding how your own brain works, and finding ways to make that work &lt;em&gt;with other humans&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If your brain does something weird, you’re not alone.&lt;br&gt;
Just learn its rules, and build an adapter.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
      <category>watercooler</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The Cost of Inconsistency (And the Power of Predictability)</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Mon, 22 Sep 2025 20:46:37 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/the-cost-of-inconsistency-and-the-power-of-predictability-57bg</link>
      <guid>https://forem.com/duplessisvanaswegen/the-cost-of-inconsistency-and-the-power-of-predictability-57bg</guid>
      <description>&lt;h3&gt;
  
  
  Expectation Roulette
&lt;/h3&gt;

&lt;p&gt;One endpoint expected: &lt;code&gt;active=true&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Another wanted: &lt;code&gt;is_active=1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And a third, authored long ago by an &lt;strong&gt;ancient intern whose spirit still haunts the codebase&lt;/strong&gt;, insisted on: &lt;code&gt;activeness=Activeness.YES&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;All technically correct.&lt;br&gt;
All semantically identical. &lt;br&gt;
Sort-of at least.&lt;br&gt;
But all guaranteed to make you question whether software is just an elaborate prank we’ve all agreed to keep running.&lt;/p&gt;

&lt;p&gt;It’s like discovering every traffic light in your city has its own personal theory of “green.”&lt;/p&gt;

&lt;p&gt;And the buttons - dear god, the buttons. &lt;br&gt;
Rounded here, squared there, and a hover state that only appeared when Mercury was in retrograde. &lt;br&gt;
Users didn’t consciously notice, but they &lt;em&gt;felt&lt;/em&gt; it. &lt;br&gt;
Developers noticed because nothing erodes trust faster than a system that keeps breaking its own promises.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Gospel of “Just This Once”
&lt;/h3&gt;

&lt;p&gt;The intent was noble, or at least convenient.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“This endpoint just needs to ship.”&lt;/li&gt;
&lt;li&gt;“That button style was faster to copy-paste.”&lt;/li&gt;
&lt;li&gt;“We’ll circle back later.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every inconsistency was a tiny act of local optimization. Freedom for the team, speed for the sprint, autonomy in the moment. Nobody thought they were authoring scripture.&lt;br&gt;
But “just this once” is the most prolific prophet in tech.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Museum of Exceptions
&lt;/h3&gt;

&lt;p&gt;Soon, the system resembled a modern art gallery: a thousand pieces, each with its own interpretive plaque.&lt;/p&gt;

&lt;p&gt;Docs multiplied and lack pings became ritual: “Which version of ‘active’ is correct here?” &lt;br&gt;
New hires spent their first month wandering the halls of contradiction, trying to remember which rules were official and which were the creative contributions of that long-departed intern.&lt;/p&gt;

&lt;p&gt;It wasn’t documentation anymore. &lt;br&gt;
It was folklore.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chaos Tax
&lt;/h3&gt;

&lt;p&gt;Call it &lt;strong&gt;Predictability Drift&lt;/strong&gt;, &lt;strong&gt;Death by Exceptions&lt;/strong&gt;, or my personal favorite: &lt;strong&gt;Chaos Tax&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every deviation added overhead.&lt;br&gt;
Every asterisk forced a new mental branch.&lt;br&gt;
It’s like driving through a city where the stop signs are calibrated per block: “stop,” “yield,” “optional if you’re late,” “slow down unless you’re cool.”&lt;br&gt;
You can navigate it, but don’t mistake survival for velocity.&lt;/p&gt;

&lt;p&gt;Inconsistency doesn’t scale linearly - it compounds. &lt;br&gt;
One small freedom becomes a forest of forks in the road.&lt;/p&gt;

&lt;h3&gt;
  
  
  Boring Is a Feature
&lt;/h3&gt;

&lt;p&gt;Here’s the lens that finally clicked for me: &lt;strong&gt;predictability is velocity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Consistency isn’t ascetic minimalism or bureaucratic purity. &lt;br&gt;
It’s leverage. &lt;br&gt;
Every standard is one fewer decision. One fewer doc update. &lt;br&gt;
One fewer panicked midnight debug session.&lt;/p&gt;

&lt;p&gt;Predictable systems don’t demand attention.&lt;br&gt;
They fade into the background, letting engineers spend their time on problems that matter.&lt;br&gt;
Which is the whole point: the less you notice the rules, the more useful they are.&lt;/p&gt;

&lt;h3&gt;
  
  
  One Filter to Rule Them All
&lt;/h3&gt;

&lt;p&gt;These days, I’m less impressed by clever abstractions and more impressed by boring consistency. &lt;br&gt;
A button that looks the same everywhere. &lt;br&gt;
An API that doesn’t change its mind mid-sentence.&lt;/p&gt;

&lt;p&gt;Because nothing feels faster than a system that doesn’t make you ask twice.&lt;/p&gt;

&lt;p&gt;So yes, give me one predictable flag. &lt;br&gt;
Something gloriously dull, like &lt;code&gt;active=true&lt;/code&gt;.&lt;br&gt;
Not &lt;code&gt;is_active=1&lt;/code&gt;.&lt;br&gt;
Not &lt;code&gt;activeness=Activeness.YES&lt;/code&gt; (may the ancient intern rest in peace).&lt;/p&gt;

&lt;p&gt;Just one truth, boring enough to believe in.&lt;/p&gt;

&lt;p&gt;One filter to rule them all.&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>culture</category>
      <category>architecture</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The 7-Layer Dip of State</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Fri, 19 Sep 2025 01:26:00 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/the-7-layer-dip-of-state-24d2</link>
      <guid>https://forem.com/duplessisvanaswegen/the-7-layer-dip-of-state-24d2</guid>
      <description>&lt;h3&gt;
  
  
  The 2 a.m. Debugging Special
&lt;/h3&gt;

&lt;p&gt;It’s 2:07 a.m.&lt;br&gt;
A product shows &lt;strong&gt;120 items in stock.&lt;/strong&gt;&lt;br&gt;
Our system swears it’s &lt;strong&gt;0.&lt;/strong&gt;&lt;br&gt;
Somewhere along the way, it briefly claimed &lt;strong&gt;42.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The database insists there are plenty. The cache says sold out. The frontend store is oscillating like a ceiling fan with a bent blade. The local offline cache is basically a time capsule from last Thursday. And feature flags? They’ve split the timeline into alternate universes where customers either can’t buy at all - or get the last unit forever.&lt;/p&gt;

&lt;p&gt;I’m not debugging software. I’m cross-examining witnesses. Each one says, &lt;em&gt;“I’m the truth.”&lt;/em&gt; None of them are.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blueprints and Daydreams
&lt;/h3&gt;

&lt;p&gt;On the whiteboard, it was a thing of beauty.&lt;/p&gt;

&lt;p&gt;Database at the core. A cache to keep it lean. An in-memory store for hot paths. A frontend store to normalize state. A local copy for offline kindness. Feature flags for safety. Analytics humming quietly in the background.&lt;/p&gt;

&lt;p&gt;Every layer justified.&lt;br&gt;
Every arrow clean.&lt;/p&gt;

&lt;p&gt;It looked less like code and more like architecture digest: The Cathedral of State.&lt;/p&gt;

&lt;h3&gt;
  
  
  When the Cheese Started Sliding
&lt;/h3&gt;

&lt;p&gt;Then reality arrived.&lt;/p&gt;

&lt;p&gt;The cache expired wrong, declaring “sold out” while the database still had stock. The local copy thought &lt;strong&gt;20 units remained&lt;/strong&gt;, but from last week. Feature flags forked the truth - one group of customers saw “limited edition,” another saw “permanently discontinued.” Analytics insisted we’d sold &lt;strong&gt;300 units&lt;/strong&gt; nobody could actually buy. And the database - the so-called bedrock - was just another opinion, delayed by replication lag.&lt;/p&gt;

&lt;p&gt;Instead of one clear truth, we had a seven-way standoff. Bugs weren’t bugs anymore - they were investigations into which version of reality we’d broken this time.&lt;/p&gt;

&lt;p&gt;Every layer was a new witness.&lt;br&gt;
Every meeting was a courtroom drama.&lt;br&gt;
Nobody ever won.&lt;/p&gt;

&lt;h3&gt;
  
  
  These Are Not the Truths You’re Looking For
&lt;/h3&gt;

&lt;p&gt;This isn’t just a rough sprint. It’s a pattern. Call it &lt;strong&gt;State Entropy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every new layer starts as a simplifier. Over time, it spends more energy staying in sync than solving the problem it was built for.&lt;/p&gt;

&lt;p&gt;You don’t notice it at first. Then one day, half your PRs are “fix stock count again,” and junior engineers are afraid to ask which layer is “real” because the answer will start a fight.&lt;/p&gt;

&lt;p&gt;The “single source of truth” isn’t real. It’s a mirage. At best, you’ve got several provisional truths, all decaying at different rates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sometimes Salsa Is Enough
&lt;/h3&gt;

&lt;p&gt;Here’s the lens I use now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Every new state layer is a future sync bug.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The fewer times you ask “where does this value come from,” the healthier your system.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add a cache if you must. Add offline storage if you must. &lt;br&gt;
Just stop pretending each one is free. &lt;br&gt;
They aren’t. &lt;/p&gt;

&lt;p&gt;You’re trading clarity for speed, or resilience, or UX. &lt;br&gt;
That’s fine - just own it.&lt;/p&gt;

&lt;p&gt;And once you’ve made the trade, keep visibility. You don’t need purity. You need to know which layer is lying when (not if) things drift. Observability beats elegance.&lt;/p&gt;

&lt;p&gt;Sometimes salsa really is enough. Don’t make the seven-layer dip just because you can.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bottomless Dip
&lt;/h3&gt;

&lt;p&gt;By 3:45 a.m., I wasn’t debugging anymore.&lt;br&gt;
I was spelunking.&lt;br&gt;
Every layer promised the truth. &lt;br&gt;
Every layer lied in its own special way.&lt;/p&gt;

&lt;p&gt;The bug wasn’t in the cache, or the DB, or the store.&lt;/p&gt;

&lt;p&gt;It was in the belief there was ever a bottom to this dip.  &lt;/p&gt;

</description>
      <category>architecture</category>
      <category>coding</category>
      <category>watercooler</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Rise of the Vibe Coder (and Why It Should Make You Better, Not Bitter)</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Thu, 11 Sep 2025 12:18:27 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/the-rise-of-the-vibe-coder-and-why-it-should-make-you-better-not-bitter-jeh</link>
      <guid>https://forem.com/duplessisvanaswegen/the-rise-of-the-vibe-coder-and-why-it-should-make-you-better-not-bitter-jeh</guid>
      <description>&lt;h3&gt;
  
  
  They Shipped It Overnight. You’re Still Cleaning Up the Corpses.
&lt;/h3&gt;

&lt;p&gt;It started as a Slack ping.&lt;br&gt;&lt;br&gt;
A prototype had gone viral on Product Hunt - something thrown together in a weekend by a junior, a designer, and a large language model.&lt;br&gt;
Suddenly, leadership wanted “more of this energy.”&lt;br&gt;
Shipping faster.&lt;br&gt;
Caring less.&lt;br&gt;
Outcomes, not architecture.&lt;/p&gt;

&lt;p&gt;By the time you saw the codebase, it looked like a haunted house held together by duct tape and misplaced confidence.&lt;br&gt;
No tests. No types. No idea who owned what.&lt;br&gt;
Just vibes.&lt;/p&gt;

&lt;p&gt;And somehow, it worked.&lt;br&gt;
At least, until it didn’t.&lt;br&gt;
Until it needed to scale. Or pivot. Or survive long enough to matter.&lt;/p&gt;

&lt;p&gt;Welcome to the era of Vibe Coding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The myth? That it’s the future. That careful engineering is obsolete. That vibes scale.&lt;/strong&gt;&lt;br&gt;
The truth? You’re still needed. Just not in the way you used to be.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speed Is the New Virtue. And the New Vice.
&lt;/h3&gt;

&lt;p&gt;The Vibe Coder doesn’t ask for clarity.&lt;br&gt;
They don’t diagram the system or name things responsibly or leave breadcrumbs for the next poor soul.&lt;br&gt;
They ship.&lt;/p&gt;

&lt;p&gt;And shipping is seductive.&lt;br&gt;
Because in this economy, “done” beats “right.”&lt;br&gt;
Velocity signals competence. Caution reads like fear.&lt;/p&gt;

&lt;p&gt;So management squints at charts and concludes: “Do we really need seniors? The new kids are shipping faster.”&lt;/p&gt;

&lt;p&gt;Here’s the rot:&lt;br&gt;
They're measuring movement, not direction.&lt;br&gt;
Speed without trajectory is just flailing in high resolution.&lt;/p&gt;

&lt;p&gt;Your job isn’t to beat them at their game. It’s to change the stakes.   &lt;/p&gt;

&lt;h3&gt;
  
  
  AI Isn’t Replacing Engineers. It’s Replacing Guilt.
&lt;/h3&gt;

&lt;p&gt;Most Vibe Coders don’t think they’re better than you.&lt;br&gt;
They just don’t feel bad about skipping the parts you once thought were sacred.&lt;br&gt;
No shame in copy-pasting from ChatGPT.&lt;br&gt;
No pause before deploying duct tape to production.&lt;/p&gt;

&lt;p&gt;Because the system told them that was fine.&lt;/p&gt;

&lt;p&gt;AI didn’t kill the senior engineer.&lt;br&gt;
Executive impatience did.&lt;/p&gt;

&lt;p&gt;But here’s your edge:&lt;br&gt;
You &lt;em&gt;know&lt;/em&gt; what happens after the demo.&lt;br&gt;
You’ve seen what “it just works” looks like six months later.&lt;br&gt;
And unlike the vibe, &lt;strong&gt;you understand the cost of entropy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So don’t rage against the tools. Learn their shape.&lt;br&gt;
Then wield them with intention, not desperation.&lt;/p&gt;

&lt;h3&gt;
  
  
  You Can’t Out-Vibe the Vibe Coder
&lt;/h3&gt;

&lt;p&gt;This isn’t about working harder or being smarter.&lt;br&gt;
You &lt;em&gt;will&lt;/em&gt; lose a speed contest against someone generating an entire module by typing “make a thing that does X.”&lt;br&gt;
That’s not a failure. That’s physics.&lt;/p&gt;

&lt;p&gt;But you can do what they can’t:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Untangle a brittle mess without rewriting the universe.
&lt;/li&gt;
&lt;li&gt;Explain why things broke - and how to prevent it next time.
&lt;/li&gt;
&lt;li&gt;See when “working” isn’t sustainable, and how to fix it &lt;em&gt;before&lt;/em&gt; it combusts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s not glamorous.&lt;br&gt;
That’s not tweetable.&lt;br&gt;
That’s engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tower Is Tilted. Don’t Pretend It’s Not.
&lt;/h3&gt;

&lt;p&gt;The system is rigged against depth.&lt;/p&gt;

&lt;p&gt;Mentorship? Gone.&lt;br&gt;
Code review? Optional.&lt;br&gt;
Docs? LOL.&lt;/p&gt;

&lt;p&gt;Your org probably rewards the person who merged ten features over the one who stabilized a flaky pipeline.&lt;br&gt;
You might be the only person in the room who still cares if something is maintainable.&lt;/p&gt;

&lt;p&gt;This is the moment where many seniors grow bitter.&lt;br&gt;&lt;br&gt;
Jaded.&lt;br&gt;
Checked out.&lt;/p&gt;

&lt;p&gt;Don’t.&lt;/p&gt;

&lt;p&gt;You don’t have to fake joy. But &lt;strong&gt;you do have to stay awake&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Because bitterness is just burnout in a trench coat.&lt;br&gt;
And you can’t help anyone - yourself included - if you’re too busy sneering at the collapse to navigate through it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Play the Long Game. Even When No One Else Is.
&lt;/h3&gt;

&lt;p&gt;There are two timelines in every company:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;presentation&lt;/strong&gt; timeline, where everything is fast and clean and “customer obsessed.”&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;consequence&lt;/strong&gt; timeline, where shortcuts mature into outages and underpaid juniors become team leads by attrition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’re operating in the second one.&lt;br&gt;
That’s not glamorous, but it’s &lt;em&gt;real&lt;/em&gt;.&lt;br&gt;
And eventually, when the dust settles and the vibes rot into noise, someone will be needed to rebuild.&lt;br&gt;
To explain.&lt;br&gt;
To fix.&lt;/p&gt;

&lt;p&gt;That someone can be you - &lt;em&gt;if&lt;/em&gt; you’re still standing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategic Survival for the Vibe Era
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Pick Your Battles Like a Burned-Out Warlord
&lt;/h4&gt;

&lt;p&gt;You can’t fix everything.&lt;br&gt;
And you shouldn’t.&lt;/p&gt;

&lt;p&gt;Not every rushed PR needs your full wrath.&lt;br&gt;
Not every flawed design doc is worth a crusade.&lt;/p&gt;

&lt;p&gt;But some are.&lt;/p&gt;

&lt;p&gt;Your job now isn’t to fight all the decay - it’s to &lt;strong&gt;spot the decay that matters&lt;/strong&gt;.&lt;br&gt;
The things that, if left alone, will haunt your roadmap for quarters.&lt;/p&gt;

&lt;p&gt;Develop taste for when to speak, when to coach, and when to let the fire burn.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Keep a Paper Trail. Your Future Self Will Thank You.
&lt;/h4&gt;

&lt;p&gt;In a world where memory is short and ownership is fluid, the only truth that survives is written down.&lt;/p&gt;

&lt;p&gt;Decisions. Warnings. Risks you flagged and were ignored for.&lt;/p&gt;

&lt;p&gt;Leave breadcrumbs.&lt;br&gt;
Not to say “I told you so,” but to protect your sanity.&lt;/p&gt;

&lt;p&gt;And yes - eventually, maybe even your job.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Mentor Like You’re Growing Resistance Fighters
&lt;/h4&gt;

&lt;p&gt;If you’re lucky enough to still be around juniors, &lt;strong&gt;make them dangerous&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Not with trivia.&lt;br&gt;
With mindset.&lt;/p&gt;

&lt;p&gt;Teach them to ask why, not just how.&lt;br&gt;
To think beyond the merge.&lt;br&gt;
To notice when the vibes are lying.&lt;/p&gt;

&lt;p&gt;Because one day soon, they’ll be the only ones left.&lt;br&gt;
And if you don’t teach them, someone worse will.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Know When to Leave. But Also Know When to Stay.
&lt;/h4&gt;

&lt;p&gt;Not every place deserves your wisdom.&lt;br&gt;
Some companies are committed to the bonfire.&lt;br&gt;
And leaving may be the sanest move.&lt;/p&gt;

&lt;p&gt;But not every broken system is beyond repair.&lt;br&gt;
Sometimes, all it takes is one stubborn, lucid engineer to steady the ground beneath a team.&lt;/p&gt;

&lt;p&gt;The trick is knowing which situation you’re in.&lt;/p&gt;

&lt;p&gt;And that clarity?&lt;br&gt;
That’s your real seniority test.&lt;/p&gt;

&lt;h3&gt;
  
  
  This Was Never Just About Code
&lt;/h3&gt;

&lt;p&gt;The Vibe Era isn’t just a shift in tooling.&lt;br&gt;
It’s a shift in values.&lt;br&gt;
A slow erosion of the things that made engineering a craft.&lt;/p&gt;

&lt;p&gt;And yet - you’re still here.&lt;br&gt;
Which means &lt;em&gt;you still care&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So be the one who remembers what good looks like.&lt;br&gt;
Be the one who stays curious, not cynical.&lt;br&gt;
Be the one who refuses to vanish into noise.&lt;/p&gt;

&lt;p&gt;Because when the hype dies down, and the smoke clears, and the codebase finally screams for help - They won’t call the Vibe Coder.&lt;/p&gt;

&lt;p&gt;They’ll call you.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>softwareengineering</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Helper, Utility, Factory… or Something More Sinister?</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Mon, 09 Jun 2025 05:00:00 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/helper-utility-factory-or-something-more-sinister-426e</link>
      <guid>https://forem.com/duplessisvanaswegen/helper-utility-factory-or-something-more-sinister-426e</guid>
      <description>&lt;h3&gt;
  
  
  The File That Should’ve Stayed Boring
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;A harmless little helper that became a logic hydra. You know this one.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It started as &lt;code&gt;helpers.ts&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Just a couple of string functions: slugify, capitalize, maybe something to format currency. You know, the kind of low-commitment one-liners that feel too pure to hurt you. Then came the date formatting. Then the ID generator. Then a function to normalize order items - but &lt;em&gt;just the formatting&lt;/em&gt;, we said.&lt;/p&gt;

&lt;p&gt;Six months later, &lt;code&gt;helpers.ts&lt;/code&gt; was 800 lines, had three different behaviors behind &lt;code&gt;getFormattedAmount&lt;/code&gt;, and included a “temporary” fix for tax rules in Germany.&lt;/p&gt;

&lt;p&gt;When it broke, &lt;em&gt;checkout&lt;/em&gt; broke.&lt;/p&gt;

&lt;p&gt;When I traced the bug, I ended up in a function literally called &lt;code&gt;isActiveCustomerLike&lt;/code&gt;. I say “literally” not for emphasis, but because that’s the actual name we shipped to production. It returned a boolean. It also triggered a database fetch.&lt;/p&gt;

&lt;p&gt;No one knew where to fix things anymore. The “logic” was scattered across helpers, utils, factories, and files with names like &lt;code&gt;coreUtils&lt;/code&gt;, &lt;code&gt;sharedUtils&lt;/code&gt;, and, I kid you not, &lt;code&gt;utilsUtils&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It took two engineers, one product manager, and a desperate Slack message to “whoever added this tax logic” to fix a bug that boiled down to: we’d built a second app, and hidden it inside the first one.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Architecture That Felt So Grown-Up
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;When “modular” meant putting everything in neat little buckets - with no lids.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We were being responsible. Reusable. DRY, but not religiously. Just enough to avoid copy-pasting that &lt;code&gt;formatPrice&lt;/code&gt; function everywhere.&lt;/p&gt;

&lt;p&gt;We wanted composability without commitment. A toolkit, not a framework. Helpers for common logic. Utils for shared tasks. Factories for object setup. Each with its own tidy file, decoupled and dependency-free.&lt;/p&gt;

&lt;p&gt;We’d read enough blog posts to know the dangers of fat services and god objects. We were breaking things up. Modularizing. Keeping our domain logic clean and uncluttered.&lt;/p&gt;

&lt;p&gt;It felt mature. Under-engineered, even. Pragmatic.&lt;/p&gt;

&lt;p&gt;And in fairness - it &lt;em&gt;started&lt;/em&gt; clean.&lt;/p&gt;

&lt;p&gt;But clean doesn’t mean safe.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Secret Life of Utilities
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;How the real business logic slipped sideways into files no one owns.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It’s easy to spot when your models are bloated or your services too abstract. What’s harder to catch is the slow gravitational pull of logic drifting sideways - into the shadows between your files.&lt;/p&gt;

&lt;p&gt;Helpers didn’t stay small. They started answering “just this one business need.” Then another. Then someone needed to check discount eligibility - &lt;em&gt;quickly&lt;/em&gt;, no time to refactor the cart service - so they stuffed it into &lt;code&gt;discountUtils&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Eventually, that file had a half-implemented loyalty engine living in it.&lt;/p&gt;

&lt;p&gt;Meanwhile, the domain stayed pristine. Untouched. Empty.&lt;/p&gt;

&lt;p&gt;The logic was somewhere else now - scattered across helpers and utils and factories that technically worked across the app, but only if you understood the &lt;em&gt;exact combination&lt;/em&gt; of arguments and side effects. Calling one meant loading five implicit assumptions and hoping nothing changed upstream.&lt;/p&gt;

&lt;p&gt;We built abstraction with no ownership. Encapsulation with no borders. A hall of mirrors where every function seemed useful, until you realized none of them were reliable.&lt;/p&gt;

&lt;p&gt;Even the tests lied. Mock-heavy, low-coverage, and subtly obsolete. We were asserting behavior that no longer made sense, in files named things like &lt;code&gt;formatHelper.test&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It wasn’t tech debt. It was tech drift.&lt;/p&gt;

&lt;p&gt;And it was everywhere.&lt;/p&gt;




&lt;h3&gt;
  
  
  Welcome to the Utility Sink
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;The anti-pattern with charm, convenience, and a body count.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I call it the &lt;strong&gt;Utility Sink&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It looks like a grab bag, but it’s a gravitational well. Logic flows into it because it’s easy. Fast. Unopinionated. A helper can live anywhere, touch anything. It doesn’t need to understand context. That’s the appeal.&lt;/p&gt;

&lt;p&gt;And the danger.&lt;/p&gt;

&lt;p&gt;The Utility Sink has no identity. So it absorbs all of them. Your business rules, formatting logic, feature flags, database queries - all hiding behind verbs like “get” and “is” and “format.”&lt;/p&gt;

&lt;p&gt;There’s no owner, because helpers belong to “everyone.” So no one sees when they start returning different results depending on the quarter, the client, or the moon phase.&lt;/p&gt;

&lt;p&gt;The Utility Sink &lt;em&gt;feels&lt;/em&gt; like reuse. What it delivers is indirection. The worst kind: invisible, inconsistent, and wrapped in good intentions.&lt;/p&gt;

&lt;p&gt;It’s how you end up with a &lt;code&gt;normalizeCustomerData&lt;/code&gt; function that applies different phone number logic depending on the country code &lt;em&gt;and&lt;/em&gt; whether the customer is B2B or B2C - but only if the &lt;code&gt;skipValidation&lt;/code&gt; flag isn’t set.&lt;/p&gt;

&lt;p&gt;It doesn’t throw. It just returns slightly wrong data.&lt;/p&gt;

&lt;p&gt;Until your email system starts calling everyone “Valued Client” because their names went missing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Like a Sith apprentice, it always starts with good intentions - power without responsibility, shortcuts without context.&lt;br&gt;&lt;br&gt;
And before you know it, the logic has turned.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  If It Gets Feature Requests, It’s Not a Helper
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;A brutal litmus test for architectural lies we tell ourselves.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here’s the gut check:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;If your helper gets feature requests, it’s not a helper anymore.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If product cares about it, if stakeholders ask about it, if QA writes edge cases for it - you’ve crossed the threshold. It’s no longer utility. It’s domain. You just parked it in a folder named &lt;code&gt;shared&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Your helpers shouldn’t know about your product tiers. Your utils shouldn’t fetch from the database. Your factories shouldn’t contain logic branches for enterprise clients.&lt;/p&gt;

&lt;p&gt;And if they do? Don’t rename them. Relocate them.&lt;/p&gt;

&lt;p&gt;Put them where they belong. Even if it feels redundant. Even if it means your pristine service class gains weight. Logic needs a home - and a name that admits what it does.&lt;/p&gt;

&lt;p&gt;Because there’s no such thing as “just” a helper.&lt;/p&gt;

&lt;p&gt;That word? It’s code for “I don’t want to think too hard about where this goes.”&lt;/p&gt;

&lt;p&gt;Which is fair. Until it breaks prod. Then you’ll think real hard, real fast.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Callback You Didn’t Ask For
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Yes, we fixed it. No, it didn’t stay fixed. Entropy always gets a sequel.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We fixed the tax bug. Eventually. We extracted the German VAT rules into the &lt;code&gt;TaxPolicyService&lt;/code&gt;, gave it a clear contract, and wrote tests that didn’t involve mocking half the internet.&lt;/p&gt;

&lt;p&gt;But the legacy remained.&lt;/p&gt;

&lt;p&gt;Six months after the fix, someone opened a PR: “refactor &lt;code&gt;formatInvoice&lt;/code&gt; into &lt;code&gt;invoiceUtils&lt;/code&gt;.”&lt;/p&gt;

&lt;p&gt;I saw it, sighed, and left a comment I’ve reused ever since:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Only move it if you’re ready to own it.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They replied with a thumbs-up. And merged it anyway.&lt;/p&gt;

&lt;p&gt;The file is now 400 lines long. I haven’t opened it in weeks.&lt;/p&gt;

&lt;p&gt;I assume it’s doing fine.&lt;/p&gt;

&lt;p&gt;Probably.&lt;/p&gt;

&lt;p&gt;Maybe.&lt;/p&gt;

&lt;p&gt;God help us if it starts getting feature requests.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>architecture</category>
      <category>watercooler</category>
      <category>productivity</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Mon, 02 Jun 2025 09:46:35 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/-181h</link>
      <guid>https://forem.com/duplessisvanaswegen/-181h</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/duplessisvanaswegen/the-abstraction-that-hid-the-only-logic-that-mattered-14hg" class="crayons-story__hidden-navigation-link"&gt;The Abstraction That Hid the Only Logic That Mattered&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/duplessisvanaswegen" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1422438%2F16255537-b055-4f71-a97f-351635ba1462.jpeg" alt="duplessisvanaswegen profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/duplessisvanaswegen" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Duplessis van Aswegen
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Duplessis van Aswegen
                
              
              &lt;div id="story-author-preview-content-2550845" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/duplessisvanaswegen" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1422438%2F16255537-b055-4f71-a97f-351635ba1462.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Duplessis van Aswegen&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/duplessisvanaswegen/the-abstraction-that-hid-the-only-logic-that-mattered-14hg" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 2 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/duplessisvanaswegen/the-abstraction-that-hid-the-only-logic-that-mattered-14hg" id="article-link-2550845"&gt;
          The Abstraction That Hid the Only Logic That Mattered
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/architecture"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;architecture&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/duplessisvanaswegen/the-abstraction-that-hid-the-only-logic-that-mattered-14hg" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/duplessisvanaswegen/the-abstraction-that-hid-the-only-logic-that-mattered-14hg#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              4&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>programming</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The Abstraction That Hid the Only Logic That Mattered</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Mon, 02 Jun 2025 05:00:00 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/the-abstraction-that-hid-the-only-logic-that-mattered-14hg</link>
      <guid>https://forem.com/duplessisvanaswegen/the-abstraction-that-hid-the-only-logic-that-mattered-14hg</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;It’s Always the Refund&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It started, as these things always do, with a Slack message from support that began:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;"This is probably nothing, but..."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It never is.&lt;/p&gt;

&lt;p&gt;Turns out a customer had requested a refund for a $0 order - paid entirely with a promotional code that someone in marketing named “YOLO100.” Our system, ever obedient, generated a pristine digital refund for exactly zero currency units and confidently shoved it into the payment gateway, which replied with the transactional equivalent of a raised eyebrow:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;"Invalid amount."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From there, the trail of confusion expanded outward like a suburban sprawl. Engineering said it shouldn’t be possible. QA said it wasn’t in the test cases. Product said it was “an edge case.” (They always say that, don’t they? Every single cliff we fall off was once called an edge case.)&lt;/p&gt;

&lt;p&gt;We eventually traced it back. The logic that was &lt;em&gt;supposed&lt;/em&gt; to prevent this refund - "don’t send zero dollars to Stripe, you absolute gremlin" - existed. Technically.&lt;/p&gt;

&lt;p&gt;It was just hidden inside a validator that only ran in one flow, skipped in another, and silently assumed the refund had already passed through a gauntlet of sanity checks. Spoiler: it had not.&lt;/p&gt;

&lt;p&gt;Turns out, we had abstracted away the only logic that actually mattered.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Architecture by the Book (That No One Reads)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;On paper, it was gorgeous.&lt;br&gt;&lt;br&gt;
A shining example of Clean Architecture, blessed by the gods of SOLID and curated with the gentle hands of someone who’d read the book twice. Everything had its place. Domain logic in the core. Application services on the edge. Infrastructure politely waiting outside with its hat off.&lt;/p&gt;

&lt;p&gt;It was the kind of diagram you put in a pitch deck to make non-technical stakeholders nod solemnly.&lt;/p&gt;

&lt;p&gt;At the heart of it all: &lt;strong&gt;Business Rules&lt;/strong&gt;. Separated. Encapsulated. Respectable. We put them into validators and policies, wrapped those in handlers, and made sure they were only invoked by orchestrators with very strong boundaries and very weak opinions.&lt;/p&gt;

&lt;p&gt;Command buses dispatched commands. Decorators added behavior. Rules were extracted, reused, blessed with unit tests, and wrapped in so many layers of pattern that they might as well have been a wedding cake.&lt;/p&gt;

&lt;p&gt;The goal was purity. Composability. Decoupling.&lt;/p&gt;

&lt;p&gt;You know. Architecture stuff.&lt;/p&gt;

&lt;p&gt;What could go wrong?&lt;/p&gt;

&lt;p&gt;Spoiler: everything.&lt;/p&gt;

&lt;p&gt;The actual refund logic, if you dared to follow it, looked less like a business workflow and more like the migratory pattern of a particularly indecisive pigeon.&lt;/p&gt;

&lt;p&gt;The request hit the controller, which fired off a command. That command passed through three decorators, a logging bus, a metrics wrapper, and then landed in a handler that did... very little. It mostly just handed the logic off to a service, which fetched a RefundPolicyManagerFactory and asked it, &lt;em&gt;very politely&lt;/em&gt;, what to do next.&lt;/p&gt;

&lt;p&gt;If the stars aligned, and the correct refund context was passed via middleware, and the policy registry hadn’t been short-circuited by a feature flag (true story), it would &lt;em&gt;eventually&lt;/em&gt; reach the logic that said: “Oh, by the way, maybe don’t refund zero dollars.”&lt;/p&gt;

&lt;p&gt;But in our case, the order had been placed using a full-discount coupon. That triggered a “discounted refund path,” which skipped the decorator chain entirely. Because, of course, we had more than one refund flow. We had &lt;strong&gt;three&lt;/strong&gt;. One for standard refunds, one for coupons, and one for auto-cancellation - which didn't run validation at all because we assumed the system could do no wrong.&lt;/p&gt;

&lt;p&gt;Each one was &lt;em&gt;almost&lt;/em&gt; right.&lt;br&gt;&lt;br&gt;
But none of them carried the only rule that mattered.&lt;/p&gt;

&lt;p&gt;The logic was everywhere and nowhere. A Schrödinger's condition: present in the system, but not observable.&lt;/p&gt;

&lt;p&gt;Support couldn’t explain it. QA couldn’t catch it. PMs didn’t know it existed. And developers? We were left spelunking through a cave system of indirection, carrying only a headlamp and our IDE’s “Find All References” feature.&lt;/p&gt;

&lt;p&gt;I once diagrammed the refund logic for onboarding. Halfway through, I switched to using emojis.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;When Abstraction Becomes Camouflage&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Let’s call it &lt;strong&gt;Abstraction Drift&lt;/strong&gt;, though I was tempted to go with &lt;strong&gt;Layer Cake of Denial&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You start with a noble idea: separate your concerns. Pull out your logic. Wrap it in a reusable rule. Inject that rule via interface, wrap the interface in a service, and protect the service with a decorator. Toss in some middleware for good measure. Abstract until pure.&lt;/p&gt;

&lt;p&gt;And then, one day, a critical rule - the thing that stops you from issuing Monopoly money refunds - lives four files away from the Refund itself, guarded by an interface nobody reads, and quietly skipped because the wrong flag was set.&lt;/p&gt;

&lt;p&gt;This isn’t just over-engineering. It’s &lt;strong&gt;logic laundering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;By the time a bug appears, the rule responsible for preventing it is so thoroughly abstracted that you need a Ouija board to find it.&lt;/p&gt;

&lt;p&gt;The abstraction didn’t isolate the logic. It &lt;em&gt;dissolved&lt;/em&gt; it.&lt;/p&gt;

&lt;p&gt;What was meant to be composability became &lt;strong&gt;composure theatre&lt;/strong&gt; - a performance of order, with no actual predictability.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Seeing Is Debugging&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Here’s what I learned, after months of architectural self-loathing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If your system’s correctness depends on rules the developer can’t see, you didn’t abstract - you disappeared.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An abstraction should make things easier to reason about. If it doesn’t, it’s not an abstraction. It’s a trapdoor.&lt;/p&gt;

&lt;p&gt;The problem isn’t just indirection. It’s &lt;em&gt;invisible indirection&lt;/em&gt;. It’s the validator that only sometimes runs, the rule that lives in a helper, the condition buried behind a feature flag named &lt;code&gt;betaRefundLogicV3&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It’s abstraction with &lt;strong&gt;amnesia&lt;/strong&gt; - logic stripped of context, responsibility, and visibility.&lt;/p&gt;

&lt;p&gt;So now, when I design something, I ask a very specific question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can I &lt;em&gt;see&lt;/em&gt; the important behavior where it happens?&lt;br&gt;&lt;br&gt;
Or do I have to pray that some upstream service did the right thing?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if the answer is the latter, I pull the logic back. I put it next to the thing it affects. I let the Refund know about the rule. Not because it’s “pure,” but because it’s &lt;em&gt;real&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Because if your abstraction hides the logic that makes the system safe, it’s not clean. It’s complicit.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Refund Strikes Back&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We fixed the refund bug.&lt;/p&gt;

&lt;p&gt;Eventually.&lt;/p&gt;

&lt;p&gt;The logic now lives in the Refund, right where it always pretended to be.&lt;/p&gt;

&lt;p&gt;We still have validators. But they decorate nothing.&lt;/p&gt;

&lt;p&gt;Kind of like me at our last architecture review.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Balance has been restored to the Force.&lt;br&gt;&lt;br&gt;
Or at least to refunds. Which, in this system, are basically the same thing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>architecture</category>
    </item>
    <item>
      <title>I was planning on working on this for much longer…</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Sun, 01 Jun 2025 04:17:09 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/i-was-planning-on-working-on-this-for-much-longer-482j</link>
      <guid>https://forem.com/duplessisvanaswegen/i-was-planning-on-working-on-this-for-much-longer-482j</guid>
      <description>&lt;h3&gt;
  
  
  But i wouldn’t be following my own advice if I didn’t know when to let go. Read the final instalment- and the previous ones - and give me feedback please?
&lt;/h3&gt;

&lt;p&gt;I just hope this helps someone somewhere :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/duplessisvanaswegen/series/31442"&gt;Check it out here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>It’s been a few weeks since I started this series. I expected to continue working on it for longer, but I wouldn’t be following my own advice if I didn’t know when to let it go. Read the final instalment (and those before) and let me know what you think!</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Sun, 01 Jun 2025 04:12:29 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/its-been-a-few-weeks-since-i-started-this-series-i-expected-to-continue-working-on-it-for-5351</link>
      <guid>https://forem.com/duplessisvanaswegen/its-been-a-few-weeks-since-i-started-this-series-i-expected-to-continue-working-on-it-for-5351</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/duplessisvanaswegen/let-it-go-no-seriously-how-to-stop-clutching-and-start-living-4cgi" class="crayons-story__hidden-navigation-link"&gt;Let It Go (No, Seriously): How to Stop Clutching and Start Living&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/duplessisvanaswegen" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1422438%2F16255537-b055-4f71-a97f-351635ba1462.jpeg" alt="duplessisvanaswegen profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/duplessisvanaswegen" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Duplessis van Aswegen
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Duplessis van Aswegen
                
              
              &lt;div id="story-author-preview-content-2548480" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/duplessisvanaswegen" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1422438%2F16255537-b055-4f71-a97f-351635ba1462.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Duplessis van Aswegen&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/duplessisvanaswegen/let-it-go-no-seriously-how-to-stop-clutching-and-start-living-4cgi" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 31 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/duplessisvanaswegen/let-it-go-no-seriously-how-to-stop-clutching-and-start-living-4cgi" id="article-link-2548480"&gt;
          Let It Go (No, Seriously): How to Stop Clutching and Start Living
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/culture"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;culture&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/leadership"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;leadership&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/duplessisvanaswegen/let-it-go-no-seriously-how-to-stop-clutching-and-start-living-4cgi" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/duplessisvanaswegen/let-it-go-no-seriously-how-to-stop-clutching-and-start-living-4cgi#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>programming</category>
      <category>culture</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Let It Go (No, Seriously): How to Stop Clutching and Start Living</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Sat, 31 May 2025 16:25:01 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/let-it-go-no-seriously-how-to-stop-clutching-and-start-living-4cgi</link>
      <guid>https://forem.com/duplessisvanaswegen/let-it-go-no-seriously-how-to-stop-clutching-and-start-living-4cgi</guid>
      <description>&lt;p&gt;You used to carry everything.&lt;/p&gt;

&lt;p&gt;If someone dropped the ball, you dove. If a decision seemed off, you rewound the conversation. If the roadmap got weird, you lit a candle and tried to debug strategy with your bare hands.&lt;/p&gt;

&lt;p&gt;You didn’t do this because you’re a control freak.&lt;br&gt;
You did it because you care.&lt;br&gt;
You &lt;em&gt;did&lt;/em&gt; the work, so you &lt;em&gt;felt&lt;/em&gt; responsible. And because you’re good, people let you. Encouraged you, even.&lt;/p&gt;

&lt;p&gt;You were the hero, the glue, the failsafe.&lt;/p&gt;

&lt;p&gt;And now? You’re tired.&lt;br&gt;
Not just “need a nap” tired. &lt;em&gt;Existentially&lt;/em&gt; tired.&lt;/p&gt;

&lt;p&gt;You see chaos, and your first thought isn’t “How do I fix this?”&lt;br&gt;
It’s “Please, not me again.”&lt;/p&gt;

&lt;p&gt;You’re not broken.&lt;br&gt;
You’re just human.&lt;br&gt;
And you’re not meant to carry all of it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Dysfunction: Carrying the Uncarryable
&lt;/h3&gt;

&lt;p&gt;The dysfunction isn’t that you care.&lt;/p&gt;

&lt;p&gt;It’s that you believe your care is &lt;em&gt;required&lt;/em&gt;. That if you stopped holding things - people, systems, projects - they’d fall. And it would be your fault.&lt;/p&gt;

&lt;p&gt;This is the unspoken pact of overfunctioners.&lt;br&gt;
You overextend. They underworry. Everyone silently agrees to the terms.&lt;/p&gt;

&lt;p&gt;Until one day you realize:&lt;br&gt;
You’ve built a Rube Goldberg machine powered by your own burnout.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Lie of Ownership
&lt;/h3&gt;

&lt;p&gt;We worship “ownership” like it’s a holy word.&lt;br&gt;
Take initiative. Own the problem. Be the person who steps up.&lt;/p&gt;

&lt;p&gt;But no one tells you what happens when “owning” turns into &lt;em&gt;hoarding&lt;/em&gt;.&lt;br&gt;
When you mistake “this matters to me” for “this is mine alone to carry.”&lt;br&gt;
When you start gatekeeping out of love. Or fear. Or both.&lt;/p&gt;

&lt;p&gt;Ownership without boundaries doesn’t look like leadership.&lt;br&gt;
It looks like control.&lt;br&gt;
And control is not the same as clarity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Shipped-Too-Soon Scars
&lt;/h3&gt;

&lt;p&gt;You shipped something too fast because leadership was breathing down your neck.&lt;br&gt;
You patched a critical bug at midnight because no one else could.&lt;br&gt;
You ran interference between product and engineering so nobody else had to get yelled at.&lt;/p&gt;

&lt;p&gt;And somewhere in there, you got good at it. Too good.&lt;br&gt;
So good that people just stopped asking if you &lt;em&gt;should&lt;/em&gt; carry it all.&lt;/p&gt;

&lt;p&gt;And now?&lt;/p&gt;

&lt;p&gt;Now when someone asks, “Can you take this on?” you don’t hear a question.&lt;br&gt;
You hear a loyalty test.&lt;br&gt;
You hear, “If you really cared, you’d say yes.”&lt;/p&gt;

&lt;p&gt;That’s not teamwork.&lt;br&gt;
That’s emotional blackmail in Agile clothing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sometimes the Best Decision Still Fails
&lt;/h3&gt;

&lt;p&gt;You can do everything right.&lt;br&gt;
You can gather context, loop in stakeholders, document every tradeoff, and still ship something that backfires.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because some variables don’t show up until &lt;em&gt;after&lt;/em&gt; the decision.&lt;br&gt;
Because people change their minds.&lt;br&gt;
Because two teams interpreted the same “approved plan” like it was abstract art.&lt;/p&gt;

&lt;p&gt;Or maybe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your PM left mid-quarter
&lt;/li&gt;
&lt;li&gt;Your leadership changed direction
&lt;/li&gt;
&lt;li&gt;The client misunderstood the spec, then blamed you for their misread
&lt;/li&gt;
&lt;li&gt;The integration partner never shipped their part, and you took the heat
&lt;/li&gt;
&lt;li&gt;The world shifted under your feet - and your “clean decision” now looks like a blind spot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You didn’t screw up.&lt;br&gt;
You just got hit by reality.&lt;/p&gt;

&lt;h3&gt;
  
  
  You Can’t Fix What You Don’t Control
&lt;/h3&gt;

&lt;p&gt;You can only control how you show up.&lt;/p&gt;

&lt;p&gt;You cannot control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your CTO's shifting priorities
&lt;/li&gt;
&lt;li&gt;The designer ghosting you mid-project
&lt;/li&gt;
&lt;li&gt;A teammate who drops drama into Slack like it’s confetti
&lt;/li&gt;
&lt;li&gt;The bug that wasn’t in staging but is very much in prod&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And yet, you take all of it personally.&lt;br&gt;
You wear other people’s decisions like name tags.&lt;br&gt;
You mistake proximity for responsibility.&lt;/p&gt;

&lt;p&gt;But you are not the product of your context.&lt;br&gt;
You’re the pattern-breaker inside it.&lt;/p&gt;

&lt;p&gt;And that starts by saying:&lt;/p&gt;

&lt;p&gt;“This is not mine to hold.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Process Trauma Is Real
&lt;/h3&gt;

&lt;p&gt;You’ve been burned by systems that punished slowness, discouraged honesty, and handed out blame like Halloween candy.&lt;/p&gt;

&lt;p&gt;So now you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anticipate every concern before it's voiced
&lt;/li&gt;
&lt;li&gt;Add 37 bulletproof caveats to every PR description
&lt;/li&gt;
&lt;li&gt;Overexplain basic tradeoffs to protect your future self from critique&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t maturity. It’s &lt;em&gt;process PTSD&lt;/em&gt;.&lt;br&gt;
And it teaches you to see work as a battlefield - even when the war is over.&lt;/p&gt;

&lt;p&gt;Let yourself operate like the threat level has changed.&lt;br&gt;
Because it probably has.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Long Goodbye
&lt;/h3&gt;

&lt;p&gt;Part of seniority is learning how to let go.&lt;br&gt;
Not with a dramatic “I quit” - but with the quiet, grown-up courage of someone who knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I can care without clutching
&lt;/li&gt;
&lt;li&gt;I can lead without owning every outcome
&lt;/li&gt;
&lt;li&gt;I can ship good work even if it dies in a strategy shift three weeks later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You are not your roadmap.&lt;br&gt;
You are not your success metrics.&lt;br&gt;
You are not the last person standing between your team and the abyss.&lt;/p&gt;

&lt;p&gt;You are a steward.&lt;br&gt;
You show up.&lt;br&gt;
You do your part.&lt;br&gt;
And when the baton passes - or the sprint implodes - you let it go.&lt;/p&gt;

&lt;h3&gt;
  
  
  One Last Time, for the People in the Back
&lt;/h3&gt;

&lt;p&gt;Letting go doesn’t mean not caring.&lt;br&gt;
It means caring &lt;em&gt;cleanly&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Without ego.&lt;br&gt;
Without martyrdom.&lt;br&gt;
Without rewriting the outcome in your head a hundred times before bed.&lt;/p&gt;

&lt;p&gt;You don’t need to be the hero.&lt;br&gt;
You don’t need to be the shield.&lt;br&gt;
You don’t need to be the emotional patch cable that holds the org together.&lt;/p&gt;

&lt;p&gt;What you &lt;em&gt;do&lt;/em&gt; need?&lt;br&gt;
A nervous system that isn’t on fire.&lt;/p&gt;

&lt;p&gt;Because the systems will change.&lt;br&gt;
The roadmap will shift.&lt;br&gt;
The features will get cut, merged, resurrected, rewritten, abandoned.&lt;/p&gt;

&lt;p&gt;And if you’ve built your identity on holding everything together...&lt;br&gt;
You’ll break right alongside it.&lt;/p&gt;

&lt;p&gt;So breathe.&lt;br&gt;
Step back.&lt;br&gt;
Let the flame flicker out.&lt;/p&gt;

&lt;p&gt;You’ve done enough.&lt;/p&gt;

&lt;p&gt;Let it go.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Entry. Final Note.
&lt;/h3&gt;

&lt;p&gt;This is article 21 in &lt;em&gt;The Hitchhiker’s Guide to Software Survival&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
It’s also me taking my own advice—learning to let go, even when it’s hard.&lt;br&gt;&lt;br&gt;
(Yes, even when your brain whispers “just one more metaphor about code being feelings.”)&lt;/p&gt;

&lt;p&gt;We started with a shipping mantra.&lt;br&gt;&lt;br&gt;
We’re ending with a peace mantra.&lt;br&gt;&lt;br&gt;
Somewhere in between, we built a map.&lt;/p&gt;

&lt;p&gt;If even one piece helped you name a problem, survive a weird sprint, or feel less alone—then it did its job.&lt;/p&gt;

&lt;p&gt;And when the seas get stormy again (they will), you’re allowed to come back.&lt;br&gt;&lt;br&gt;
This series was never a sermon. It’s a lighthouse.&lt;br&gt;&lt;br&gt;
You don’t need it all the time. Just when you need direction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep going. Keep growing.&lt;br&gt;&lt;br&gt;
And don’t forget—you’re human first. Engineer second.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See you out there.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>culture</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Beware the Shiny Tech Trap</title>
      <dc:creator>Duplessis van Aswegen</dc:creator>
      <pubDate>Sat, 31 May 2025 05:46:40 +0000</pubDate>
      <link>https://forem.com/duplessisvanaswegen/beware-the-shiny-tech-trap-12n</link>
      <guid>https://forem.com/duplessisvanaswegen/beware-the-shiny-tech-trap-12n</guid>
      <description>&lt;p&gt;It's 10:06 a.m. on a Tuesday. Planning is humming along. The team’s finally got some momentum, the roadmap’s blessedly bug-free, and the last deploy didn’t require a postmortem &lt;em&gt;or&lt;/em&gt; whiskey.&lt;/p&gt;

&lt;p&gt;Then someone says it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What if we rewrote the service in Rust?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You blink. Surely it was a joke.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“It’s just... with WASM and edge functions, we could simplify the whole architecture.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There it is. That soft, reverent tone. Like they’re reading scripture. Or pitching to YC.&lt;/p&gt;

&lt;p&gt;And just like that, we’re off. Goodbye, roadmap. Hello, crowbrain.&lt;/p&gt;

&lt;p&gt;But you’re not a crow.&lt;br&gt;
And that glimmer isn’t food.&lt;/p&gt;

&lt;p&gt;It’s an ill-timed rewrite that makes no sense even in context - like deciding to renovate your kitchen because the toaster’s acting up &lt;em&gt;on Christmas Day&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Instinct to Rebuild
&lt;/h3&gt;

&lt;p&gt;Let’s call it what it is: boredom.&lt;/p&gt;

&lt;p&gt;Or maybe not boredom exactly - &lt;em&gt;impatience disguised as thought leadership.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You’ve been in the codebase a while. Things are working. Which is unsettling. There’s nothing to fix, but you &lt;em&gt;need&lt;/em&gt; to feel useful. So you look around, crack your knuckles, and whisper the sacred spell:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We should really consider modernizing.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Translation: &lt;em&gt;Let’s light a fire under this perfectly functional system because I need to feel like I’m doing something ambitious.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You tell yourself it’s about scale, or performance, or “technical debt” (which conveniently never includes your own architectural decisions from last quarter).&lt;/p&gt;

&lt;p&gt;But let’s be honest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You’re not chasing improvements. You’re running from stasis.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because rewrites feel clean.&lt;br&gt;
Because new tech means no legacy, no baggage, no awkward decisions to explain.&lt;br&gt;
Because saying “React Server Components” in a meeting feels safer than saying “I don’t know if our architecture actually matches our product goals.”&lt;/p&gt;

&lt;p&gt;You’re not optimizing for clarity.&lt;br&gt;
You’re optimizing for &lt;em&gt;control&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And deep down, you know it.&lt;br&gt;
That it’s not a pragmatic suggestion - it’s a rewrite poltergeist that lives in the CI/CD pipeline and feeds on certainty.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Shiny Spiral
&lt;/h3&gt;

&lt;p&gt;Here’s how it happens.&lt;/p&gt;

&lt;p&gt;You “just want to explore.” Innocent enough. So you spin up a proof of concept.&lt;br&gt;
Then you realize it &lt;em&gt;could&lt;/em&gt; replace the current system.&lt;br&gt;
And now you’re three weeks in, maintaining two architectures, and using phrases like &lt;em&gt;“interim dual-path strategy”&lt;/em&gt; or &lt;em&gt;“legacy fallback”&lt;/em&gt; to avoid saying &lt;em&gt;“I couldn’t let go of my POC and now we’re stuck supporting two realities.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You start pitching the new stack like it’s a rescue mission:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“It’s so much more elegant.”&lt;/li&gt;
&lt;li&gt;“It’ll reduce long-term complexity.”
&lt;/li&gt;
&lt;li&gt;“I mean, the old one was duct tape anyway…”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sure. But it worked. And duct tape has held more systems together than most engineers care to admit.&lt;/p&gt;

&lt;p&gt;This isn’t simplification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s &lt;em&gt;sophistication theater&lt;/em&gt;.&lt;/strong&gt; - a show where everything looks impressive, but nobody knows what the plot is.&lt;/p&gt;

&lt;p&gt;A whole production designed to make you feel clever, while quietly setting the team back two quarters.&lt;/p&gt;

&lt;p&gt;And for what?&lt;br&gt;
A 2% latency improvement?&lt;br&gt;
A new ORM that supports emoji-based migrations?&lt;/p&gt;

&lt;p&gt;Or maybe - just maybe - you’re using shiny tech to avoid the &lt;em&gt;actually&lt;/em&gt; hard problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Legacy decisions that no one wants to revisit.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Teams that don’t align on priorities.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Process debt so entrenched you’ve stopped seeing it.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But hey, tell yourself it’s about clean APIs if that helps you sleep.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Growth Isn’t Always a Rewrite
&lt;/h3&gt;

&lt;p&gt;Here’s a hard truth: being a senior engineer often looks a lot like &lt;strong&gt;doing the boring thing, well.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing one more test instead of chasing one more tool.&lt;/li&gt;
&lt;li&gt;Refactoring the tangled function instead of replacing the whole module.&lt;/li&gt;
&lt;li&gt;Teaching someone how the system works instead of quietly plotting to replace it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Growth isn’t “rebuild it in the hot new stack.”&lt;br&gt;
It’s asking, &lt;em&gt;“What’s actually needed here?”&lt;/em&gt; and being brave enough to sit with the boring answer.&lt;/p&gt;

&lt;p&gt;Sometimes the most senior move in the room is &lt;strong&gt;leaving it alone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not because you’re lazy.&lt;br&gt;
Because you’re clear on the cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pause, Then Pick It Up
&lt;/h3&gt;

&lt;p&gt;Before you pitch your Next Big Tech Pivot, hit pause. Ask yourself:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. What’s &lt;em&gt;actually&lt;/em&gt; broken?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Is there a real bottleneck? Or are you just allergic to the phrase “works fine”?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. If this tool weren’t new, would I still care?&lt;/strong&gt;&lt;br&gt;
Would you be evangelizing it if it came out in 2012 and had a logo that looked like a dentist’s office?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. What happens if we don’t change anything?&lt;/strong&gt;&lt;br&gt;
Do we collapse? Or do we just keep delivering features in a boring, predictable way?&lt;/p&gt;

&lt;p&gt;Spoiler: that last one is called &lt;em&gt;stability&lt;/em&gt;. And it’s underrated.&lt;/p&gt;

&lt;p&gt;Sometimes the bravest thing you can do as an engineer is &lt;strong&gt;refuse the rewrite&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Or better yet—submit a PR that renames the 10-year-old variable called &lt;code&gt;doStuff()&lt;/code&gt; to something someone can actually read.&lt;/p&gt;

&lt;p&gt;No fanfare. No talk. Just better code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your Stack Won’t Save You
&lt;/h3&gt;

&lt;p&gt;Here’s the gut punch:&lt;br&gt;
&lt;strong&gt;Your tech stack is not your legacy. Your behavior is.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nobody remembers the stack you fought to implement.&lt;br&gt;
They remember whether it helped them—or made things harder after you left.&lt;/p&gt;

&lt;p&gt;So if you’re tempted to rip things up and start fresh, ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Am I solving a problem, or avoiding one?&lt;/li&gt;
&lt;li&gt;Am I improving the system, or distracting myself from harder work?&lt;/li&gt;
&lt;li&gt;Am I chasing clarity, or just chasing dopamine?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the best engineers don’t &lt;em&gt;need&lt;/em&gt; to chase shiny things.&lt;br&gt;
They know how to make the dull ones sharper.&lt;/p&gt;

&lt;p&gt;So maybe this sprint, don’t fly off with the glimmering tool you saw on HN.&lt;br&gt;
Maybe just help your team ship clean code that doesn’t hurt to look at.&lt;/p&gt;

&lt;p&gt;You’re not a crow.&lt;/p&gt;

&lt;p&gt;And your roadmap’s not a perch.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>culture</category>
    </item>
  </channel>
</rss>
