The Paradox of Fancy Tooling
View original- current
Summary (TL;DR)
Opinionated frameworks raise the floor for weak engineers but lower the ceiling for strong ones. When a project needs something the framework wasn't designed for, the senior developer pays the cost in workarounds. JavaScript's first-class functions gave developers a simple, flexible primitive that let them build beyond what its creators imagined. That freedom matters more than rich tooling that eventually traps you. Teams should measure tools by days to the first deviation, not days to the first demo.
A good carpenter does a lot with a good hammer. Hand the same carpenter a hammer shaped like a chainsaw and the work gets worse and slower, not better or faster. The grip fights the hand. The weight sits wrong. The tool does more than a hammer needs to, and does very badly the one thing a hammer is for.
Most software tooling tends to drift towards a chainsaw-shaped hammer.
Frameworks arrive with routing, state management, auth scaffolding, a build pipeline, and a strong opinion about where your files go. A developer who has not read the HTTP spec can ship a working API on top of it in a weekend. The demo runs, the reviewer sees behavior and approves.
That looks like progress but I don’t think it is — at least not the kind that compounds the value.
Here is the paradox: Opinionated tooling raises the floor and lowers the ceiling in one single move. A framework carries a weak engineer past the parts they have not learned, so the floor rises. The ceiling comes down later, when the work runs into a context the framework’s authors did not picture. Step outside that context and the wall is no longer yours. It belongs to whoever wrote the framework.
A strong engineer hits that wall and starts fighting the tool. They read the framework’s internals and write a workaround that feels like a hack. The weekend the framework saved a junior costs a week to the senior, and the senior is the one who pays the cost.
The framework that carries a weak engineer is the same framework that traps a strong one.
Tools without opinions don’t behave this way. They hand you primitives and step back.
I’ve worked in JavaScript for most of my career of 20 years, including years co-maintaining a small open-source library that millions of sites still load. JavaScript is not a well-designed language. The first prototype was built in about ten days in 1995, and the quirks from that rush sit in the language today. However, JS won anyway. One decision explains most of that:
First-class Functions
A first-class function is the basic hammer. You hold a function the same way you hold a number or a string. You can pass it into another function or hand one back.
Callbacks, event handlers, middleware, reducers: all of it comes from that one idea. The language gave you a small construct with almost nothing attached, then stepped out of the way.
So a language with no module system at the start, loose typing, and equality rules people still mock became the one running on nearly every site on the web. The construct underneath was right, and engineers who understood it built things its designers had not planned for.
The languages it competed with made the opposite trade. Java shipped the same year with class hierarchies, deep inheritance, and configuration you wrote by hand. Its enterprise stack had a fixed idea of how a web application should be shaped. For most applications that idea was wrong, and escaping it meant leaving the ecosystem behind.
That is the trap with rich tooling. It does a lot of things, and it does few of them in a way you can bend.
I have watched this play out more than once. A change that takes an afternoon on plain tools turns into a week on the framework, since the framework has to be worked around first.
A weak engineer can reach “good enough” on a heavy framework. The framework already made the hard calls for them. The output ships, and it can look consistent next to the work of stronger people.
The cost does not show up in the demo. It surfaces later, the first time the product needs something the framework was not built for.
Does any of this mean frameworks are a mistake? No. It means most teams measure them wrong.
They count the days to the first demo. The number that matters is the days to the first deviation, the first time you need something the tool will not hand you.
That is when you find out what you really bought yourself into.