Evolutionary Prototyping
Evolutionary Prototyping is an approach where the prototype of a system is incrementally refined based on stakeholder feedback until it eventually evolves into the final product. Unlike Throwaway Prototyping, where a model is quickly constructed with the representation of only those aspects of the software that are of interest and then discarded, in Evolutionary Prototyping, the prototype is continually improved and updated.
Objectives and Usage
Incremental Refinement: The primary objective is to build a system incrementally, allowing for the prototype to be improved step-by-step based on feedback from end-users and other stakeholders.
Feedback Loop: This approach keeps stakeholders involved at various stages, thereby making sure that the development aligns closely with end-user expectations and business objectives.
Risk Mitigation: The incremental nature and constant feedback loops make it easier to identify issues or make changes early in the project, reducing the risks of late failure.
Characteristics
Iterative Process: Evolutionary Prototyping is inherently iterative, involving a cycle of development, evaluation, and refinement.
Functional Core: Initial prototypes often start with a functional core, and additional features and improvements are added in subsequent iterations.
End-User Involvement: One of the key features is the continuous involvement of end-users, making the development highly responsive to the market needs and preferences.
Living Model: Unlike other forms of prototyping that may start anew with each iteration, the evolutionary prototype is a "living model" that evolves over time.
Applications
Complex Systems: Particularly useful for complex systems where requirements are not well-understood or are expected to change.
User-Centric Products: Highly beneficial in user-centric or consumer-facing applications where user feedback is critical for the success of the product.
Agile Environments: Often used in agile development frameworks which emphasize incremental development and stakeholder collaboration.
Relationship to Requirements
Elicitation and Validation: Prototypes serve as a practical tool for both eliciting new requirements and validating existing ones.
Change Management: The approach allows for easy incorporation of changes even late in the development process, which is a critical aspect in requirements management.
Clarification of Ambiguities: The prototype serves to clarify ambiguities and confusions in requirements, offering stakeholders a tangible or visual experience to interact with.
Evolutionary Prototyping allows for a dynamic and responsive development process that aligns closely with stakeholder needs and market demands. However, its iterative nature may require rigorous change control mechanisms and may also raise challenges in project management and cost estimation.