i make tools.
Yes, i code, but little i do is stuff that many folks would poke at. Instead, i make stuff that helps folk make stuff.
Nothing in this world makes me happier than seeing folks use my tools to do something cool.
Nothing in this world makes me sadder than someone having to understand my tool as well as i do in order to use it.
A tool provides some advantage over not using the tool. A tool can make something easier or more fluid. It can free people from deep knowledge by giving them something that lets them focus on some other problem. If my tool can't provide that, then it's a bad tool.
Sadly, as a tool maker, i tend to deal with a lot of things that are not tools. They try to be, but fail. They hide their function, or use unfamiliar things or focus so hard on being a wonderful tool that they've forgotten what they were supposed to make easier.
Here are some things i try to keep in mind:
- Be Simple. Your tool should do the least possible things very well.
- Be Familiar. My tools tend to have Makefiles. Not because i think make is wonderful, but because it provides just enough function that i can script unfamiliar things. My scripts tend to be in Bash, because that shell is available damn near everywhere. i have scripts called "run" that contain the most generic parameters so the app can start running and serving (if that's it's job).
- Welcome Ignorance Comment configuration files. Explain what things are, why you set those values, and what values are available. Avoid acronyms and point to where users can read more.
- Don't get in the way Your user doesn't want to learn the many things you did. They have other problems you're not aware of. You can provide lots of knobs and controls, but either give them sane defaults or provide clear examples based on real uses.
There's room for complex tools, but those should be built for specialists. A master tool maker is someone that can make something very complex simple and easy enough for someone to pick up quickly and grow into. (i am by no means a master tool maker, but i try to be.)
If your making tools, you should ask yourself who you're making tools for?