Friday, February 27, 2009

Computer Science is really about managing complexity

The process of developing a software application is approximately as follows:

1. Write a bunch of functions that do useful things.
2. Package them in a container with an interface.
3. Organize the interface around some logical scheme.

In subsequent versions:

1. Fix a few bugs.
2. Add a few more functions.
3. Randomly reorganize the interface around some other logical scheme, because hey, the old one wasn't working since users couldn't find the functions they needed.
4. Rinse and repeat step 1.

Any reasonably large application is impaled upon the horns of the following dilemma: old users don't want the interface to change because it took so long to learn, however new users do want change because the current interface takes a long time to learn.

The problem is not with our methodology, or our programming languages, or even our interface technology. Some of you may take exception with that last one, but imagine that we have just invented a voice recognition system with an AI smart enough to understand our every request. Like Alāʼ ad-Dīn and his magic lamp, we would still not know what is possible unless we commanded the genie to list all of the possible wishes (which may be an infinite number).

The problem comes down to anticipating what the user wants. This is the basis of all user interface "improvements". We are all looking for the "easy button" that will just do whatever needs to be done, without any need to specify how or even what.

Begin a discriminating user of software is no special qualification to design user interfaces, in the same way that being a gourmet does not confer any special powers of cooking. And yet, need is at the heart of user interface design. Users want the functions that they perform with the software to be simple and straightforward and require the minimum of clicking and navigation. The ideal scenario is for the software to act like a surgeon's assistant, always standing ready with the appropriate tool at hand, and gently reminding us when we miss a step due to over concentration on the task at hand.

Building a great user interface then, requires not only study of UI concepts, but also study of usage patterns by the target audience. This in turn leads to dipping one's toes into the waters of operations research to determine if the entire process has been optimized from a global perspective.