Does what it says on the tin. (Datasheet, specification, whatever).
Integrates with the OS, whichever that may be, and uses system resources as appropriate without hogging them or screwing them up.
Has a straightforward and intuitive user interface.
Does not attempt to access memory that has not been allocated to it, and releases allocated memory when it's finished.
When the documentation says it will do something, it does exactly that.
If presented with erroneous or inappropriate input, it will deliver a suitable error message, and not go into hyperspace for half an hour.
It does not use 150 processor cycles when 20 would do it if the code were tighter.
Its buffer pointers always match the actual size of the buffer contents, and it cannot be fooled into overflowing one.
Should it suffer an interal error (or bug, it can happen to the best once in a while), it exits gracefully, without trashing the system.
The worst software fails on at least one, usually several, of the above points. |