Software Development; Programming Methodologies; Software Engineering
Prototyping is a software development methodology that focuses on the use of working models that are repeatedly refined based on feedback from the end user. Prototyping is most often used to develop systems that include significant end-user interaction and complex user interfaces.
Prototyping is a software development methodology that involves making working models of the application as it is being developed. These working models, or prototypes, are repeatedly refined and improved based on feedback from users and other stakeholders. Prototyping is an iterative development method in which prototypes are designed, built, evaluated, and refined repeatedly until the system functions as required.
Prototypes are working models, but they are not complete. They include only partial functionality and are intended to be revised, expanded, and improved during each cycle in the development process. There are two categories of prototypes. Horizontal prototypes model the entire software system under development. They often focus on the user interface, offering a broad view of the overall system with limited internal functioning. Vertical prototypes are used to model individual parts of the system in an in-depth manner. They offer a more detailed view of how individual components, such as a specific system function or subsystem, will work.
Prototyping typically consists of four main steps: requirements identification, prototype development, user evaluation, and prototype revision. In the first step, the basic requirements that the software must fulfill are determined. The focus at this stage is on the users’ needs and the design of the user interface, not on developing comprehensive and detailed requirements, as would be the case in traditional methodologies such as waterfall development. In the second step, the prototype is created, based on the project's initial requirements and on feedback received during any previous prototyping cycles. In the user evaluation phase, the customer and other stakeholders test the prototype and provide feedback to the development team. The fourth step involves revision or enhancement of the prototype based on that feedback. Steps two through four are then repeated until the application meets the needs of the users and other stakeholders.
There are different types of prototyping. In throw-away prototyping, also known as rapid or close-ended prototyping, the first prototype is created very early in the process, after only basic requirements have been determined. The creation of this preliminary prototype allows developers and stakeholders to further understand and refine the requirements. The prototype is then discarded, and work begins on the actual system. This method is often used to quickly test a small portion of a larger software system. Once the throwaway prototype has been used to verify that this small portion functions correctly, its functionality is incorporated into the final system. This process of incorporating functionality is called integration.
Another type is called evolutionary prototyping. In evolutionary prototyping, the first prototype is based only on those requirements that are well defined and clearly understood at the outset. The initial prototype is not discarded. Instead, new functionality is added to it as more requirements are clarified and understood. This process is repeated until the initial, minimally functional prototype has been expanded into the final, fully functional system.
In incremental prototyping, multiple prototypes are built for each of the various system components. These components are developed separately and then integrated to form the completed application.
Extreme prototyping is a three-step method commonly used for web development. First, a static, typically HTML-based prototype of the entire website or application is developed. Next, a second prototype that simulates the complete user interface is developed. This prototype does not contain the underlying functionality required for the application to be operational. Actual functionality is added in the final step by integrating the prototypes from the first two steps.
Prototyping offers several advantages over other methodologies. As users are involved in all stages of the development process, user enthusiasm for, understanding of, and commitment to the project is maximized. User involvement also allows design flaws and missing functionality to be detected early in the development process. This increases the chance that the final application will meet the real-world needs of the end user.
While prototyping offers considerable benefits, there are also downsides to this methodology. Failure to determine detailed specifications at the beginning of the design process can result in constantly changing specifications and the inclusion of additional features that have a negative impact on project costs and scheduling. The system being developed may grow in size and complexity, causing stakeholders to lose sight of the project's original objectives. In addition, projects developed using prototyping must be managed to ensure that resources are used efficiently when building multiple prototypes.
Prototyping differs greatly from linear development methodologies such as the waterfall model. These methodologies define system specifications in detail at the beginning of the design process and minimize changes during the development process. Prototyping is more closely related to other iterative development models. Prototypes are often used in conjunction with iterative methodologies such as rapid application development (RAD) or the spiral model.
Prototyping facilitates the development of software systems that are easy to use and focused on meeting the end user's needs. As such, it is an ideal methodology for developing systems that require extensive user interaction and easy-to-use interfaces, such as web applications and mobile consumer applications. Prototyping allows for early identification of weaknesses in a system's design, and it encourages increased buy-in from project stakeholders. As software systems grow increasingly important in the lives of everyday users, prototyping, with its focus on user involvement and satisfaction, will remain an important software design methodology.
—Maura Valentino, MSLIS
Bell, Michael. Incremental Software Architecture: A Method for Saving Failing IT Implementations. John Wiley & Sons, 2016.
Friedman, Daniel P., and Mitchell Wand. Essentials of Programming Languages. 3rd ed., MIT P, 2008.
Jayaswal, Bijay K., and Peter C. Patton. Design for Trustworthy Software: Tools, Techniques, and Methodology of Developing Robust Software. Prentice Hall, 2007.
MacLennan, Bruce J. Principles of Programming Languages: Design, Evaluation, and Implementation. 3rd ed., Oxford UP, 1999.
Scott, Michael L. Programming Language Pragmatics. 4th ed., Elsevier, 2016.
Van Roy, Peter, and Seif Haridi. Concepts, Techniques, and Models of Computer Programming. MIT P, 2004.
Wysocki, Robert K. Effective Project Management: Traditional, Agile, Extreme. 7th ed., John Wiley & Sons, 2014.