Project methodologies often fail to take full advantage of what is known about interface design. This omission can be the result of bringing in interface designers long after much of the opportunity for improving the quality of interaction between user and product has been lost. Designs are most flexible at their inception. If interface designers are consulted only after the software has been designed and the software tools chosen or when the software is nearly complete, the correct advice namely, to start over is unacceptable. The budget and most of the schedule have already been expended, and the option of throwing away much or all of the design and the completed code makes the project managers look bad. Even so, as recent a book on project management as the UML Toolkit (Eriksson and Magnus 1998) fails to recognize that the interface has to be part of the requirements analysis, which is Eriksson and Magnus's first phase of project development. Contrary to their suggestion, interface design cannot be postponed until the technical design phase (their third phase). Once the product's task is known, design the interface first; then implement to the interface design. This is an iterative process: The task definition will change as the interface is designed, and the implementation will be influenced by the task definition and the interative interface design as well. Flexibility on all fronts is needed. The place to start the implementation is to list exactly what the user will do to achieve his or her goals and how the system will respond to each user action.
Users do not care about what is inside the box, as long as the box does what they need done. What processor was used, whether the programming language was object oriented or multithreaded, or whether it was the proud possessor of some other popular buzzword does not count. What users want is convenience and results. But all that they see is the interface. As far as the customer is concerned, the interface is the product.
Your Time Is Sacred; Your Work Is Sacred
I have learned to save my work frequently so that, even in the event of a system crash, I will not lose much time. I use a keyboard-operated save command every time I complete a paragraph or even a few sentences. This command places a copy of my work on the disk, where it is relatively safe from damage in a crash. Every hour or so, I further back up my work to a nonvolatile memory card that I physically remove from the computer so that the backup is isolated from the computer and is safe, no matter how the computer runs amok; every week, I back up the whole system on an external disk drive. I am not paranoid, just realistic. Yet these elaborate procedures should be unnecessary. The system should treat all user input as sacred and to paraphrase Asimov's first law of robotics, "A robot shall not harm a human, or, through inaction, allow a human to come to harm" (Asimov 1977, p. 44). The first law of interface design should be: A computer shall not harm your work or, through inaction, allow your work to come to harm.
While working on this book, and at the suggestion of my editors, I began to use a facility that allows me to accept or to reject suggested changes. After every few decisions, I used the save command. When the system crashed, I was not worried, because of my continual saves. But when I went to find my most recent changes, they were gone, and I had to redo my work. By trying a few experiments, I finally figured out that when the accept-reject feature is in use, the keyboard save command does not operate. No warning is given. I lost more than three hours in work and in experimenting to figure out what had happened, in the hope of preventing a recurrence. Aside from the sheer complexity of today's computer systems, it is vexing details such as this one that prove the need for better interface design.
For a second interface law, you could do worse than to insist on this one: A computer shall not waste your time or require you to do more work than is strictly necessary. Section 4-3 introduces a measure of how much work is necessary to complete a task.