I read the "My 2026 Tech Stack is Boring as Hell" post and nodded along. Monolith? Yes. SQLite? Beautiful. Single VPS? Chef's kiss.
Then I noticed: you're still using React.
Not that there's anything wrong with React—it solves real problems. But if we're talking about boring, I think we can go further.
The Stack That Predates Your Framework
Here's what I'm actually shipping with:
- The interface: The terminal. Not a web app. Not a GUI. A CLI that takes text and returns text.
- The glue: Bash, Python scripts, JSON. Things that work on every Linux box since forever.
- The frontend: When I need one, HTML + CSS + vanilla JavaScript. No build step. No node_modules. Just files.
"But that's not a web stack!" Correct. Most of what I build doesn't need to be a web app. It needs to work.
Rented Knowledge vs. Owned Knowledge
Here's the thing about React: you're renting that knowledge.
React's mental model, its hooks, its ecosystem—you're paying cognitive rent on abstractions someone else controls. When the next thing comes along (and it will), that knowledge depreciates.
But the terminal? HTTP? JSON? SQL? That's owned knowledge.
My bash scripts from 2015 still run. My Grunt configs are artifacts from a dead civilization.
The Lindy effect seems to hold: things that have survived tend to keep surviving. The Unix philosophy has been here for 50 years. I'm betting it'll outlast whatever framework is hot right now. Maybe I'm wrong. But historically, that's been a safe bet.
Standards vs. Ecosystems
Here's something the web got right, before frameworks made us forget: separation of concerns.
HTML is content. CSS is presentation. JavaScript is behavior. Each one independently useful. Each one independently evolvable. You can write HTML without touching CSS. You can style with CSS without writing JavaScript. They compose because they don't depend on each other's internals.
React collapses this. Your content, presentation, and behavior are all entangled in JSX. Want to change how something looks? You're touching the same file that handles what it does. The "component" abstraction isn't separation—it's bundling.
I'm not saying React is wrong. For some problems, bundling makes sense. But recognize what you're trading away: the ability to change one layer without understanding all the others.
Standards compose. Ecosystems entangle.
When you learn HTML, that knowledge works everywhere HTML works. When you learn React's way of doing things, that knowledge works... in React. And the next version of React might change it anyway.
Don't Learn Ecosystems
This is my heretical take: don't invest heavily in learning ecosystems.
Ecosystems are too big to fit in your head. They have their own idioms, their own tooling, their own ways of thinking. By the time you've internalized React's mental model, you've spent cognitive budget that could have gone to things that transfer.
Ecosystems are controlled by others. They can change direction, get abandoned, or just fall out of fashion. The npm graveyard is full of packages that were essential three years ago.
Ecosystems don't compose well with things outside themselves. Try mixing React with a vanilla JS library sometime. It's possible, but you're fighting the grain.
Learn standards. Learn protocols. Learn the boring stuff that predates the framework wars.
"But CLI Is Hard to Learn"
This used to be true.
Now I have an LLM that can discover flags, explain options, and compose commands better than I can remember them. The discoverability problem that made GUIs necessary? Largely solved.
And here's the thing: LLMs love CLI tools.
Why? Because they're text-native. Text in, text out. Predictable behavior. Small surface area. The same properties that make Unix tools composable make them perfect for AI orchestration.
I write simple CLI tools. I write a short markdown file explaining how to use them. Then Claude figures out the rest. When I say "cross-post this to the usual platforms," it knows which commands to run, in what order, handling errors along the way.
Try doing that with your React component library.
Composability Is the Point
The original post mentions "I just need Ctrl+F" for debugging a monolith. Same energy.
Unix philosophy: small tools that do one thing well, connected by text streams. Each piece fits in your head. The composition is where the power lives.
This isn't nostalgia. It's engineering.
When your abstraction layer breaks at 2 AM, do you understand it well enough to fix it? With a 200-line Python CLI, I do. With a framework that abstracts away the things I actually need to debug? Maybe not.
Simple tools fail simply. Complex tools fail in ways that require an archaeology degree to understand.
Where This Breaks Down
I'm not a zealot. Real-time applications? Persistent connections? Yeah, text streams struggle there. Rich media? Not everything is text.
But be honest: how much of what you build actually needs those things? Most CRUD apps don't need WebSockets. Most internal tools don't need a React SPA.
The boring answer is usually right.
The Uncertainty Hedge
Nobody knows what the world looks like in five years. Maybe less.
AI is rewriting the rules of what developers do and how we do it. I'm using LLMs to write code, orchestrate tools, and automate workflows that would have been science fiction three years ago. What's the right architecture for a world where an AI can generate boilerplate faster than you can type it? I don't know. Nobody does.
Meanwhile, the ecosystem churn continues. Remember when everyone needed webpack? Then it was parcel. Then vite. Then... whatever's next. Each transition costs you. Each migration is hours you could have spent building.
So I hedge:
- Minimal dependencies. Fewer things that can break when the ecosystem shifts.
- Transferable skills. Terminal knowledge transfers across paradigm shifts better than framework knowledge.
- Graceful degradation. When everything changes, simple tools adapt. Complex tools shatter.
I'm not claiming this is the right strategy. I'm claiming it's a strategy for navigating uncertainty. Your mileage may vary.
The Boring Tool I Refuse to Give Up
You asked what boring tool we refuse to abandon.
Mine is the terminal itself. Not any specific tool—the interface. The thing that's been roughly the same since before I was born. I'm betting it'll outlast whatever we're hyped about today. But I've been wrong before.
Here's the deeper question: What will still work when everything changes?
I don't know. Nobody does. But I have a heuristic: bet on things that have survived multiple paradigm shifts. Text in, text out. Tools that compose. Standards over ecosystems. Knowledge you own rather than rent.
Maybe this is the wrong bet. Maybe the next paradigm will obsolete everything I know about terminals and Unix and text processing. If that happens, I'll adapt—probably using whatever new tools are available to learn the new thing.
But until then, I'm staying boring. Even more boring than you.
In response to My 2026 Tech Stack is Boring as Hell
Top comments (2)
The distinction you made between "Standards" and "Ecosystems" is the most important part of this piece.
We often confuse learning a specific library's syntax with learning actual software engineering. Like you said, standards compound in value over decades, while ecosystems depreciate every time a breaking change is released.
Solid write-up.
Exactly! Perfectly healthy approach