Chapter 42. User-Interface Prototyping

In User-Interface Prototyping, the user interface is developed quickly to explore the user-interface design and the system's requirements. Sometimes a special-purpose prototyping language is used; other times prototyping is done in the target programming language. User-interface prototypes are either thrown away or evolved into the final product. Making the right choice about whether to evolve the prototype or throw it away is one key to success. Other keys to success include involving end-users appropriately, keeping initial prototype implementations as simple as possible, and using experienced developers.

Efficacy

Potential reduction from nominal schedule:

Good

Improvement in progress visibility:

Fair

Effect on schedule risk:

Decreased Risk

Chance of first-time success:

Excellent

Chance of long-term success:

Excellent

Major Risks

  • Prototype polishing

  • Risks of Evolutionary Prototyping or Throwaway Prototyping, depending on whether the user-interface prototype is evolved or thrown away

Major Interactions and Trade-Offs

  • Draws from either Evolutionary Prototyping or Throwaway Prototyping

Developers have found that putting a live prototype in front of a system's users is a more effective means of eliciting user feedback than a paper specification is. User-Interface Prototyping supports rapid development in several ways.

Reduced risk. Without prototyping, if the user interface is found to be unsatisfactory, the only options available are to discard the bad user interface and start over or to live with the bad user interface in spite of its problems. In either case, you don't discover the inadequacy of the user interface until late in the development cycle, and the cost of not discovering the mistake is high.

If you prototype the user interface early in the development cycle using development tools that are well-suited to the task, such as visual programming languages, you can develop different user-interface designs quickly, test them with users, and modify them until you find an acceptable design. You incur the costs up front, and you make the different user-interface design attempts using relatively inexpensive implementations in a visual programming language rather than relatively expensive implementations in the target language.

User-Interface Prototyping is probably best suited to business-software projects in which developers can have frequent, informal interactions with end-users. But it is also well suited to commercial, shrink-wrap, and systems projects as long as you can get end-users involved. The user interaction for these kinds of projects will generally need to be more structured and formal.

CROSS-REFERENCE

This benefit can be offset by the risk of feature creep. For details, see Mid-Project: Feature-Creep Control, Mid-Project: Feature-Creep Control.

Smaller systems. One of the unexpected effects of User-Interface Prototyping is that it tends to lead to smaller systems. The features that developers think users want are not always the same as the features that users themselves want. Sometimes users will insist on having a feature that looks good on paper but works poorly in the live system. User-Interface Prototyping can weed out those features early in the project, thus making it easier to trim the feature set and reduce development time.

Less complex systems. Developers are drawn to complexity. For example, developers sometimes focus on the most complicated areas of a system because those areas are the most challenging and therefore the most interesting to them. End-users, however, often aren't interested in complexity in the same way that developers are; indeed, they frequently shrink from complexity. The most complex parts of the program—the parts that are most difficult to implement—are often the parts least desired by end-users, who are often willing to trade feature-richness for simplicity and better usability. Prototyping can identify the complex features that the users don't even care about.

Reduction in creeping requirements. Developers who have used User-Interface Prototyping have discovered that it reduces feature creep, the requirements that are added after you initially specify the system. With prototyping, users have a better initial understanding of the system than they would otherwise have, and so they request fewer changes.

Improved visibility. Developing a live prototype early in the project provides managers and customers with a tangible sign of progress earlier than traditional development methods do.

Using User-Interface Prototyping

User-Interface Prototyping is most suitable as a strategy on new projects. You can use it to flesh out the feature set itself or just to design the user interface.

Throwaway or Evolve

Both evolutionary and throwaway prototypes are evolved in response to changes in the feature set or user-interface design. You'll generally want to keep the prototype flexible so that you can refine it in response to user feedback. Once you've explored the system's functionality with the users, the prototype can serve as a live requirements specification for the visible aspects of the program.

At some point, you begin building the real system, and at that point you either throw away the user-interface prototype and begin building the real system or you begin evolving the user-interface prototype into production code. The first decision you make with User-Interface Prototyping is whether to build a throwaway prototype or one that you will eventually evolve into production code—an evolutionary prototype. You need to make that decision at the time that you begin building the prototype, not the time that you begin building the real system.

One rule of thumb is: If you know a lot about requirements and have had relatively few conflicts about priorities and trade-offs, use the Evolutionary Prototyping approach. Otherwise there will be too many changes, in which case you should use the Throwaway Prototyping approach to explore requirements and user-interface designs.

Another guideline is that, on small systems, Evolutionary Prototyping is preferable because the overhead of creating a throwaway prototype makes it economically undesirable. On medium and large systems, you can use either Throwaway Prototyping or Evolutionary Prototyping successfully.

You can also prototype the main system using Evolutionary Prototyping and prototype the riskiest parts with Throwaway Prototyping before beginning full-scale development of those parts.

Choosing a Prototyping Language

CROSS-REFERENCE

For risks and benefits associated with prototyping languages, see Chapter 31, "Chapter 31.

If you plan to throw away the user-interface prototype, you might decide to use a special-purpose prototyping language. The main consideration in choosing a language in this case is how quickly you can develop the user interface. You don't even have to use a prototyping language. One company made screen shots of the product's screens, blew them up to giant size, and posted them on the walls of a conference room. Then they held an "art show," and had people walk through the "art gallery" and write their comments directly on the screen shots. When you use screen shots like this, they end up being covered with comments. People can proceed at their own pace, come and go according to their own schedules, respond to other written comments. This can be a useful practice.

If you plan to evolve the user-interface prototype into the final system, the most important consideration in choosing a language is determining how well the prototyping language supports the entire growth envelope of the system. Some user-interface–oriented languages offer strong support for user-interface development but weaker support for development of database, graphics, communications, report formatting, and other program areas, which can consume at least as much time as developing the user interface does. Choose a language based on its support for end-to-end product development, not just support for the user interface.

Hollywood Facade

Another key to success is remembering that you are prototyping, not developing the real system. All your prototyping work stands a chance of being thrown away if your users don't like it. Until you know for sure whether any part of the system is in or out, try to put 100 percent of your effort into the visible parts of the system. Don't spend time on parts the user can't see. Treat the prototype as a Hollywood movie facade—it looks real from certain angles, but aside from its looks, it's nothing like the real thing.

The more smoke and mirrors, the better. If the prototype is supposed to display color graphics, don't implement color graphics support in code even if it's relatively easy to do so. Instead, try to find an even easier way to display prebuilt color graphics. Create the graphics using an off-the-shelf drawing program, and load each prebuilt graphic at the appropriate time. The prototype should provide end-users with the look and feel of the program. It doesn't actually have to work. If it does work, you've probably spent more time than you needed to.

Calculations don't have to calculate: Simply show the same results every time, or switch back and forth between two sets of results. Reformatting doesn't have to reformat anything; simply swap one canned screen shot for another. The Print button doesn't have to perform printing; simply copy a preexisting print file to the printer. Data conversion from the old version of the product doesn't have to convert data; simply put up the wait cursor and then display predefined output. Have your group brainstorm about creative ways to provide the desired look and feel while writing the least amount of code possible.

Keep entry-level programmers away from prototyping. During prototyping, developers need to have a well-developed sense of how little they can do to explore the areas of risk that the prototype is intended to explore.

End-User Feedback and Involvement

Although User-Interface Prototyping usually improves software usability, that doesn't necessarily translate into improved user satisfaction. Inappropriate kinds of user involvement sometimes worsen user satisfaction.

You must involve end-users. You won't realize the benefits of prototyping if only developers and middle management are involved. Let the users test-drive the user-interface prototype. This will clarify the requirements, help to reveal the actual requirements of the program, improve the match between the software and the users' needs, and improve the product's overall usability.

Control access to the prototype. Unrealistically high user expectations are usually fueled by too much or too little access to the prototype. Tell the users that the purpose of showing them the prototype is to clarify the requirements. You might want to limit their use of the prototype to a demonstration of certain sequences of screen shots and operations, using the prototype more as a visual aid than as an interactive software program.

Be aware that customers don't always know what they're looking at when they see a prototype. I once developed a prototype for an analytical application in Microsoft Windows that generated graphical outputs. In the prototype, I used canned graphics so that no matter what numbers the user input, the same canned graphic would always appear. Since the canned graphics could be generated instantly, I put in a 2-second delay to create the impression that the prototype was doing the database access and number crunching that the real application would have to do.

Even with the 2-second delay, users were delighted at how quickly the prototype generated its graphics. The first time I demonstrated the prototype, several users argued with each other about why the Windows prototype was so much faster than the Microsoft MS-DOS product it was replacing. One user argued that it was because Windows graphics were faster than DOS graphics. Another argued that it was because the prototype must have had only a miniature database instead of the full-scale database. Another argued that it was because the new program was using a different math library than the old program. It didn't seem to occur to anyone that the prototype was truly just smoke and mirrors, that nothing was really going on behind the scenes, and that the graphics were actually taking longer to generate than they should have taken.

If you do a good job of prototyping the look and feel of your product, your users are likely to be overwhelmed by a live software demonstration. They will be so impressed that they won't think about whether the prototype includes all the functionality they want. If you're using the prototype to elicit user requirements, be sure that users study the prototype carefully enough to criticize it. Explain some of the design trade-offs you've made, and be sure that they understand the trade-offs and agree to them. Develop a checklist so that you can conduct a structured interview with users who use the prototype. Be sure that they look at everything you want them to look at.

Once you do get meaningful feedback from your users, evolve the prototype enough to confirm that you understand what they told you. One of the most effective ways of showing that you have heard and understood their comments is to show them an updated prototype that accounts for their feedback. In addition to building good relations with users, this helps to catch any miscommunications; it gives the user a chance to say, "No, that's not what I meant."

The Finished Product

Creating a Hollywood facade is a great prototyping strategy, but a product can't live on smoke and mirrors forever. At some point you have to decide how to move from the prototype to the finished product. At that point you have three options:

  • Discard the prototype and implement the real product from the ground up.

  • Fix the bugs in the prototype and ship it.

  • Use throwaway prototypes for the first version of each feature and evolutionary prototypes for later versions. Implement the first version of each feature by optimizing the use of smoke and mirrors. Once a go decision has been made for a feature, throw out the prototype code, implement the real code, and evolve the real code from there.

You can also use different approaches for the user interface and the rest of the system. It's possible to prototype the user interface but develop the rest of the system using a traditional approach.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.145.8.153