Suppose you are developing an MDI program. Whenever you run the program, you always maximize the main window first. Then you usually load the last document that was accessed. And then you maximize the document window to fill all the available space within the MDI frame. Now suppose that not just you but all of your users typically follow a similar sequence of actions when they start your program. Why? Should it be necessary to perform these steps every time?
Now suppose that your program performs these three steps by default or, better yet, if these steps were performed the last time the user ran the program. Now the program is launched maximized and the last document accessed is automatically loaded into a maximized window. You've done the user a big favor. But what is the downside? The downside is that the user might occasionally use the program in a slightly different way from what you expect. In this example, probably the worst case is that the user will have to close a window he really didn't want to use. Assuming the document loading process is fast, this is not a significant drawback.
TIP
A program should restore itself to the state it was in when last quit.
Let's look at a variety of techniques used by Microsoft Windows programs to eliminate unnecessary repetitive tasks.
Two important details contribute to the successful implementation of the automatic features supported by Microsoft Word. First, you can turn the features off or fully customize them. While the features help most users in most situations, of course there are situations in which they get in the way. Second, these features monitor the user and perform a correction only once. To use my earlier example again, if I type hte, Word automatically replaces it with the. But if I then replace the with hte, Word leaves it alone. Alternatively, I can have Word bail out of any automatic change with the Undo command. Word's automatic features are intended to help the user, but ultimately the user, not the program, is in control. (This is where the designers of HAL 9000 really blew it!)
TIP
Allow the user to fully customize automatic features and include the ability to turn them off.
TIP
Use automatic features to help the user, but leave the user in control.
These features have a tremendous range—some are very simple, some are very complex, but they all have one thing in common. They are all totally cool because they help users get their work done without fooling around. Features like these are among my favorites.
These features all show different ways that a program can eliminate unnecessary repetitive tasks. By performing tasks automatically, they all run a slight risk in performing a task in a way that the user doesn't want, but this risk is small and the advantages greatly outweigh the disadvantages. They also demonstrate another important principle: good programs go out of their way to help users get their work done.
TIP
The best programs go out of their way to help users get their work done.