The age-old adage that “the poor carpenter blames his tools” holds true even in the modern era. While many developers are stuck complaining about why Language X lacks Feature Y, few are actually up to date on the language they use daily. If you asked them about a single new feature introduced in the latest version of their favorite language, they might not even know.
The carpenter metaphor goes a bit further as well. You might assume that an ancient master carpenter would have much lower productivity than a modern one. How could they not? After all, the modern craftsman—with their mighty inventions like rotating saws, electric drills, and chemical treatments—has access to tools that could complete a project before our erstwhile artisan has even stripped a log.
For some tasks, this is true; a lumber mill does what rough carpenters need hours to do in minutes, at a fraction of the cost. Regardless, actually building something isn’t easy.
In fact, it is so difficult that here in the USA, we’ve been getting worse at it. Look at this chart of construction productivity over time:

All sectors except construction (Orange) have exploded in productivity since the 50s. Agricultural productivity, for example, has doubled four times! What about Construction? Well, between 1947 and 2010, the annual growth rate was 0.1%.
Further investigation yields something even more alarming. For a while, construction productivity kept pace with other sectors, even taking second place behind agriculture. After the mid-60s, however, this trend completely reversed itself, and within less than 50 years, the level of productivity in construction had more than halved! What happened?
One major contributing factor is the lack of accountability inherent to the space. If a contractor fails at one of their designated tasks, they are often incentivized to shed blame elsewhere. They couldn’t get the order in because one of their suppliers was out of a necessary material. One of their subcontractors failed to perform one of their deliverables. Et cetera, et cetera.
Software Engineering as a discipline is at risk of falling prey to the same disease: negligence. Negligence from higher-ups is often branded as “delegating”—putting responsibilities elsewhere—or the incredibly sinister “strategic reorganization” (mass pre-emptive layoffs).
However, the negligence I see from my peers often takes the form of whining. Whining, as Theodore Roosevelt put it, is:
“Complaining without proposing a solution.”
We hear it all the time:
“JavaScript is worthless garbage.” “My Teacher/Boss/Lover/Parent hates me.” “My code won’t work.”
All of these sentences reflect a deep lack of personal accountability. Could it be that the code you wrote is worthless? What might you have done to incur their ire? What can you do to fix it?
“What can you do to fix it?” must have been one of the questions that the developers of TypeScript asked themselves. If JS lacks needed type safety, what can I do? I am convinced that this question led to the development of the TypeScript ecosystem. And if you don’t like it? Get a community together and work for a decade to build something else yourself.
Don’t blame your tools; help build new ones. More importantly, you need to put in the time to become acquainted with your current tools. Becoming an expert at anything takes deliberate practice and focus.
Don’t get me wrong, this practice might be painful and involve personal sacrifice. But if you do it every day, it gets easier. The hard part is that you have to do it every day.
Dodging accountability is easy to do, and when an industry develops the habit, it never really goes away. The consequences for a construction worker might be an uneven gutter, but for scientists, engineers, and politicians, the consequence is often the loss and degradation of human lives.