Iterative development, by employing prototypes, is the key to ensuring that users remain at the center of the process while the product is being refined and cost trade-offs are being made. Users also often find it difficult to understand written specifications and prefer to critique rough prototypes. Early and Late Prototypes There are two kinds of prototypes, each with a different purpose. Early prototypes are used to validate the designers' understanding of the users' domain and to explore design alternatives. These prototypes should be partial, cheap to produce, and discarded frequently.
Later prototypes are evolutionary and are gradually refined to become the finished product.
These lo-fi prototypes are important because they allow users to be involved early in the process and because users will feel better able to critique artifacts that are obviously unfinished. Producing high-quality prototypes at this stage is inappropriate and can divert effort from the main design issues onto small details. When the main design issues are relatively stable, or when a predefined project deadline has been reached, a prototype will be produced that is to be refined into the final product. This prototype will need to be robust, reliable, and meet software design quality requirements. Users still must test and critique this prototype, as there will still be design trade-offs and probably some HMI compromises to be made that will affect end users.