You’re Not Shipping Code. You’re Managing a Ritual.

By Rowan Trace
May 5, 2025
3 min read

At some point, frontend devs became build engineers without realizing it.

What started as a webpack.config.js turned into a devops theater production: Vite for dev, esbuild for speed, tsc for types, SWC for transforms, Babel for legacy, Turborepo for caching, Prettier for vibes.

Half your time isn’t spent building apps — it’s spent building the build.

You’re debugging sourcemaps. Resolving plugin conflicts. Reading RFCs for bundlers that are “blazingly fast” but break on Tuesdays.

This is not productivity.
This is paranoid overengineering masquerading as modern development.

The Toolchain Tax

Every tool you add comes with:

  • Mental overhead — You now need to understand how it works and how it breaks.
  • Integration pain — Tools don’t compose cleanly. They compose chaotically.
  • Version fragility — Upgrades become diff hell. Dependencies fall out of sync.
  • Opaque performance issues — Is it Vite? ts-node? A rogue plugin? Flip a coin.

Most teams aren’t speeding up delivery.
They’re spending sprints fixing their own infrastructure.

When Tools Become a Cult

The web dev ecosystem loves “best practices” that are suspiciously complex.

We optimize before we validate.
We scaffold before we sketch.
We argue about whether tsx should go in src/pages or app/routes instead of asking, “Do we need this at all?”

The result is yak-shaving disguised as progress.
Shiny tools justify their own complexity by promising escape from older complexity.
You chase simplicity through abstraction — and end up with neither.

The Paradox: Simpler Is Harder

The most robust stacks look boring:

  • Vanilla HTML/CSS with sprinkles of JS
  • Minimal build steps (or none at all)
  • Clear, predictable deployment paths

But boring doesn’t tweet well.
It doesn’t have a Discord server.
It doesn’t spawn a startup.

So we overbuild to look modern.
We mistake complexity for capability.

Sanity Check: Productive vs. Paranoid

SignalProductiveParanoid
BuildsOne tool, minimal configMultiple layers, redundant transforms
DX focusReal developer needsEdge-case fetishism
Stack changesBased on app needsBased on Twitter threads
DebuggingRare and obviousFrequent and mysterious
Tool upgradesSafe and boringStressful and breaking

Audit Your Stack. Then Burn It Down.

Ask yourself:

  • Do we need this tool, or are we compensating for another tool’s failure?
  • Is our build pipeline solving real problems — or creating new ones?
  • Could we replace three layers with one sane default?

Your toolchain should be a scaffold — not a second job.

Build less.
Ship more.
And stop confusing clever with useful.

Comment, Share, or Build Something With This

Found this useful? Disagree completely? Let's discuss it.

Send me a message

Related Posts