Concepts:
Prototypes
Topics
Prototypes are used in a directed way to reduce risk. Prototypes can reduce
uncertainty surrounding:
- The business viability of a product being developed
- The stability or performance of key technology
- Project commitment or funding: building a small proof-of-concept prototype
- The understanding of requirements
- The look and feel of the product, its usability.
A prototype can help to build support for the product by showing something concrete and
executable to users, customers and managers.
The nature and goal of the prototype must remain clear, however, throughout its
lifetime. If you don't intend to evolve the prototype into the real product, don't
suddenly assume that because the prototype works it should become the final product. An
exploratory, behavioral prototype, intended to very rapidly try out some user-interface,
rarely evolves into a strong, resilient product.
You can view prototypes in two ways: what they explore; and how they evolve or what is
their outcome.
In the context of the first view - what they explore - there are two main kinds of
prototypes:
- A behavioral prototype, which focuses on exploring specific behavior of
the system.
- A structural prototype, which explores some architectural or
technological concerns.
In the context of the second view - their outcome - there are also two kinds of
prototypes:
- An exploratory prototype, which is thrown away when done, also called a
throw-away prototype.
- An evolutionary prototype, which gradually evolves to become the real
system.
An exploratory prototype is designed to be like a small "experiment" to test
some key assumption about the project, either functionality or technology or both.
It might be something as small as a few hundred lines of code, created to test the
performance of a key software or hardware component. Or it may be a way of
clarifying requirements, a small prototype developed to see if the developer understands a
particular behavioral or technical requirement.
Exploratory prototypes tend to be intentionally "throw-away", and testing of
them tends to be informal. The design of exploratory prototypes tends to be very
informal, and also tends to be the work of one or two developers at most.
Evolutionary prototypes, as their name implies, evolve from one iteration to the next.
While not initially production quality, their code tends to be reworked as the
product evolves. In order to keep rework manageable, they tend to be more formally
designed and somewhat formally tested even in the early stages. As the product
evolves, testing becomes formalized, as usually does design.
Behavioral prototypes tend to be exploratory prototypes; they do not try to reproduce
the architecture of the system to be developed but instead focus on what the system will
do as seen by the users (the "skin"). Frequently, this kind of prototype is
"quick and dirty," not built to project standards. For example,
Visual Basic may be used as the prototyping language, while C++ is intended for the
development project. Exploratory prototypes are temporary, are done with minimal
effort, and are thrown away once they have served their purpose.
Structural prototypes tend to be evolutionary prototypes; they are more likely to use
the infrastructure of the ultimate system, (the "bones"), and are more likely to
evolve into becoming the real system. If the prototype is done using the
"production" language and tool set, there is the added advantage of being able
to test the development environment and let some of the personnel get familiar with new
tools and procedures.
|