There's lots of software around that bugs me in one way or another. After a particularly irritating debugging session a few months ago, I made a list of all the ways I could think of in which software could annoy me, in the hopes that I might be able to avoid them in the future. Software can annoy me if:
- it's horrifically inefficient
- it doesn't work reliably
- it misses the point of Unix (or whatever OS or environment it's running in)
- it doesn't use Unix-style configuration files
- it's not free software
- it does lots of things badly, rather than one thing well
- it's a pain to install
- it duplicates functionality available elsewhere
- it isn't Unicode (or UTF-8, or binary) safe
- it concentrates on appearance rather than functionality
- it cannot be debugged or maintained
- it is insecure, and cannot easily be made so
- it has poor UI design
- it has well-known but unfixed (or unfixable) bugs
- it uses proprietary or excessively complex data formats
- it uses too much memory or disk space
- its interface has obvious spelling errors
- it is needlessly inflexible (for example, file name restrictions)
- it cannot be automated easily
- it doesn't use standard libraries
- it reimplements standard libraries
- it includes its own (perhaps-modified) copies of standard libraries
- it's needlessly unportable
- it's written in an inappropriate language
Of course, most of those apply to software I've written at one time or another -- but it's a useful checklist...