<?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: Krishnankamatchi</title>
    <description>The latest articles on DEV Community by Krishnankamatchi (@krishnankamatchi).</description>
    <link>https://dev.to/krishnankamatchi</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%2F4137689%2F93cf575a-7c9d-43bc-9190-e0c0c720d260.jpg</url>
      <title>DEV Community: Krishnankamatchi</title>
      <link>https://dev.to/krishnankamatchi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/krishnankamatchi"/>
    <language>en</language>
    <item>
      <title>Deadhand: Code Is Cheap. Ownership Is a Subscription.</title>
      <dc:creator>Krishnankamatchi</dc:creator>
      <pubDate>Fri, 23 Oct 2026 15:24:58 +0000</pubDate>
      <link>https://dev.to/krishnankamatchi/deadhand-code-is-cheap-ownership-is-a-subscription-4ecg</link>
      <guid>https://dev.to/krishnankamatchi/deadhand-code-is-cheap-ownership-is-a-subscription-4ecg</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;From:     Your AI Provider
Subject:  Important changes to your plan

Hi there 👋

Starting next month, pricing for your plan
is changing.

The model your team relies on retires in
90 days. Its replacement is smarter, faster,
and 4× the price.

Your context window will also be reduced.

Thanks for building with us!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Relax.&lt;br&gt;&lt;br&gt;
That email hasn’t arrived.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yet.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Spoiler: this one has a happy ending.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I fixed it myself. Over a weekend. In Rust.&lt;br&gt;&lt;br&gt;
Because when developers spot an industry-wide problem, we don’t file an issue.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;We open a new repo.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Code Got Cheap
&lt;/h2&gt;

&lt;p&gt;Two years ago a feature cost a week.&lt;br&gt;&lt;br&gt;
Now it costs a prompt.&lt;/p&gt;

&lt;p&gt;400 lines in eleven seconds.&lt;br&gt;&lt;br&gt;
Tests included.&lt;br&gt;&lt;br&gt;
Comments better than yours.&lt;/p&gt;

&lt;p&gt;Beautiful.&lt;/p&gt;

&lt;p&gt;Now ask the question nobody wants to sit with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Is code cheap… or is someone paying for it to &lt;em&gt;look&lt;/em&gt; cheap?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We’ve seen this movie.&lt;br&gt;&lt;br&gt;
Cheap rides. Cheap cloud credits. Generous free tiers.&lt;br&gt;&lt;br&gt;
Everything is cheap during the land grab.&lt;/p&gt;

&lt;p&gt;Then the land is grabbed.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;And the invoice remembers your name.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The Lock-In Nobody Is Talking About
&lt;/h2&gt;

&lt;p&gt;We spend weeks worrying about database lock-in.&lt;br&gt;&lt;br&gt;
Cloud lock-in. Framework lock-in.&lt;/p&gt;

&lt;p&gt;Nobody is talking about this one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Who wrote the code?            → The model
Who understands the code?      → The model
Who can safely change it?      → The model
Who sets the model's price?    → Not you
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s not a tool.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;That’s a landlord.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your code is in your repo.&lt;br&gt;&lt;br&gt;
Under your license.&lt;br&gt;&lt;br&gt;
On your servers.&lt;/p&gt;

&lt;p&gt;But the &lt;em&gt;understanding&lt;/em&gt; of it lives in someone else’s data center, billed per token.&lt;/p&gt;

&lt;p&gt;You own the house.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;They own the only key that still fits the locks.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  “Nobody Will Need to Read Code Anymore”
&lt;/h2&gt;

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

&lt;p&gt;I’m not betting against AI. I use it every single day.&lt;br&gt;&lt;br&gt;
I’m betting against &lt;strong&gt;dependency&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I don’t need a human to understand my code.&lt;br&gt;&lt;br&gt;
I need &lt;strong&gt;&lt;em&gt;something I control&lt;/em&gt;&lt;/strong&gt; to understand it.&lt;/p&gt;

&lt;p&gt;A teammate.&lt;br&gt;&lt;br&gt;
A new hire.&lt;br&gt;&lt;br&gt;
Me at 3 AM.&lt;br&gt;&lt;br&gt;
Or a small model running on my own laptop — offline, free forever, impossible to deprecate.&lt;/p&gt;

&lt;p&gt;And here’s the part nobody says out loud:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code that’s hard for a human is hard for a small model too.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A 5,000-line file doesn’t fit in a small context window.&lt;br&gt;&lt;br&gt;
A function that needs 40 files of context loses a small model by file 30.&lt;br&gt;&lt;br&gt;
Only the most expensive frontier model can hold that mess in its head.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Messy code is a subscription you never signed up for.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  So I Built a Dead Man’s Switch
&lt;/h2&gt;

&lt;p&gt;During the Cold War the Soviets built a system nicknamed &lt;strong&gt;Dead Hand&lt;/strong&gt; — designed to keep working after the people in charge were gone.&lt;/p&gt;

&lt;p&gt;I wanted the same guarantee for code:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If the frontier model disappeared tomorrow, could something I control still own this?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Deadhand&lt;/strong&gt; is a CLI that scans a JavaScript/TypeScript repo and answers that question with numbers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Can it be followed?          → Cognitive Load
Can it be skimmed?           → Readability
How tangled is it?           → Entanglement
How much must load first?    → Context Depth
What breaks if it changes?   → Blast Radius
Does it match its peers?     → Pattern Drift
Did anyone come back to it?  → Orphaned Code
                      │
                      ▼
            MAINTAINABILITY 0–100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That fourth one, Context Depth? &lt;strong&gt;That's literally your context window.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Three rules I refused to break:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No LLM inside.&lt;/strong&gt; It runs offline, on your machine, free, forever. Anything else would make me a hypocrite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic.&lt;/strong&gt; Same code, same score. Safe to fail a PR on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Receipts.&lt;/strong&gt; Every number points to a file and a line.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Written in Rust.&lt;br&gt;&lt;br&gt;
It scans &lt;strong&gt;VS Code — 3.4 million lines — in under a second.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Under the Hood: No Vibes, Just ASTs
&lt;/h2&gt;

&lt;p&gt;No regex. No “count the lines and guess.”&lt;br&gt;&lt;br&gt;
Deadhand reads your code the way a compiler does.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; your repo
     │
     ▼
 discover ── respects .gitignore
     │
     ▼
 parse ───── oxc, all cores, one AST per file
     │       AST → facts → freed
     ▼
 resolve ─── imports + tsconfig paths
     │
     ▼
 graph ───── import graph + Tarjan for cycles
     │
     ▼
 git ─────── one `git log --numstat` call
     │
     ▼
 score ───── 7 metrics → 0–100, with receipts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every file becomes an AST via &lt;a href="https://oxc.rs" rel="noopener noreferrer"&gt;oxc&lt;/a&gt;, parsed on every core, boiled down to facts, then freed.&lt;br&gt;&lt;br&gt;
Imports become a graph, Tarjan’s algorithm catches every cycle, and complexity is scored the SonarSource way.&lt;br&gt;&lt;br&gt;
Every threshold and the math behind it: &lt;strong&gt;&lt;a href="https://github.com/KrishnanKamatchi/deadhand/blob/main/docs/calibration.md" rel="noopener noreferrer"&gt;in the repo&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  I Pointed It at a Library Everyone Thinks They Understand
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;zod.&lt;/strong&gt; 83,000 lines. One of the most loved TypeScript libraries alive.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ deadhand scan

╭──────────────────────────────────────────────╮
│                DEADHAND AUDIT                │
│                                              │
│ Readability                      42 / 100 !  │
│ Cognitive Load                   41 / 100 !  │
│ Entanglement                     82 / 100    │
│ Context Depth                    74 / 100    │
│ Blast Radius                     45 / 100 !  │
│ Pattern Drift                    65 / 100    │
│ Orphaned Code                   n/a          │
│                                              │
│ MAINTAINABILITY                  58 / 100 !  │
╰──────────────────────────────────────────────╯
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;134&lt;/strong&gt; functions over the complexity limit.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;46&lt;/strong&gt; nested four or more levels deep.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;2&lt;/strong&gt; circular dependency loops.&lt;/p&gt;

&lt;p&gt;Scanned in &lt;strong&gt;0.05 seconds.&lt;/strong&gt; No API key. No tokens. No invoice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgqwi02uz023brwzi4t1n.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgqwi02uz023brwzi4t1n.gif" alt="deadhand map of zod" width="759" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;zod is brilliant. Its maintainers understand every line.&lt;/p&gt;

&lt;p&gt;But imagine inheriting this codebase with no maintainer and no frontier model.&lt;br&gt;&lt;br&gt;
Just you, a coffee, and a small model on your laptop.&lt;/p&gt;

&lt;p&gt;That’s the real test.&lt;/p&gt;

&lt;p&gt;Not &lt;em&gt;“is this code good?”&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;“Could you take it with you?”&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Try It Before the Invoice Does
&lt;/h2&gt;

&lt;p&gt;Install (macOS / Linux):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--proto&lt;/span&gt; &lt;span class="s1"&gt;'=https'&lt;/span&gt; &lt;span class="nt"&gt;--tlsv1&lt;/span&gt;.2 &lt;span class="nt"&gt;-LsSf&lt;/span&gt; https://github.com/KrishnanKamatchi/deadhand/releases/latest/download/deadhand-installer.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install (Windows PowerShell):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;powershell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ExecutionPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"irm https://github.com/KrishnanKamatchi/deadhand/releases/latest/download/deadhand-installer.ps1 | iex"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, inside your repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;deadhand scan&lt;/code&gt; gives you the report.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;deadhand map&lt;/code&gt; draws an offline HTML map of your codebase.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;deadhand diff main --fail-on-drop 5&lt;/code&gt; fails PRs that make code harder to own.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your-repo
deadhand scan
deadhand map
deadhand diff main &lt;span class="nt"&gt;--fail-on-drop&lt;/span&gt; 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 &lt;a href="https://github.com/KrishnanKamatchi/deadhand" rel="noopener noreferrer"&gt;github.com/KrishnanKamatchi/deadhand&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Receipt Nobody Prints
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;─────────────── RECEIPT ────────────────
Feature generated ............  $0.04
Tests generated ..............  $0.01
Shipped ......................  ✓
Understanding of the code ....  RENTED
Renewal ......................  monthly
Who holds the keys ...........  them
Price next year ..............  ¯\_(ツ)_/¯
────────────────────────────────────────
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Code is cheap.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Owning it never was.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write code that something &lt;em&gt;you&lt;/em&gt; control can understand —&lt;br&gt;&lt;br&gt;
your team, your future self, a model on your own machine.&lt;/p&gt;

&lt;p&gt;Because one day the free trial ends.&lt;br&gt;&lt;br&gt;
And when it does, you want to be the one holding the keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not the one reading the email.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The email at the top is fictional. Your AI provider is lovely. For now.&lt;br&gt;&lt;br&gt;
No LLM was used to score any code in this post. Several were used to build the tool, which is exactly why it exists.&lt;br&gt;&lt;br&gt;
zod was scanned from public source; scores describe how hard code is for a newcomer to change, not how good it is.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>rust</category>
    </item>
    <item>
      <title>We Migrated 6 Years of Legacy Code. Production Chose Violence.</title>
      <dc:creator>Krishnankamatchi</dc:creator>
      <pubDate>Tue, 22 Sep 2026 19:25:40 +0000</pubDate>
      <link>https://dev.to/krishnankamatchi/we-migrated-6-years-of-legacy-code-production-chose-violence-3dni</link>
      <guid>https://dev.to/krishnankamatchi/we-migrated-6-years-of-legacy-code-production-chose-violence-3dni</guid>
      <description>&lt;p&gt;I joined a wedding-tech company in December 2025.&lt;/p&gt;

&lt;p&gt;Like every developer joining a new team, my first few weeks were spent figuring out three things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does the application work?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does the team work?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;why does everyone suddenly become religious before a production deployment?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The platform had been running for years. Real customers, real money, a large CMS, serious search traffic, and enough business logic that deleting one innocent-looking &lt;code&gt;if&lt;/code&gt; statement felt like a reasonable way to ruin everyone's weekend.&lt;/p&gt;

&lt;p&gt;It was a &lt;strong&gt;legacy system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I don't use &lt;em&gt;legacy&lt;/em&gt; as an insult.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The code had survived years in production. Death would've been kinder.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Years of hotfixes, workarounds, and forgotten requirements had become part of the application.&lt;/p&gt;

&lt;p&gt;Eventually, &lt;strong&gt;history becomes architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And I had joined somewhere around season six.&lt;/p&gt;




&lt;h2&gt;
  
  
  Then I Asked About Production
&lt;/h2&gt;

&lt;p&gt;Development happened in &lt;strong&gt;GitLab&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Dev branch. Staging. Normal stuff.&lt;/p&gt;

&lt;p&gt;Then I asked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Which branch is production?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There wasn't one.&lt;/p&gt;

&lt;p&gt;Production lived in &lt;strong&gt;SVN&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Yes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subversion.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitLab handled development and staging. SVN handled production.&lt;/p&gt;

&lt;p&gt;And the deployment pipeline connecting them was...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a human being.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
    │
    ▼
  GitLab
    │
    ▼
 Staging
    │ QA ✓
    ▼
┌─────────┐
│ Human™  │
│ compare │
│ copy    │
│ pray    │
└────┬────┘
     ▼
    SVN
     │
     ▼
Production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sometimes we compared files.&lt;/p&gt;

&lt;p&gt;Sometimes we reconstructed changes.&lt;/p&gt;

&lt;p&gt;Sometimes code moved &lt;strong&gt;line by line&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You haven't experienced continuous delivery until the &lt;em&gt;continuous&lt;/em&gt; part is a developer continuously checking whether they copied the right function.&lt;/p&gt;

&lt;p&gt;Worse, Git and SVN had diverged.&lt;/p&gt;

&lt;p&gt;Production had hotfixes staging didn't. Git had changes production didn't.&lt;/p&gt;

&lt;p&gt;They weren't really two environments anymore.&lt;/p&gt;

&lt;p&gt;They were &lt;strong&gt;distant relatives who still shared a surname&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deployments Were... Ceremonial
&lt;/h2&gt;

&lt;p&gt;Production releases needed tickets, approvals, and a scheduled window.&lt;/p&gt;

&lt;p&gt;The application wasn't containerized, so deployment also meant downtime.&lt;/p&gt;

&lt;p&gt;Naturally, releases happened early in the morning.&lt;/p&gt;

&lt;p&gt;Because apparently software is more stable before breakfast.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;05:30 — Deploy
06:35 — Developers verify
07:40 — QA verifies
08:00 — Suspicious silence
08:15 — "One small issue"
08:16 — Nobody agrees what "small" means
08:30 — Deployment window closes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If something broke early, rollback.&lt;/p&gt;

&lt;p&gt;If something broke later...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Congratulations. Your bug has been promoted to management.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The scary part wasn't even downtime.&lt;/p&gt;

&lt;p&gt;It was that the code QA approved wasn't necessarily identical to what reached production.&lt;/p&gt;

&lt;p&gt;There was always a gap between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"QA approved it."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Production will behave exactly the same."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That gap is where developers discover new forms of prayer.&lt;/p&gt;

&lt;p&gt;Eventually, though, I got used to it.&lt;/p&gt;

&lt;p&gt;Which is probably the most dangerous stage of technical debt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"That's just how we do it."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Technical debt rarely arrives saying &lt;em&gt;technical debt&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It usually says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Just for this release."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then it gets a chair.&lt;/p&gt;

&lt;p&gt;Then a desk.&lt;/p&gt;

&lt;p&gt;Six years later, &lt;strong&gt;it has admin access and its own bedroom.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Then Came One Thursday
&lt;/h2&gt;

&lt;p&gt;About two months after joining, we finished another production release.&lt;/p&gt;

&lt;p&gt;QA signed off.&lt;/p&gt;

&lt;p&gt;Nothing caught fire.&lt;/p&gt;

&lt;p&gt;Friday was a holiday.&lt;/p&gt;

&lt;p&gt;Basically a five-star deployment.&lt;/p&gt;

&lt;p&gt;I walked into one of our VP's cabins to say production was done.&lt;/p&gt;

&lt;p&gt;We started talking about the deployment process.&lt;/p&gt;

&lt;p&gt;Fifteen minutes later, we had somehow progressed from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"This is annoying."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Let's migrate it to AWS."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Migrate to AWS.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Beautiful sentence.&lt;/p&gt;

&lt;p&gt;Three words.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Software has a strange habit of making terrifying amounts of work fit into very short sentences.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Behind those three words were six-plus years of code, data, infrastructure, integrations, and production behavior — all connected in ways we understood, and probably a few we didn't.&lt;/p&gt;

&lt;p&gt;This wasn't:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nb"&gt;.&lt;/span&gt;
docker run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;followed by applause.&lt;/p&gt;

&lt;p&gt;Some parts of the application ran because we understood them.&lt;/p&gt;

&lt;p&gt;Other parts appeared to run because &lt;strong&gt;nobody had informed them they were allowed to stop.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The backend would be handled separately.&lt;/p&gt;

&lt;p&gt;I was asked to own the frontend.&lt;/p&gt;

&lt;p&gt;The intelligent response would've been:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let me analyze it first."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead, my brain spent approximately five seconds consulting my ego.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"I can do it."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I even promised a frontend foundation over the three-day weekend.&lt;/p&gt;

&lt;p&gt;My confidence lasted until I started my bike.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Ride Home Improved My Intelligence
&lt;/h2&gt;

&lt;p&gt;Every kilometer introduced a new question.&lt;/p&gt;

&lt;p&gt;SEO-critical pages?&lt;/p&gt;

&lt;p&gt;Complex routing logic?&lt;/p&gt;

&lt;p&gt;Caching?&lt;/p&gt;

&lt;p&gt;Legacy dependencies?&lt;/p&gt;

&lt;p&gt;Undocumented production behavior?&lt;/p&gt;

&lt;p&gt;How much of this thing actually works locally?&lt;/p&gt;

&lt;p&gt;And finally:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can I call him and pretend the three-day estimate was a network issue?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By the time I reached home, I'd mentally migrated the application six times.&lt;/p&gt;

&lt;p&gt;Five failed.&lt;/p&gt;

&lt;p&gt;The sixth required technology that probably doesn't exist.&lt;/p&gt;




&lt;h2&gt;
  
  
  Friday: Zero Useful Commits
&lt;/h2&gt;

&lt;p&gt;Friday, I barely coded.&lt;/p&gt;

&lt;p&gt;I read.&lt;/p&gt;

&lt;p&gt;Traced dependencies.&lt;/p&gt;

&lt;p&gt;Mapped boundaries.&lt;/p&gt;

&lt;p&gt;Tried to understand what we were actually moving.&lt;/p&gt;

&lt;p&gt;The goal became simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't replace today's legacy system with next year's legacy system.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI was already useful, but pointing an agent at six years of production code and saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Modernize this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;felt like a reliable way to generate &lt;strong&gt;40,000 lines of beautifully documented regret.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I eventually settled on a frontend architecture &lt;strong&gt;inspired by Hexagonal Architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Not the textbook version — the useful part: keep business logic away from framework and infrastructure details, and put APIs and external services behind clear boundaries.&lt;/p&gt;

&lt;p&gt;The point wasn't architecture cosplay.&lt;/p&gt;

&lt;p&gt;It was making sure changing an API or infrastructure detail didn't require open-heart surgery on the entire frontend.&lt;/p&gt;

&lt;p&gt;Saturday disappeared.&lt;/p&gt;

&lt;p&gt;Then Sunday.&lt;/p&gt;

&lt;p&gt;By Monday, I had a foundation.&lt;/p&gt;

&lt;p&gt;Not the migrated application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A place where one could actually be built.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Then Everyone Got Involved
&lt;/h2&gt;

&lt;p&gt;I started migrating alongside normal sprint work.&lt;/p&gt;

&lt;p&gt;This quickly revealed an advanced software-engineering principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Oh. This is going to need more people.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I did what any responsible engineer would do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I trapped a backend engineer who knew the legacy system into joining me.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By the time he realized what he'd signed up for, &lt;strong&gt;he was already in the Git history. No refunds.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;His knowledge was more valuable than any documentation.&lt;/p&gt;

&lt;p&gt;Because the most dangerous legacy code isn't ugly code.&lt;/p&gt;

&lt;p&gt;It's ugly code that &lt;strong&gt;looks unnecessary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Delete it, feel intelligent, and three days later discover it was quietly holding a revenue flow together.&lt;/p&gt;

&lt;p&gt;Eventually, the team joined.&lt;/p&gt;

&lt;p&gt;At first, the architecture caused friction.&lt;/p&gt;

&lt;p&gt;Fair enough.&lt;/p&gt;

&lt;p&gt;Something that looks beautiful after two sleepless nights designing it can look like an &lt;strong&gt;elaborate tax scheme&lt;/strong&gt; to everybody else.&lt;/p&gt;

&lt;p&gt;Then people challenged it.&lt;/p&gt;

&lt;p&gt;Changed it.&lt;/p&gt;

&lt;p&gt;Improved it.&lt;/p&gt;

&lt;p&gt;It stopped being &lt;strong&gt;my architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It became &lt;strong&gt;our application&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The New World
&lt;/h2&gt;

&lt;p&gt;We moved toward a containerized setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;              User
                │
                ▼
         ┌─────────────┐
         │ Akamai Edge │
         │ CDN / Cache │
         └──────┬──────┘
                ▼
         ┌─────────────┐
         │   AWS ALB   │
         └──────┬──────┘
                ▼
         ┌─────────────┐
         │ ECS Fargate │
         │ Containers  │
         └──────┬──────┘
                │
        ┌───────┴───────┐
        ▼               ▼
     Next.js         Backend APIs
    SSR / ISR             │
                          ▼
                      Data Layer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Next.js&lt;/strong&gt; handled SSR and ISR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ECS Fargate&lt;/strong&gt; ran containers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ALB&lt;/strong&gt; routed traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Akamai&lt;/strong&gt; handled the edge.&lt;/p&gt;

&lt;p&gt;For the first time, production could be built from source instead of being lovingly reconstructed by humans.&lt;/p&gt;

&lt;p&gt;Beautiful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suspiciously beautiful.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because this was also an SEO-heavy platform, we had to preserve URLs, redirects, metadata, rendering behavior, and caching.&lt;/p&gt;

&lt;p&gt;Turns out search engines don't care that your architecture diagram looks cleaner.&lt;/p&gt;




&lt;h2&gt;
  
  
  Migration Day
&lt;/h2&gt;

&lt;p&gt;Before cutover, we prepared backups, a rollback plan, database movement, DNS, ALB health checks, monitoring, and the WIP page.&lt;/p&gt;

&lt;p&gt;We also temporarily reduced the &lt;strong&gt;Akamai edge TTL&lt;/strong&gt; so changes would propagate faster.&lt;/p&gt;

&lt;p&gt;This seemed sensible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remember that.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Friday, around 6 PM:&lt;/p&gt;

&lt;p&gt;Code freeze.&lt;/p&gt;

&lt;p&gt;WIP page up.&lt;/p&gt;

&lt;p&gt;Database moved.&lt;/p&gt;

&lt;p&gt;Containers online.&lt;/p&gt;

&lt;p&gt;Domains switched.&lt;/p&gt;

&lt;p&gt;ALB targets healthy.&lt;/p&gt;

&lt;p&gt;Logs streaming.&lt;/p&gt;

&lt;p&gt;Most conversations became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Done?"&lt;/p&gt;

&lt;p&gt;"Checked."&lt;/p&gt;

&lt;p&gt;"Check again."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eventually, WIP came down.&lt;/p&gt;

&lt;p&gt;Homepage loaded.&lt;/p&gt;

&lt;p&gt;Authentication worked.&lt;/p&gt;

&lt;p&gt;Core flows worked.&lt;/p&gt;

&lt;p&gt;SEO pages rendered.&lt;/p&gt;

&lt;p&gt;APIs responded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We had actually migrated it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This would've been an excellent place for the story to end.&lt;/p&gt;

&lt;p&gt;Production disagreed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Is Memory Still Going Up?
&lt;/h2&gt;

&lt;p&gt;Real traffic arrived.&lt;/p&gt;

&lt;p&gt;Memory climbed.&lt;/p&gt;

&lt;p&gt;In lower environments, the frontend might idle around &lt;strong&gt;150–200 MB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Production crossed &lt;strong&gt;2 GiB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then we looked at request metrics.&lt;/p&gt;

&lt;p&gt;Some dashboards were reporting traffic in the &lt;strong&gt;tens of thousands of requests per second&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's probably not ideal.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Crawler storm?&lt;/p&gt;

&lt;p&gt;Scraper?&lt;/p&gt;

&lt;p&gt;DDoS?&lt;/p&gt;

&lt;p&gt;So began the bot hunt.&lt;/p&gt;




&lt;h2&gt;
  
  
  Everyone Is a Suspect
&lt;/h2&gt;

&lt;p&gt;We had:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Akamai&lt;/strong&gt; for edge traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ALB metrics&lt;/strong&gt; for origin traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loki&lt;/strong&gt; for application logs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CloudWatch&lt;/strong&gt; for infrastructure.&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;Grafana&lt;/strong&gt; for converting numbers into anxiety.&lt;/p&gt;

&lt;p&gt;We correlated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP addresses&lt;/li&gt;
&lt;li&gt;User agents&lt;/li&gt;
&lt;li&gt;Routes&lt;/li&gt;
&lt;li&gt;Cache hits and misses&lt;/li&gt;
&lt;li&gt;Response codes&lt;/li&gt;
&lt;li&gt;Origin request rates&lt;/li&gt;
&lt;li&gt;Container memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We checked IP reputation.&lt;/p&gt;

&lt;p&gt;Blocked obvious bots.&lt;/p&gt;

&lt;p&gt;Filtered suspicious user agents.&lt;/p&gt;

&lt;p&gt;Checked for origin bypass.&lt;/p&gt;

&lt;p&gt;Inspected cache headers.&lt;/p&gt;

&lt;p&gt;Streamed logs.&lt;/p&gt;

&lt;p&gt;Watched Grafana.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find suspicious traffic
        │
        ▼
Block it
        │
        ▼
Watch Grafana
        │
        ▼
Find another pattern
        │
        ▼
Watch Grafana
        │
        ▼
Question career choices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It felt like operating an extremely boring air-defense system.&lt;/p&gt;

&lt;p&gt;Except the missiles were &lt;strong&gt;HTTP GET requests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Midnight passed.&lt;/p&gt;

&lt;p&gt;Then 1 AM.&lt;/p&gt;

&lt;p&gt;Then 2 AM.&lt;/p&gt;

&lt;p&gt;At some point, our VP looked at us and said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Let's stop. We'll continue tomorrow."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fair.&lt;/p&gt;

&lt;p&gt;He had a family to go home to.&lt;/p&gt;

&lt;p&gt;Well, I had Grafana.&lt;/p&gt;

&lt;p&gt;A few of us continued until around &lt;strong&gt;6:30 AM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I went home, freshened up...&lt;/p&gt;

&lt;p&gt;and came back.&lt;/p&gt;

&lt;p&gt;This was not resilience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I simply couldn't mentally close the browser tab.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Please don't take this as career advice.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Plot Twist: We Were Attacking Ourselves
&lt;/h2&gt;

&lt;p&gt;Saturday morning.&lt;/p&gt;

&lt;p&gt;Almost empty office.&lt;/p&gt;

&lt;p&gt;Grafana. Loki. Akamai. AWS. Logs.&lt;/p&gt;

&lt;p&gt;Too many tabs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three nearly-dead neurons left. All three were debugging production.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then we stopped asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Who's attacking us?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and asked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What if nobody is?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The frontend used &lt;strong&gt;Next.js Incremental Static Regeneration (ISR)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;During migration, we'd shortened cache durations because we wanted changes to propagate quickly.&lt;/p&gt;

&lt;p&gt;At the CDN layer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short Akamai TTL → more requests reaching origin.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the application layer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short ISR revalidation → popular pages regenerating more often.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both decisions looked reasonable individually.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 │
 ▼
Short Edge TTL
 │
 ▼
More Origin Requests
 │
 ▼
Low ISR Revalidation
 │
 ▼
Frequent Regeneration
 │
 ▼
SSR + Data Fetching
 │
 ▼
CPU + Memory Pressure
 │
 ▼
Grafana
 │
 ▼
"WE'RE UNDER ATTACK!"
 │
 ▼
No.

It's us.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There it was.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next.js wasn't broken.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Akamai wasn't broken.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS wasn't broken.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The load balancer wasn't secretly plotting against us.&lt;/p&gt;

&lt;p&gt;Every component was doing exactly what we'd configured it to do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our assumptions were broken.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those are the bugs that hurt the ego just enough to become permanent memories.&lt;/p&gt;

&lt;p&gt;We adjusted ISR revalidation.&lt;/p&gt;

&lt;p&gt;Restored saner edge caching.&lt;/p&gt;

&lt;p&gt;Reduced unnecessary origin work.&lt;/p&gt;

&lt;p&gt;Then we stared at Grafana again.&lt;/p&gt;

&lt;p&gt;Traffic dropped.&lt;/p&gt;

&lt;p&gt;Memory settled.&lt;/p&gt;

&lt;p&gt;Origin pressure fell.&lt;/p&gt;

&lt;p&gt;The application stopped trying to kill itself.&lt;/p&gt;

&lt;p&gt;Stupid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But beautiful.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Changed
&lt;/h2&gt;

&lt;p&gt;The migration didn't magically make everything perfect.&lt;/p&gt;

&lt;p&gt;Production immediately made sure we understood that.&lt;/p&gt;

&lt;p&gt;But we had changed something fundamental.&lt;/p&gt;

&lt;p&gt;Production was no longer manually reconstructed from a separate source-control world.&lt;/p&gt;

&lt;p&gt;Containers gave us reproducible runtimes.&lt;/p&gt;

&lt;p&gt;AWS gave us observable infrastructure.&lt;/p&gt;

&lt;p&gt;Akamai became part of an intentional caching strategy.&lt;/p&gt;

&lt;p&gt;And we finally understood much more of what happened between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;200 OK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That alone felt enormous.&lt;/p&gt;




&lt;h2&gt;
  
  
  Four Years Earlier, I Wasn't a Software Engineer
&lt;/h2&gt;

&lt;p&gt;My original background is &lt;strong&gt;mechanical engineering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I moved into software because I liked building things and understanding how they worked.&lt;/p&gt;

&lt;p&gt;Kidding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short-term dopamine.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Four years later, I was sitting in an almost empty office debugging CDN caching, ISR, container memory, and load-balancer traffic on a production system we'd just moved to AWS.&lt;/p&gt;

&lt;p&gt;I still have an absurd amount to learn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which is disappointing. I thought that was it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That weekend made this painfully obvious.&lt;/p&gt;

&lt;p&gt;But it also reminded me why I chose this job.&lt;/p&gt;

&lt;p&gt;We started with something we didn't completely understand.&lt;/p&gt;

&lt;p&gt;We designed.&lt;/p&gt;

&lt;p&gt;We argued.&lt;/p&gt;

&lt;p&gt;We broke assumptions.&lt;/p&gt;

&lt;p&gt;We asked for help.&lt;/p&gt;

&lt;p&gt;We shipped.&lt;/p&gt;

&lt;p&gt;Production punched us in the face.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And we fixed that too.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Also:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sleep is an excellent technology. I strongly recommend adopting it.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  I Hope AI Never Takes This Part Away
&lt;/h2&gt;

&lt;p&gt;AI was there.&lt;/p&gt;

&lt;p&gt;GPT/Claude sat beside Grafana, Loki, AWS consoles, terminals, and documentation.&lt;/p&gt;

&lt;p&gt;I use AI every day.&lt;/p&gt;

&lt;p&gt;It makes me faster.&lt;/p&gt;

&lt;p&gt;But I remember when being stuck meant reading documentation, digging through source code, finding a seven-year-old Stack Overflow answer from some random user who somehow knew exactly what was wrong, breaking something, fixing it, and slowly building the mental model yourself. &lt;strong&gt;Mental model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I don't want all of that back.&lt;/p&gt;

&lt;p&gt;Nobody needs to manually center another &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; for character development.&lt;/p&gt;

&lt;p&gt;But I hope we don't optimize away &lt;strong&gt;understanding&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let AI write boilerplate.&lt;/p&gt;

&lt;p&gt;Let it explain logs.&lt;/p&gt;

&lt;p&gt;Let it help debug.&lt;/p&gt;

&lt;p&gt;But give me the architecture decisions.&lt;/p&gt;

&lt;p&gt;Give me the production incidents.&lt;/p&gt;

&lt;p&gt;Give me the bug where &lt;strong&gt;every component is working correctly and the entire system is still wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Give me that moment when Grafana finally starts moving in the right direction and everyone realizes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Oh. We were the DDoS.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because somewhere between &lt;strong&gt;SVN, containers, AWS, Akamai, ISR, an almost-melted origin, and a Saturday morning with far too little sleep...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I remembered why I chose software engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And I'd still choose it again.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Names, domains, and identifying project details have intentionally been generalized. The technical events and lessons are based on a real production migration. Profanity has been removed to maintain professional standards. The production incident itself had no such standards.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>career</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
