How I evaluate software

When I’m looking at software, I evaluate a lot of criteria. Usually, it’s all in my head, since I’m good at keeping a feel for what others might use hard numbers for. Things I look at include:

  • Arrogance. Does the software try to invent a new organizational system, or does it just submit to the perfectly workable way that everyone else does it: libraries in /usr/lib, config files in /etc. Has it ignored installation issues entirely, and assumes it’ll run out of the directory it’s unpacked in? (This is a red flag for me: anything that demands special treatment like this is usually going to demand special attention every single time the system boots, every time it’s installed on a new machine in the cluster, it’ll need babysitting every step of the way. As a sysadmin who has plenty to attend to, this is not acceptable unless the software saves me a lot of time. That hasn’t happened yet, either.)
  • Simplicity. Can I get an overview of how the code works in a few minutes? Some idea of what parts are magic, and what parts are easy? Is there magic everywhere, or just in a few performance critical spots? Boring is good. Really. If the way everyone else does stuff works, please don’t reinvent the wheel. I grok the way everyone else does it already.
  • Modularity. If the interesting part of your application is pretty independent of the rest, do I have to install it all?* Orthagonality. Are unrelated parts tangled together? Can I use the pieces in ways you didn’t intend? This is a good thing if so.
  • Standards compliance. That thing about arrogance? Yeah, that. Only more so.