Created: 2021-09-09 09:48
What makes for a good tool?
Intuition? Ease of use? Muscle memory?
Despite all the good Git (and GitHub) GUIs out there many of us still use the CLI. I wouldn’t say that git
is intuitive or easy to use but the most used git commands are. I’m not looking at you git checkout
.
The faster we can get results the better. I love searching code with ripgrep for that exact reason. Results show almost instantly.
I would say then, it’s all about UX.
There’s a degree of personal preference of course. And that might be the strongest factor. But I don’t want to get into that, because it is, by definition, personal.
But then the question is, how doe we define good UX for programming tools?
Fast feedback cycle
Unless there’s no other way but to do it slow, then we’ll prefer things that work fast. Be it startup, reload, and/or response speed. A tool that feels snappy wins.
Automation
We have a fixation with automation. So any tool that will let us automate things will be adding to it’s UX level.
Leverages muscle memory
When you are using a tool you don’t want to be remembering commands and be thoughtful about the process of using the tool. You want to get the results without thinking about how you to get there. That’s way many of us love Vim or Emacs and got to crazy to extents leverage them.
Simplicity
A tool needs to be simple. I keep coming to the terminal to do my tasks because how much simpler it’s (to me) than using any GUI.
Do things well
The UNIX philosophy: do one thing and do it right. Even a tool like git that does many things one could argue that it’s actually a set of tools all bundled together (on the note of do one thing, git checkout
).
Feature set
It doesn’t have to be convoluted or polluted of crappy features. But it has to have enough of them. In other words, have the right amount of features, not more, not less.
The right defaults
create-react-app
and Jest were a breath of fresh air because they worked out of the box with no (or much less) configuration hustle than other projects. And yet Jest can be extensively configured and extended by plugins. CRA on the other hand only allows for a few small configurations and then the user has to eject to be able to change more stuff.
Composability
The ability to play with other tools. Think about Unix pipes. Tools that play well with others by using pipes are way more powerful. Tools that are easily transformed into editor extensions (by exposing an API, working properly with stdin
/stdout
, and/or by adhering to the Language Server Protocol).
Conclusion
Stop for a moment and think about the tools you use. You might not be aware of some of them. Think about what is making you use it, specially for the ones you have a choice.
These concepts are simple (not easy though) and can be applied to the work we do. Go and build awesome stuff with these ideas in mind. Make your own tools