On some projects, developers become stuck preparing viewgraphs and documents instead of developing software. Management never obtains the proper development tools, and engineers have no alternative but to use office automation software to produce psuedo-technical diagrams and papers.
This situation is frustrating to the engineers, it does not use their real talents, and allows their skills to obsolesce.
Many of the developers caught in viewgraph engineering roles should be redirected to construct prototypes. Prototyping, underutilized by many organizations, has many roles in a project beyond the creation of a sales tool. It is a key element of iterative, incremental development processes.
Prototypes can answer technical questions that cannot be deduced through paper analyses, and can be used to reduce many types of risks, including those related to technology and user acceptance. Prototyping helps to shorten learning curves for new technologies.
Two principal kinds of prototypes are: mockups and engineering prototypes. A mockup is a prototype that simulates user-interface appearance and behavior. When mockups are coupled with system usability experiments (with actual end users), requirements issues and user acceptance can be assessed. Engineering prototypes include some operational functionality, such as application services, databases, and integration with legacy systems.
Prototyping a system in an alternative language (such as Smalltalk) prior to production system development is a useful exercise. This prototype can help to validate an architecture prior to implementation in a more efficient, but more costly and less flexible technology.