Software prototyping, a possible activity during software development,
is the creation of prototypes, i.e., incomplete versions of the software program
being developed.
A prototype typically implements only a small subset of the features of the
eventual program, and the implementation may be completely different from that
of the eventual product.
The purpose of a prototype is to allow users of the software to evaluate
proposals for the design of the eventual product by actually trying them out,
rather than having to interpret and evaluate the design based on descriptions.
Prototyping has several benefits: The software designer and implementer can
obtain feedback from the users early in the project. The client and the
contractor can compare if the software made matches the software specification,
according to which the software program is built. It also allows the software
engineer some insight into the accuracy of initial project estimates and whether
the deadlines and milestones proposed can be successfully met. The degree of
completeness and the techniques used in the prototyping have been in development
and debate since its proposal in the early 1970's.
This process is in contrast with the 1960s and 1970s monolithic development
cycle of building the entire program first and then working out any
inconsistencies between design and implementation, which led to higher software
costs and poor estimates of time and cost. The monolithic approach has been
dubbed the "Slaying the (software) Dragon" technique, since it assumes that the
software designer and developer is a single hero who has to slay the entire
dragon alone. Prototyping can also avoid the great expense and difficulty of
changing a finished software product.