Most problems with prototyping stem from having the wrong goals or motivations. The odds of successful prototyping improve significantly if you have practical, realistic goals and use a prototyping technique that can accomplish these goals. Let's look at some good and bad reasons to prototype.
I consider the following to be good reasons to prototype:
These goals have several attributes in common. The first is that there needs to be a specific objective—usually a specific design problem to be solved, a lesson to be learned, or a solution to be discovered. You shouldn't prototype for the sake of prototyping but instead to accomplish something specific. The second is that these goals do not necessarily require a functional prototype. You can use a nonfunctional prototype to solve problems, to visualize interfaces, or to communicate. Lastly, there is usually no need to prototype the entire user interface. You should prototype just enough to accomplish the goal at hand.
Sure, sometimes a full-blown, functional prototype that covers the entire user interface is warranted. If I were responsible for designing the next generation of the Microsoft Windows user interface, I would have no trouble justifying extensive prototyping of all the new user interface elements and the major system components. Without hesitation—no questions asked. After all, everything is new, the stakes are high, and the budget is there. But situations like this are relatively rare. Most programs simply don't have the type of problems that warrant such extensive prototyping. Rather, they have specific problems that justify specific prototyping.
I consider the following to be poor reasons to prototype: