# Why Software Usability is Important

Software is meant to be usable to all people, and not just for people who knows their operating environment intimately. Good, usable software prompts for rapid adoption, which means writing good usable software is inherently good business.

This is especially inherent in the geeky *nix world, where software usability is something that is more overlooked than not. Let’s cite the simple example of checking for software authenticity such as in Linux where there is a command line tool called 'md5sum' that allows you perform authentication of your files using a well known algorithm called md5 checksum. Funnily, its usability may strike general users as surprising, or simply unintuitive.

Assuming that you have downloaded an archive as well as it’s md5 checksum to verify it’s authenticity:

-rw-r--r-- 10596439 2008-12-07 14:22 example-archive.tar.gz
-rw-r--r--       57 2009-01-29 12:20 example-archive.tar.gz.md5


If you pass md5 sum on the command line with the example archive, you’ll get something like this:

% md5sum example-archive.tar.gz
1d0f7455e5dd5e79f0b678f558552b54  example-archive.tar.gz


The tedious way to visually inspect the file is obviously to compare it with 'example-archive.tar.gz.md5', or maybe to use 'diff' to perform a comparison.

But reading through the 'man' pages, it indicates that you’re able to check the file downloaded with the MD5 using the --check | -c parameter, but doesn’t give a usage case.

Given the ambiguity, you might have tried:

% md5sum -c example-archive.tar.gz
md5sum: example-archive.tar.gz: no properly formatted MD5 checksum lines found


Maybe I was just plain dumb in my understanding, but obviously if I passed the same file with the .md5 extension, it will have indicated success:

% md5sum -c example-archive.tar.gz.md5
example-archive.tar.gz: OK


The main confusion stems from the fact that the 'man' page did not indicate what kind of a file that I have to pass using the -c argument, but worse, did not indicate that it’s a different file that I have to pass in order to get it to work! (Read the man page yourself)

The simple fix in this case will be for the software to look for a file with an .md5 extension, where the program verifies the result automatically.

Even so, I think the ideal case will have to be that the checking/verification should really be transparent to the user without having to know it exists at all.

All these improvements does simply imply more work for the programmer, in which is why software development is often a laborious, thankless job.

Whenever you do it right, the user will never know; do it wrong, and you’ll have tons of angry users directing their wrath at you. ;)