The Right Tool

The right tool is the one that is fastest.
The right tool is the one that is cheapest.
The right tool is the one you have with you.
The right tool is the one that doesn't break.
The right tool is the one that is performant.
The right tool is the one that you can afford.
The right tool is the one that is open sourced.
The right tool is the one that never regresses.
The right tool is the one that gets the job done.
The right tool is the one that has the most buzz.
The right tool is the one that evolves over time.
The right tool is the one that is "battle-tested."
The right tool is the one that triages its issues.
The right tool is the one that can be taken apart.
The right tool is the one that is easy to replace.
The right tool is the one that is easy to maintain.
The right tool is the one that patches dependencies.
The right tool is the one that generates excitement.
The right tool is the one that continuously releases.
The right tool is the one that accepts contributions.
The right tool is the one that is easy to keep clean.
The right tool is the one that has form and function.
The right tool is the one that everyone else is using.
The right tool is the one that doesn't require gloves.
The right tool is the one that has clear documentation.
The right tool is the one that is simple to start with.
The right tool is the one that properly follows semver.
The right tool is the one that works within constraints.
The right tool is the one that you are permitted to use.
The right tool is the one that can go with you anywhere.
The right tool is the one that makes callouses worth it.
The right tool is the one that has clear warning labels.
The right tool is the one that has the most GitHub stars.
The right tool is the one that has the boldest marketing.
The right tool is the one that you will have for a while.
The right tool is the one that has the largest community.
The right tool is the one that has strong code of conduct.
The right tool is the one that has been around a long time.
The right tool is the one that requires the least training.
The right tool is the one that keeps end user goals in mind.
The right tool is the one that needs the least configuration.
The right tool is the one that has the best customer service.
The right tool is the one that has a sustainable funding model.
The right tool is the one that your buddy over there used once.
The right tool is the one with a plan for internationalization.
The right tool is the one that clearly states its prerequisites.
The right tool is the one that adapts to unexpected user demands.
The right tool is the one that helps you when you make a mistake.
The right tool is the one that is built with extensibility in mind.
The right tool is the one that entices you to use it for everything.
The right tool is the one that is most accessible to potential users.
The right tool is the one that the gatekeepers agree is most correct.
The right tool is the one that passed thorough quality assurance testing.
The right tool is the one that can be duct taped back together in a pinch.
The right tool is the one that helps tasks be accomplished "the right way."
The right tool is the one that applies the proper amount of force on its environment.
The right tool is the one that communicates with clarity and does not patronize new users.
The right tool is the one that can be upgraded from version to version with minimal retooling.
The right tool is the one that has affordances to make it easy to do the right thing and hard to do the wrong thing.
The right tool is the one that has comprehensive test coverage encompassing unit, integration, and functional suites.
The right tool is the one that has type definitions so users can confidently interact with the API during development.
The right tool is the one that automates code quality formatting and linting so there is no question what expectations are from outside contributors.

Wow. That's one tool, right? No, wait. How could it? No objective truth could come from such short a statement. Maybe if it was a longer statement:

The right tool is the one that , that is fastest, that is cheapest, you have with you, that doesn't break, that is performant, that you can afford, that is open sourced, that never regresses, that gets the job done, that has the most buzz, that evolves over time, that is "battle-tested," that triages its issues, that can be taken apart, that is easy to replace, that is easy to maintain, that patches dependencies, that generates excitement, that continuously releases, that has the largest community, that accepts contributions, that is easy to keep clean, that has form and function, that everyone else is using, that doesn't require gloves, that has clear documentation, that is simple to start with, that properly follows semver, that works within constraints, that you are permitted to use, that can go with you anywhere, that makes callouses worth it, that has clear warning labels, that has the most GitHub stars, that has the boldest marketing, that you will have for a while, that has strong code of conduct, that has been around a long time, that requires the least training, that keeps end user goals in mind, that has a sustainable funding model, that needs the least configuration, that has the best customer service, that your buddy over there used once, with a plan for internationalization, that clearly states its prerequisites, that adapts to unexpected user demands, that helps you when you make a mistake, that is built with extensibility in mind, that entices you to use it for everything, that is most accessible to potential users, that the gatekeepers agree is most correct, that passed thorough quality assurance testing, that can be duct taped back together in a pinch, that helps tasks be accomplished "the right way," that applies the proper amount of force on its environment, that communicates with clarity and does not patronize new users, that can be upgraded from version to version with minimal retooling, that has affordances to make it easy to do the right thing and hard to do the wrong thing, that has comprehensive test coverage encompassing unit, integration, and functional suites, that has type definitions so users can confidently interact with the API during development, and that automates code quality formatting and linting so there is no question what expectations are from outside contributors.

So much better!

I've managed to say everything and nothing. This is a masterful amount of "it depends" bullshit only a senior engineer could dare speak. I can make assessments that confirm, overlap, contradict, stray, refute, support, or sabotage my central argument. We cannot approach absolute truth here, in my opinion, because life is just damned more complicated than that. And it's easy to get caught up in the tweet of the moment, or the deep-dive blog post throwing down The Facts, or the hyped conference, or what aquihire happened yesterday... but it's all exhausting, and it feels like local optimization. We're all makers who care about our craft and and our tools and the things we build with them. We hope to never lose sight that these tools serve a purpose beyond the making.

I don't have to know which is the right tool.
I need to know how to find out.