Goal-Directed ® design

by Alan Cooper

June 25, 1996

(This article originally appeared in the September, 1996 issue of Dr. Dobb's Journal.)

By assuring that your software moves the user inexorably toward his or her goals, you can design software that is deeply satisfying and effective. In this article I'll show you this method and how it will allow you to eliminate unnecessary features from your products; to separate good design ideas from bad ones; and to create software that makes your users happier and more productive.

As an example of how this method works, imagine that you are a software designer with the mandate to design a group calendaring program. You have certainly seen or used such programs before. They let you coordinate meetings with your colleagues by drawing them onto a calendar. Now I'd like to ask you a personal question: What is your goal with regards to most of the meetings that you are scheduled to attend?

I'm confident that your answer was "To not attend them!" because I've asked this question of dozens of people, and their answer is always the same. We have all attended one too many useless snooze-sessions masquerading as productive meetings. Our number one goal is to avoid attending any more of them!

The main goal of almost all users of group calendaring software is to avoid needless, unproductive meetings, yet the number-one task performed by almost all of that software is to create meetings. This contradiction, where the user's goals and the program's tasks are in direct opposition is symptomatic of the failure of our current design methods to work effectively. What's more, this contradiction is found almost universally in our software, regardless of its type.

Goals versus tasks

It is easy to confuse goals with tasks, but the two are very different, and are often in direct opposition to each other. For example, the doctor, whose goal it is to keep you healthy, spends all of her time and energy curing your illness. The goal of the United States is to have peace in the world, which is why we own the world's largest arsenal of nuclear weapons. Our military's task is to wage war and destruction. Our goal is to keep the peace.

The confusion is rampant in computer systems, too. The programmer's task is to assure that the program doesn't get confused, so he puts barriers up to assure that no unexpected data will get entered into the database. However, the user's goal is to quickly handle the varied and unpredictable demands of the client. If the client, for example, hasn't yet established where an order should be shipped, and the program rejects the order because it lacks a valid shipping address, the software has achieved the task of data integrity while utterly failing to achieve the goal of recording the client's order. Another way of looking at it is that the author of the software has mistakenly imposed his goals as a programmer on the user, instead of making his code work to achieve hers.

Certainly it is good to maintain an unsullied database, but it is not beneficial to maintain the purity of the database at the expense of the employee who interacts with the database or the client who is rebuffed. It is not a good thing to have a speedy and smooth airline flight, only to discover that the plane has landed at the wrong destination.

Another interesting illustration of goal and task confusion is the design of bookkeeping systems. The very nature of manual bookkeeping systems was such that they were prone to arithmetic errors because fallible humans were doing the computing. The double-entry method was invented to fix this problem. Its sole virtue was that it detected arithmetic errors in manual ledger entries. Essentially, each transaction was booked twice in two separate accounts, with the expectation that an arithmetic error in one entry wasn't likely to be duplicated exactly in the other, offsetting entry. When the totals didn't balance, it was an indicator-an error message, if you will-telling the accountant to check his math. Ever since, bookkeeping systems have been built around this double-entry idea.

Enter the computer, a tool with many shortcomings, of which arithmetic capability is clearly not one. No computer will ever make an error adding or subtracting, yet most computerized bookkeeping systems religiously use the double-entry system.

When you examine bookkeeping from the point of view of the user's goals, rather than merely examining the familiar, manual tasks, you find that making two entries isn't a goal. If the business person could get reliable accounting with one entry, she'd do it. If she could do it with no entries she would! The point isn't the method, it is the objective.

An interesting observation about user's goals is that they remain constant even when the technology changes. Imagining that an accountant's goal is avoiding arithmetic errors leaves you high and dry when technology consigns arithmetic errors to the trash bin of history. The goal of the accountant has always been to create an accurate paper model of the state of the business. The railroad companies imagined that they were selling trips on trains and their posters and ads trumpeted their sophisticated locomotives. Contemporary airline industry advertisements showed pictures of people relaxing on sunny beaches. When was the last time you took the train?

Avoiding meetings

Let's go back to our original example: the group calendaring program. How can a program that is supposed to make you attend meetings allow you to avoid them? Theory might be interesting, but we have to ship beta in six weeks!

Let's take the agenda facility in our calendar and turn it to our advantage. This feature lets us write a short note describing the meeting's purpose, attach it to the schedule and send it to all of the invitees. For example, it might say "Please meet with me on Tuesday, June 17th at three o'clock to decide on the retail price of our new Spam-O-2000 product." Normally, everyone will trudge down to the meeting and yawn through long-winded pleas for various prices. Instead, we could disconnect the agenda feature from the meeting feature. We allow the user to create an agenda without attaching it to a meeting. The agenda note now says "What should we charge for the Spam-O-2000?" and it is sent to the same list of people. If the responses range from "ten dollars" to "ten thousand dollars" you really do have a problem and must go ahead and call a meeting; You're back to square one. On the other hand, if everyone replies "a buck-fifty" or "whatever you want" or some other useful consensus, then you have just succeeded in avoiding a meeting! The software has directly helped you to achieve your goal.

What is remarkable about this solution is that most existing group calendaring systems have agenda features already built into them. It wouldn't take much programming effort to disconnect agendas from meetings. Designing for the user's goals is a lot easier than you think. Mostly, it's a matter of being willing to trust in goals and being equally willing to ignore the hegemony of tasks.

The goal stack

Because they are critical, let's examine goals in more detail. The range of possible goals is not homogeneous. I divide them into four basic categories: false goals, practical goals, personal goals, and corporate goals. Here are some examples from each category:

False Goals

Copyright © 1996, Alan Cooper
Last updated January 6, 1997
Talk back to us!